手把手教你從數據預處理開始體驗圖數據庫

封面圖

本文首發於 Nebula 公衆號:手把手教你從數據預處理開始體驗圖數據庫,由社區用戶 Jiayi98 供稿,分享了她離線部署 Nebula Graph、預處理 LDBC 數據集的經驗,是個對新手極度友好的手把手教你學 Nebula 分享。node

這不是一個標準的壓力測試,而是經過一個小規模的測試幫助我熟悉 Nebula 的部署,數據導入工具,查詢語言,Java API,數據遷移,以及集羣性能的一個簡單瞭解。nginx

準備

全部的準備都須要找個有網的環境git

  1. docker RPM 包 docs.docker.com/engine/inst…
  2. docker-compose tar 包 github.com/docker/comp…
  3. 提早下載鏡像 hub.docker.com/search?q=ve…,將 metad、graphd、storaged、console、studio、http-gateway、http-client、nginx、importer(用 docker save xxx 命令將拉好的鏡像導出成 tar 包)
  4. 配置文件 github.com/vesoft-inc/…
  5. nebula-studio GitHub 上下載 zip 包 github.com/vesoft-inc/…

安裝

  1. 安裝 Docker:
$ rpm -ivh <rpm包>
$ systemctl start docker --啓動
$ systemctl status docker --查看狀態
複製代碼
  1. 安裝 docker-compose
$ mv docker-compose /usr/local/bin/ --把docker-compose文件移動到/usr/local/bin
$ chmod a+x /usr/local/bin/docker-compose --改權限
$ docker-compose -version
複製代碼
  1. 導入鏡像
$ docker load <鏡像tar包>
$ docker image ls
複製代碼
  1. 在機器 manager machine 上執行如下命令初始化 Docker Swarm 集羣:
$ sudo docker swarm init --advertise-addr <manager machine ip>
複製代碼
  1. 根據提示在另外一臺服務器上以 worker 的身份 join swarm
$ docker node ls
複製代碼
  • 添加 worker node 若是出現如下報錯:

Error response from daemon: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 172.16.9.129:2377: connect: no route to host"github

通常是防火牆未關閉致使的(用如下方式關閉防火牆)。web

$ systemctl status firewalld.service
$ systemctl disable firewalld.service
複製代碼
  1. 在 manager 節點上改寫 docker-stack.yml,並建立 nebula.env
-- nebula.env
TZ=UTC
USER=root
複製代碼
  • Yaml file 裏的 hostname 多臺機器不可同名,啓動時的錯誤多半是由於配置文件寫得有問題,v1 升級 v2 也只須要把配置文件裏的鏡像換一下就能夠了。
  1. 在 manager 節點上動 nebula 集羣
$ docker stack deploy <stack name> -c docker-stack.yml
複製代碼

這裏附帶一些我 Debug / 檢查方法:docker

$ docker service ls --查看服務狀態
$ docker service ps <NAME/ID> --查看某一個具體的狀態
$ docker stack ps --no-trunc <stack name> --查看 stack 裏全部的進程
複製代碼
  1. 安裝 Studio

代碼文件夾裏是 v1,有一個 v2 的文件夾裏是 v2數據庫

$ cd nebula-web-docker
複製代碼

apache

$ cd nebula-web-docker/v2
$ docker-compose up -d -- 構建並啓動 Studio 服務; 
複製代碼

其中,-d 表示在後臺運行服務容器centos

啓動成功後,在瀏覽器地址欄輸入:http://ip address:7001瀏覽器

測試

我用的 LDBC。

準備

  1. 獲取源碼 github.com/ldbc/ldbc_s…,scale factor 1-1000 用 stable branch。
  2. 下載 hadoop-3.2.1.tar.gz: archive.apache.org/dist/hadoop…
  3. LDBC 數據預處理

LDBC 數據預處理

這裏須要說明一下,要注意你用的 nebula 版本是否支持 「|」 做爲分隔符

ldbc 的全部 vertex 和 edge 的 ID / index 都有問題,須要處理一下使得全部 vertex 的 ID 變爲 unique key。

個人作法是每一個 vertex 我都給一個前綴,好比 person,原始 ID 爲 933,變爲 p933。(爲了試用一下我本身搭的 CDH 我用 Spark 作的數據預處理,處理過的數據放在 HDFS 以便後面用 nebula-exchange 導入)

硬件資源

硬件資源

備註:Nebula 不推薦使用 HDD,但我也沒有 SSD, 最後測試結果證實 HDD 真的很弱。

服務分佈

3 節點,服務分佈以下

  • 192.168.1.10 meta,storage
  • 192.168.1.12 graph,meta,storage
  • 192.168.1.60 graph,meta,storage

2 圖空間:

  1. csv:10 個 partition
    1. 原始數據約 42 M
    2. 7 千多個點,40 萬條邊
  2. test:100 個 partition
    1. 原始數據約 73 G
    2. 1.1 億多個點,28.2 億多條邊(Edge: 1,101,535,334;Vertex: 282,612,309)

導入 Nebula 以後,佔用儲存空間共約 76 G,其中 wal 文件佔 2.2 G 左右。

沒有作導入的測試,一部分用了 Nebula-Importer 導入,一部分用了 Exchange 導入:

數據導入結果

開始測試

測試方法:

  1. 選取 1000 個 vertex,進行 1000 次查詢的平均值

數據測試結果

  • 三度超時是將 timeout 參數調高至 120 秒後的結果,後來在終端執行了一次三度發現要三百多秒。

最後,但願這份文檔對和我同樣的小白們有幫助,也感謝一直以來社區和官方的答疑解惑。

Nebula 真的讓用戶感到真的很是 supportive,在學習使用 Nebula 的過程當中我也收穫了不少~

進一步交流

交流圖數據庫技術?加入 Nebula 交流羣請先填寫下你的 Nebulae 名片,Nebula 小助手會拉你進羣~~

要不要看看【美團的圖數據庫系統】、【微衆銀行的數據治理方案】以及其餘大廠的風控、知識圖譜實踐?Follow Nebula 公衆號NebulaGraphCommunity 回覆「PPT」便可習得大廠實踐技能 ^^

推薦閱讀

相關文章
相關標籤/搜索