本文首發於 Nebula 公衆號:手把手教你從數據預處理開始體驗圖數據庫,由社區用戶 Jiayi98 供稿,分享了她離線部署 Nebula Graph、預處理 LDBC 數據集的經驗,是個對新手極度友好的手把手教你學 Nebula 分享。node
這不是一個標準的壓力測試,而是經過一個小規模的測試幫助我熟悉 Nebula 的部署,數據導入工具,查詢語言,Java API,數據遷移,以及集羣性能的一個簡單瞭解。nginx
準備
全部的準備都須要找個有網的環境git
- docker RPM 包 https://docs.docker.com/engine/install/centos/#install-from-a-package
- docker-compose tar 包 https://github.com/docker/compose/releases
- 提早下載鏡像 https://hub.docker.com/search?q=vesoft&type=image,將 metad、graphd、storaged、console、studio、http-gateway、http-client、nginx、importer(用
docker save xxx
命令將拉好的鏡像導出成 tar 包) - 配置文件 https://github.com/vesoft-inc/nebula-docker-compose/blob/docker-swarm/docker-stack.yaml
- nebula-studio GitHub 上下載 zip 包 https://github.com/vesoft-inc/nebula-web-docker
安裝
- 安裝 Docker:
$ rpm -ivh <rpm包> $ systemctl start docker --啓動 $ systemctl status docker --查看狀態
- 安裝 docker-compose
$ mv docker-compose /usr/local/bin/ --把docker-compose文件移動到/usr/local/bin $ chmod a+x /usr/local/bin/docker-compose --改權限 $ docker-compose -version
- 導入鏡像
$ docker load <鏡像tar包> $ docker image ls
- 在機器 manager machine 上執行如下命令初始化 Docker Swarm 集羣:
$ sudo docker swarm init --advertise-addr <manager machine ip>
- 根據提示在另外一臺服務器上以
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
- 在 manager 節點上改寫
docker-stack.yml
,並建立nebula.env
-- nebula.env TZ=UTC USER=root
- Yaml file 裏的 hostname 多臺機器不可同名,啓動時的錯誤多半是由於配置文件寫得有問題,v1 升級 v2 也只須要把配置文件裏的鏡像換一下就能夠了。
- 在 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 裏全部的進程
- 安裝 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。
準備
- 獲取源碼 https://github.com/ldbc/ldbc_snb_datagen/tree/stable,scale factor 1-1000 用 stable branch。
- 下載 hadoop-3.2.1.tar.gz: http://archive.apache.org/dist/hadoop/core/hadoop-3.2.1/
- 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 圖空間:
- csv:10 個 partition
- 原始數據約 42 M
- 7 千多個點,40 萬條邊
- test:100 個 partition
- 原始數據約 73 G
- 1.1 億多個點,28.2 億多條邊(Edge: 1,101,535,334;Vertex: 282,612,309)
導入 Nebula 以後,佔用儲存空間共約 76 G,其中 wal 文件佔 2.2 G 左右。
沒有作導入的測試,一部分用了 Nebula-Importer 導入,一部分用了 Exchange 導入:
開始測試
測試方法:
- 選取 1000 個 vertex,進行 1000 次查詢的平均值
- 三度超時是將
timeout
參數調高至 120 秒後的結果,後來在終端執行了一次三度發現要三百多秒。
最後,但願這份文檔對和我同樣的小白們有幫助,也感謝一直以來社區和官方的答疑解惑。
Nebula 真的讓用戶感到真的很是 supportive,在學習使用 Nebula 的過程當中我也收穫了不少~
進一步交流
交流圖數據庫技術?加入 Nebula 交流羣請先填寫下你的 Nebulae 名片,Nebula 小助手會拉你進羣~~
要不要看看【美團的圖數據庫系統】、【微衆銀行的數據治理方案】以及其餘大廠的風控、知識圖譜實踐?Follow Nebula 公衆號:NebulaGraphCommunity 回覆「PPT」便可習得大廠實踐技能 ^^