实时计算图TigerGraph上手体验(一)

图服务其实是一个很大, 很广的概念, 存在着很多棘手的问题难以解决, 所以图虽然诞生了很长时间, 但是一直不愠不火.

大概在今年6月, 图业界展现了一颗闪亮的星—TigerGraph发布了免费的开发者版本, 它的出现几乎让目前业界所有图服务都黯然失色, 号称解决了一系列大难题和痛点. (备注: 华为/腾讯自研的图计算引擎目前还不清楚具体性能)

这篇文章就从体验/学习TigerGraph开始 .看看它到底有没有这么牛吧~

0x00.结构&亮点

A.结构

给出官方的整体结构图, 这个图算文档中少有的比较清晰的介绍TigerGraph 结构或者原理的了… 虽然很多地方还是不太清楚, 比如数据源这里HDFS/Spark/RDBMS是怎么导入的? UDF又是什么

tgPlatform00

B.亮点

Tigergraph的亮点还是挺多的, 而且都是目前主流图服务没有解决的痛/难点 ,在文尾的参考链接区分那已经有比较好的说明, 后续我再补吧.

0x01.单机版实战

A.安装&前端

这里先用开发者版本单机测试一下, 然后等30d-trai证书下发后再测试集群正式版. 首先下载安装包然后解压, 安装包有1.3G+ ,如果网络环境正常可以直接wget,需要的环境配置-官方如下:

  • 最少4核+8G内存+20G磁盘的机器,推荐使用8核+64G内存+1T的HDD(RAID10)/SSD. (网卡千兆起步,万兆为宜.)
  • 物理机/虚拟机都可,集群版实测建议用物理机,避免虚拟化的性能影响,大内存用于实时图计算
  • Cent6.57.4 / Ubuntu-LTS 1418 (必须,否则安装会被中止.)
  • 集群模式需要 : NTP , iptables/firewall ,为了测试HA至少需要3台机器
  • TigerGraph安装其他库依赖的端口冲突提前设置 (比如看看9000端口)

官方安装参考, 下面给出实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#具体的版本可以在release页面具体选择,因为这个会不断更新
#开发者版本直接用此地址即可:http://download.tigergraph.com/developer/tigergraph-developer-latest.tar.gz
wget http://service.tigergraph.com/download/release/tigergraph-xxxx-offline.tar.gz #目前使用的2.1.8,估计已到2.2.3了

#解压,然后给个软链(方便后续)
tar zxvf tigergraph-xxxx-offline.tar.gz
ln -s tigergraph-xxxx-offline tg #或者tiger,不建议用gsql

#可以看看install.sh写了什么,安装的时候有一系列参数选择. -h查看一下会发现有单机/集群等模式
#看了一下集群模式会自动调用配置文件,用ssh分发和生成ssh-key,这里填写商业版/30天试用的秘钥
cd gsql && sh install.sh -h
sudo ./install.sh -n #单机默认配置安装,无交互提示,类似"yum install -y", 正式版需要 -s/-c -l 输入64位的许可证
#觉得tigerGraph的安装脚本和环境检测/依赖安装挺不错,之后单独写篇文章学习参考下~
/_ __(_)___ ____ _____/ ____/________ _____ / /_
/ / / / __ `/ _ \/ ___/ / __/ ___/ __ `/ __ \/ __ \
/ / / / /_/ / __/ / / /_/ / / / /_/ / /_/ / / / / #截取一下安装过程的步骤,以便更
/_/ /_/\__, /\___/_/ \____/_/ \__,_/ .___/_/ /_/ #清楚了解做了哪些事
/____/ /_/
Welcome to the TigerGraph platform installer!

[PROGRESS]: Checking operation system (OS) version ...And a string of properties..
....some os/env info
[NOTE ]: OS check passed [OK]
...
[Summary]:
The tigergraph user: tigergraph #default user & path
The tigergraph user home: /home/tigergraph
The tigergraph install/root directory: /home/tigergraph/tigergraph

[PROGRESS]: Configuring system ...
[PROGRESS]: 1.Updating /etc/hosts ...
[PROGRESS]: 2.Copying files to /home/tigergraph/tigergraph, this may take a while ...
[PROGRESS]: 3.Switch user to tigergraph_user: tigergraph #切换操作用户
[PROGRESS]: 4.Installing system required tools ...
[PROGRESS]: 5.Setting up env path ...
[PROGRESS]: 6.Installing gium, this may take a while ...
[PROGRESS]: 7.Configuring system, this may take a while ...
[PROGRESS]: 8.Setting up license key ...
[PROGRESS]: 9.Installing tigergraph.bin, this may take a while ...
Stop existing services ..
WARNING: Dictionary init failed (300). Fall back to local configure.
Detect config change. Please run 'gadmin config-apply' to apply.
#这里多次出现此报错,不知道是什么情况... 后续待确认
WARNING: Dictionary init failed (300). Fall back to local configure.
Detect config change. Please run 'gadmin config-apply' to apply.
#这里可以看到TigerGraph的核心模块: 包括Kafka,ZK,GPE+GSE(图计算+图存储),Nginx(前端)+RESTPP+DICT(这个暂时未知)
[FAB ][2018-10-28 16:04:02] gsql_mon_alert_off
[FAB ][2018-10-28 16:04:03] shutdown_gsql_subsystems:KAFKA-LOADER
[FAB ][2018-10-28 16:04:03] shutdown_gsql_subsystems:RESTPP
[FAB ][2018-10-28 16:04:04] shutdown_gsql_subsystems:NGINX
[FAB ][2018-10-28 16:04:05] shutdown_gsql_subsystems:GPE
[FAB ][2018-10-28 16:04:06] shutdown_gsql_subsystems:GSE
[FAB ][2018-10-28 16:04:08] shutdown_kafkas
[FAB ][2018-10-28 16:04:08] shutdown_gsql_subsystems:DICT
[FAB ][2018-10-28 16:04:09] shutdown_zookeepers
#中间是一系列服务的检查,然后进入核心
Installing tigergraph.bin ...
./gpkg.sh #核心的命令都会打印输出,很直观
[16:04:28]Running: make -f MakeGPE clean / UDF / MakeScheduler
#写配置和crontab
ADMIN_SERVICE_SCRIPT=/home/tigergraph/tigergraph/.gium/GSQL/service/../scripts/admin_service.sh
WORK_HOME=/home/tigergraph/tigergraph
ZK_ADDRESS=127.0.0.1:19999
WORK_IP=127.0.0.1
CLUSTER_MACHINES='127.0.0.1'
> /home/tigergraph/tigergraph/bin/admin_server/config.sh
#下面会反复多次TigerGraph依赖的多个服务项是否正常启动,以及重试,超过次数貌似就会跳出,下面就显示安装完成了
_________________________________________________
Congratulations! Installation Finished! #但端口占用了
_________________________________________________
#如果9000端口占用,用lsof -i:9000 或 netstat -anpt |grep 9000 看看 (php-cgi会占..), 然后调整
$ gadmin --dump-config |grep 900* #查看配置项, 精准查找自行grep nginx,修改完后一定记得确认一下.
$ gadmin --configure Restpp.Port # gadmin --set nginx.port 900x 这个为什么没马上生效呢?奇怪
#更改配置设置后,通常需要运行
$ gadmin config-apply #如果不带参数比如nginx,则会把所有配置都扫一遍,速度较慢,但是注意nginx有些配置影响两个模块.
$ gadmin restart nginx #如果第一次启动就换start
#最后检查所有服务状态
$ gadmin status # -v可以显示详细信息(内存/CPU)

#查看一下文件结构...总文件几万个,目录几千所以需要限定一下level.. 结合 du -csh tigergraph/* 看看大小
$ tree -L 2 #不同版本大小不一样,但是占比类似,以开发者免费(dev)版为例.
├── tigergraph (3.2G for Dev-Version, 8.3G for FullVersion-Master,2.2G for FullVersion-Node)
│   ├── bin 231M
│   ├── config 220K
│   ├── data 20K
│   ├── dev 2.1G (核心)
│   ├── document 3.8M
│   ├── gstore 32K
│   ├── kafka 78M
│   ├── loadingData 4.0K
│   ├── logs 1.7M
│   ├── pkg_pool 530M
│   ├── visualization 182M
│   └── zk 59M
└── tigergraph_coredump -> /home/tigergraph/tigergraph/logs/coredump

整个安装过程非常快速(总计<15min), 核心耗时在makefile的地方,安装并启动了多个系统服务(详情),体验挺不错. 如果遇到了相关错误,可以查看一下官方的Administrator专用QA ,在没有图数据的时候, GSE / GPE /Graph的服务不会启动 , 但是其他都需要正常启动.

检查状态OK之后, 就开始快速上手, 初次建议下载一个公开的小的商品购买关联数据集(总共近百万数据), 当然如果你觉得就直接上实测性能,也可以采用官方推荐的Friendster 社交网络数据集数据集,它也是简单的两列数字,但是共有6560万个顶点和接近20亿条边 **,解压后约31G** , 下载时间可能长达5H以上, 所以建议提前下好..

1
2
3
#这里以12M的小数据测试一下, 下载数据并解压
wget https://snap.stanford.edu/data/bigdata/communities/com-amazon.ungraph.txt.gz
unzip com-amazon.ungraph.txt.gz #13MB大小,内容就是简单的两列数字.

TG可以用命令行gsql 或前端的GraphStudio 导入数据, 进一步降低上手难度. 先看看前端方式: Chrome中访问ip:14240 就能看到前端面板, 第一感觉很像Postman (一款测试神器)的UI. (商业版这里需要填入专用的超长key….)

  1. 先点击”Design Scheme“设计图的Scheme结构, 可视化的操作很简单, 这里就不多说了, 这里仅有定点, 所以是一个定点和一个指向自己的边. 设计完成后, 点击第一个”Publish“按钮, 会提示你创建新的Schema会删掉之前的数据, 重启服务 (操作不可逆, 请特别注意) 初次耗时大概2min.

  2. 点击Map data to graph ,这里是把数据和Schema关联导入的界面, 在线导入只支持csv 格式的文本, 我们把txt文件复制到 tigergraph/loadingData/下就可以了, 注意删掉前面几行注释 ~ 然后点加载数据会发现已经自动识别了. 然后把数据和所对应的边用箭头关联起来, 右边就会自动生成一个表格的关系对应, 然后手动/自动(没效果?)的连接起来. 就完成了数据和Schema的解析规则. (当然还有filter和其他高级选项, 后面再说)

    tigerGraph02

    tigerGraph03

  3. 再点击Load Data , 开始导入, 这个页面每5s会自动刷新一次, 一定程度会影响实测性能, 所以数据量大的时候可以转移到其他页面. 在导入的时候可以查看详细日志 (这里也有清楚数据功能, 实测比较慢, 除非极小数据, 否则不建议这种图形导入/删除数据)

  4. Explor Graph 就到了实时的展示页面了, 具体的功能分为几个

    • 点查

    • 由点扩展的关联查询

      tigerGraph01

    • 两点间最短路 / 全最短路. 这个深度在6以下速度应该都较快, 最大可以支持到12? (有限时间内)

      tigerGraph00

    • 多点间的联通性

  5. Write query 就是gsql的前端版本, 这里可以写复杂的查询, 自带IDE环境有代码提示.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    /*
    第一个简单gsql例子,关键字大小写效果一样,语法和传统编程语言比较相近.
    Both'//'和'#'都能表示注释,可以用 /* 多行注释
    这相当于编写了一个函数,install之后可以自定义进行传参,自定义性非常强..
    */
    create query query0(int num) for graph MyGraph {
    /* Write query logic here */
    foreach i in range[1,num] do
    2 print "query %i works!"; //这里%i并不能实际引用,我随便写的测试~
    2 end;
    }

    #查询给定顶点的k步邻居集合的查询,这个例子参考自官方
    CREATE QUERY test(VERTEX<product> p, int k) FOR GRAPH MyGraph {
    result = {p}; //官方二次传递值不知道用意是? 这里简化了
    FOREACH i in RANGE[1, k] DO
    result = SELECT dest_vertex FROM result:start_vertex-(buy)->product:dest_vertex;
    END;
    PRINT result;
    }

    tigerStudio00

    B.体验GSQL

    因为图形化的版本只是部分功能的体现, 原生的gsql才是查询的核心, 所以还是在服务器上体验一下gsql的用法, 这只是举个例子, 详细gsql和后续的进阶用法见GSQL体验(二)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #gsql已经在环境变量了,直接输入gsql就能进入.
    $ gsql
    Welcome to TigerGraph.
    GSQL > ls #列出当前图的基本信息,Jobs还不知道是什么.
    # Global vertices, edges, and all graphs
    Vertex Types:
    - VERTEX product(PRIMARY_ID id INT) WITH STATS="OUTDEGREE_BY_EDGETYPE"
    Edge Types:
    - UNDIRECTED EDGE buy(FROM product, TO product)
    Graphs:
    - Graph MyGraph(product:v, buy:e)
    #为了重新操作, 先清空一下之前的图Schem+图数据.
    GSQL > drop all
    #然后退出重启一下服务
    $ gadmin restart -fy # -fy代表静默强制

    #创建Schema相关信息
    #1.创建顶点,最简仅一个id
    GSQL > create vertex product (primary_id pid int) #都支持Tab补全,注意primary_id是关键字,必须的主键
    #2.创建一条无向边,有方向用directed关键字,通过FROM和TO关键字定义连接边的两个顶点.
    GSQL > create undirected edge buy(from product, to product)
    #3.创建图.比如命名test,创建完后会自动重启图服务,显示耗时时间20s左右.
    GSQL > create graph test(product,buy)

    #如果只是简单操作,可以用gsql 'cmd'的方式,直接返回结果.
    $ gsql 'ls'
    $ gsql -g MyGraph 'ls'

C.性能相关

性能从几个方面来看, 查询时的CPU/内存占用, 文件加载到图后的存储占用, 导入时间, 查询速度等…

首先有个非常人性化的是, GraphStudio里面有一个CPU/内存/磁盘的实时监控图, 可以很清晰的看到变化情况, 但是由于应该是每5s请求一次. 所以可能影响实测性能, 建议测试的时候不要长时间停留.

一.存储性能

在分布式机器上个测试32G的两列原始数据(近6千顶点 ,18亿无向边 –> 等价于36亿有相边 ) , 10点13分开始, 12时 0分 导入75%, 12时 ?分结束, V= 15亿/h . 4点24开始, 6点50导入完成, 耗时2.5h.

  1. master机器: (增19G)
    • 原存储: 40G
    • 导入后: 61G
  2. node机器原存储: (增15G)
    • 原存储: 2.2G
    • 导入后: 17G

但是如果du -csh /path/to/tigergraph/gstore 直接查看存储, 会发现每台机器大概占用的都是7G左右, 那多出来的空间谁用了呢, 继续查看发现是kafka占用了大头, master上高达13G的占用, node上也有6.5G的占用, 这部分只是导入时候的队列缓存, 所以不用担心, 和log一样会自动清理的. (默认是每周?)

更新: 因为测试的数据非生产数据, 实际上我们主要只需关注gstore的占用即可.

1
2
3
$ gadmin status graph -v #这个功能很有用,可以告诉你当前图的存储占用,以及顶点和边的个数. 下面是输出信息
Graph was loaded (/home/tigergraph/tigergraph/gstore/0/part/):partition size is 4.05GiB
VertexCount: 38418918, NumOfSkippedVertices: 37580492, NumOfDeletedVertices: 0, EdgeCount: 1037156848

二. CPU和内存

CPU和内存, 会发现内存的使用并不算高 , 即使是在查询K步邻居的时候 ,内存占用也不会突增 (什么原因?)

11.20更新: 最近发现一个问题会导致ids_worker 进程(属于GSE模块)占用内存非常高, 并容易导致os崩溃, 原因不明.

1.4 更新: 内存占⽤率⾼是因为使⽤了⼤量⻓度很⼤(>1000), 且⻓度不⼀致的主键, 使⽤同样⻓度或者较短的主键能极⼤减少内存占⽤ , 如果实在有长主键需求, 建议先采用Hash或者处理一次原始数据. (重要)

tigerBench00

分布式测试导入数据的时候, master占用CPU大概70%资源, node占用40%, 导入32G的单个文件, 4台机器每台大概占用4G内存 ,内存使用相对算很低了.

除了OS看, GraphStudio最便利的就是自带的监控了. 下图是集群版本数据导入资源使用, 多台节点都可以查看. 性能消耗很均匀, 但是Kafka的

tgBench02

总结:

假设每台机器内存相同/相近, 总集群所需内存min1/3的总数据导入量 , 如果写入的时候同时会做大深度的查询, 那么需要多一倍(2/3) ,最佳内存理论上应该是和导入数据总量相同, 这个时候就可以同时图计算/深度很大的查询了.

所以个人意见是, 导入数据尽量放在夜间/少读的时候, 然后平常取2/3的内存配额差不多了.

N. 查询耗时

一. 实时的性能

tgBench00

  1. 导入数据的时候同时进行展开查询居然也是可以的. 而且也可以写job-->query函数 ,不过速度的确会受到影响, 执行任务大概会慢一倍, 但是查询速度的确很快. 不过实测如果同时做大深度查询, 很容易跑崩GPE模块, (补充: 本质是因为GPE内存不足) ,生成环境还是把导入时间放在半夜为宜..

  2. 某顶点出发的K步邻居 (N层遍历)

    • 实测在3k万顶点,10亿边的情况下, 6跳的普通点出发已经会超过16s(默认超时时间).

0x02.分布式版实战

这是生产环境使用关键, 因为带有完整的TigerGraph功能和性能, 而且可以看出文件大小也远比开发者版本大… 并且带有专用的cluster-config文件, 目前貌似鲜有参考的文章.. (当然官方文档写的挺好了)

测试环境 : 这里使用了4台物理测试机: 每台4核, 32G内存,数据外挂4T的HDD, OS是Cent7.2

首先在1号/主机器上解压然后修改vi cluster_config.json并填写具体信息, 注意这里如果你填写的是域名, 它脚本直接读取可能会解析失败, 要么你转为IP地址, 要么看看自己用hostnamectl设置一下分发信息…

然后你会发现缺少一个policycoreutils-python 库, 它推荐你yum install 安装, 但是实测cent默认源经常搜不到.. RPM包安装会发现缺乏一大堆其他依赖… 更头疼了, 所以建议还是直接更换一下源吧..

1
2
3
4
5
6
7
8
#阿里云cent7的软件源
wget http://mirrors.aliyun.com/repo/Centos-7.repo && sudo cp Centos-7.repo /etc/yum.repos.d/
#当然你也可以不做下面这步,如果你有多个repo它会都读罢了..
sudo cd /etc/yum.repos.d/ && mv CentOS-Base.repo CentOS-Base.repo.bak && mv Centos-7.repo CentOS-Base.repo

#更新源
yum clean all && yum makecache # yum update 可全部包更新操作时间第一次很长,不需要可跳过.
sudo yum install -y policycoreutils-python

确保每台机器环境都OK之后, sudo ./install.sh -cn 开始安装: (如果有网络限制不要选iptables-Yes)

集群版的安装等于以主节点为中心去ssh/scp执行/分发文件和指令, 然后每个节点依次去安装所需依赖, 需要注意的是 : 配置文件里写的安装路径只有一个, 安装的节点必须指向同一个路径, 这时如果外挂了一个大磁盘试图让多台节点共用是不可以的, 而且master和node上的文件不一样 (部分相同).

然后还注意有一个大坑的事情 : 就是如果你安装选择的用户不是默认tigergraph ,而是当前执行安装操作的用户比如imba, 那么安装完成后 , 会发现不管怎么操作, gadmin/gsql 等执行文件都提示找不到, 但服务都是正常的, 手动source ~/.bashrc_tigergraph 也没有效果, 甚至重装都没有用, 因为没找到导致的原因, 最后我自己找到的解决办法是: 退出当前bash, 重进. 或直接ssh一下自己, 比如 ssh localhost… 本身是个小问题, 希望后续能完善一下安装shell的逻辑.
11.20更新 : V2.2版本好像已经解决了这个问题, 安装到当前用户不需要退出重进bash了.

以下是生产环境/测试很可能需要修改的端口/参数, 列在一起方便一次修改–应用–重启..

1
2
3
4
5
6
#nginx的端口很容易冲突,这里列一下常见需要修改的地方.好在只需要自master操作gadmin,会自动分发到节点.
$ gadmin --configure Restpp.Port #注意有些900x端口可能有占用,不要随便设置.
$ gadmin --configure Nginx.Services.Port #同样1420*端口有几个已经使用,提前grep确认一下, 这是你前端访问端口
$ gadmin --configure timeout_seconds #修改默认的超时时间,16s是不够的
$ gadmin --configure runtime #配置资源限制, 防止出现严重的内存泄露或其他问题. 比如限制GSE模块15G内存使用 --> GSE:"ProcMaxGB=15"
$ gadmin config-apply && gadmin restart ts3 -fy && gadmin restart -fy #改完一起应用一下.

最后, 分布式安装时间每台至少耗时10min,多机器单节点时间可能会递增. (待反馈?) 下面是电影系统的测试数据:

1
2
#这是一个相对完整一点的图模型,190MB
wget http://files.grouplens.org/datasets/movielens/ml-20m.zip

0x03.问题&补充

1.卸载/清理环境

1.4更新: 根据官方回复, 可以使⽤guninstall命令进⾏卸载, 具体我没有操作过, 大家可以自行测试一下

我没在官方文档里找到卸载的详细说明, 只好自己到处搜了一下, 找到一个可用的删除脚本.

1
2
#卸载测试环境/tigergraph,注意需要在安装的用户下运行 (不能直接用root)
sh ./utils/uninstall_platform.sh

但是不知这样是否就彻底清理干净了? 实际情况来看, 运行脚本后, crontab 还有两条任务遗留, 后续官方可以把crontab的任务也一并清理一下.

再有个关键问题就是如果是集群模式卸载, 在master上执行卸载脚本, 其他节点也会自动卸载么?

答案是并不会, 但是你只需要把master节点卸载好, 然后重新安装的时候选同一路径, 它会自动检测, 然后一个个节点提示你是否要清空之前的, 依次确认即可.

2.加载数据源报错(少见)

GraphStudio 界面导入数据的时候, 可能会出现如下错误提示, 刷新浏览器 ,查看gadmin status 都是没用的.

tgErr00

最后gadmin restart server 解决, 但是原因不明. (使用V2.2版后没有遇到, 不常见.)

3.单机导入数据的时候同时做大查询会直接跑停服务? (已解决)

商业单机部署版本, 检查发现, GPE(图计算)模块被直接跑蹦了~ 而且从GraphStudio中启动GPE模块, 很快又容易崩掉, 不知道是不是什么地方触发了Bug? 建议遇到这种问题的同学, 去服务器手动restart一下所有服务为宜. 如图所示, 二次down掉.

tgBench01

11.20更新: 后面排查原因本质和4.2是一样的, 就是因为没有限制GPE/GSE的话, 它们内存吃的太多, 到了OS的阈值就被系统OOM而kill了, 具体确认方法先看系统日志, 然后再看TG的dump文件. (dump文件说实话没太看懂..可能主要是供官方参考的吧)

4.导入数据报错

4.1.rest_loader报错

在导入数据的时候同时进行大查询后, 服务就变得不稳定了, 即使全部重启, 仍有这种报错,重启restpp服务仍然不行,

最后解决方案是, 再次重启了所有服务 , 1.4更新 : 官方回复说仍然是内存不足的原因

tgErr01

4.2载入过程中GPE模块down掉 (已解决)

这个不知道是什么情况.. 就放着跑了一半的数据, 回来发现LoadData提示完成, 但是实际只导入了一半的数据, 查看日志发现abort了….GPE模块不知道怎么自己就down掉了..

11.20更新 : 从监控来看, 大概内存使用到10G的时候, 就会被干掉了, 是因为资源跑高了, 然后被OS自动杀了…可以通过查看系统日志.

1
2
3
4
5
6
7
8
9
#常用这两个
$ egrep -i "killed" /var/log/messages
$ dmesg | egrep -i -B100 "killed"

#查看所有log文件..
$ egrep -i -r "killed process" /var/log

#cent也可用这个
journalctl -xb | egrep -i "killed"

5.配置Vim编写GSQL环境

官方给的vim参考 ,配置方式可以参考GSQL体验(二)vim-gsql配置,

6.加载HDFS上的数据源(注意)

实际业务中, 大量的数据一般并不会直接存储在本地磁盘上, 经常是在HDFS上.

那么TigerGraph如何读取HDFS上的文件呢? 参考github-连接. 目前的做法是通过跑一个MR任务,通过RESTful请求去发送POST请求的字节流, 这部分之后可能单独抽取出来, 因为官方的写法有些小问题, 而且对状态判断, 重试机制都没有控制…应该是仅供测试把.

注意这里HDFS版本不同, 依赖的hadoop-jar包可能不一样, 导致有些方法可能缺失

然后官方建议的那个执行MR任务的之前 ,去各个节点分发json的jar包 的方法觉得不太合理…. 生产环境是不会允许用户随便上传自己的包丢在data-node上的 .建议还是自己用mvn管理一下包, 加一些重试逻辑, 然后把依赖一起打包进去. 会省去很多不必要麻烦.. (包括编译的时候引用$hadoop path 也容易出错..)

7.Cent7防火墙拦截问题(注意)

如果安装完成后发现web服务有奇奇怪怪的访问问题, 多半是你的服务器防火墙这有什么问题….但是生产环境你不一定能随便修改防火墙, 也不建议 (其实iptables如果没开启/空, 是不需要使用的 ), 我看了一下规则其实TG就是给自己加了个白名单组..

1
2
3
4
5
6
7
8
9
10
11
12
#这里的端口是nginx前端访问端口, 默认是14740
sudo iptables -I INPUT -p tcp --dport 14288 -j ACCEPT
#如果你iptables里面有这两条,然后发现外网访问不了rest服务和web,最好把它干掉.
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited #优先干这个
DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID

#删除建议按行号,简单一些
sudo iptables -L --line-number
sudo iptables -D INPUT 7 #删除INPUT规则中的第六行
sudo iptables -F #删除所有规则, 慎重使用,看看默认规则是不是ACCEPT.

$ iptables-save

8.GSE的ID模块没有正常启动

通过gadmin status gse -v 可以看到, 除了master节点的Graph IDS is ready: /data24/tigergraph/gstore/0/1/ids/graph_config.yaml exists , 其他几个节点的graph_config.yaml 文件有缺失, 原因未知.

暂时的解决办法是通过scp把master的配置文件分发过去然后重启服务, 但是我发现其他节点ids文件夹下都是空的, 不知道还没有其他隐患. 然后重启服务发现这个缺失提示又出现了

11.20更新: 据官方说法, 这个是一个历史bug? 但是不影响使用, 我当时折腾半天以为前端的问题都是它引起的…. 在最新的V2.2里貌似仍然存在, 没有fix.

9.GraphStudio的监控模块一直不显示/灰色(!!!)

这个问题整整折腾了一天, 因为开始一直误以为是网络问题, 在iptablesfirewalld 之间反复修改, 发现百思不得其解, 最后还是控制变量, 一个个影响因子排除 –> 溯源 ,最终发现了问题所在, 不知道这是不是2.1.8版本shell的一个Bug

长话短说, 先通过 gadmin status ts3 -v 查看监控模块的详细信息, 你会发现有一个ts3-svcts3-agent , 然后后面跟着各自的pid号, 坑爹的地方就在这, 你查看ts3-agent 对应的pid信息, 你会发现如果因为Nginx端口冲突 你修改了14240端口为其他端口, 然后重启之后ps查看ts3-agent 启动的时候命令仍然是

1
2
3
#注意看末尾,启动参数的 -service_url后面的信息,估计是在哪被写死了...所以一直都是固定的ip:14240/ts3
/path/to/tigergraph/bin/ts3agent -config /home/tigergraph/.gsql/fab_dir/configs/ts3agent.cfg -service_url
http://yourIP:14240/ts3

那如果一直都是这样启动, agent根本就连接不到那个service_url ,当然一直连接不上了…

11.20更新: 看了最新V2.2的官方文档确认, 是因为gadmin restart重启所有模块的时候, 并不会重启ts3 服务… 虽然我没太理解为什么不能把这个加进去, 但目前的确需要你手动去重启gadmin restart ts3 ..

补充 : ~/.gsql/fab_dir/configs/ts3svc.cfgts3agent.cfg 两个文件设置了TS3的基本配置, 比如默认的刷新时间, 存储在SQLlite3 数据库, 以及监控日志过期时间等..而这个文件夹下的conf_tigergraph_fab.yaml 文件就几乎配置了所有的基本参数

1.4更新: 官方回复 gadmin --configure ts3 可以编辑设置ts3 ,同样记得应用和重启

x.temp

  • 不知道如何在安装之前就定义一下默认的Nginx端口, 以免反复出现这种问题…. (貌似暂时不支持)
  • 前端页面编写gsql函数的时候, 函数外不要写注释, 超过单行的注释会直接提示函数名不匹配….
  • gadmin --configure timeout_seconds 可以修改默认的16s超时的参数, 有几个设置, 不熟悉就统一写
  • curl -l localhost:9007/statistics 可以通过直接获取当前的数据分析信息

未完待续……


参考资料 :
  1. TigerGraph安装指南-官方-En(推荐)
  2. GraphStudio使用文档-En(推荐)
  3. 图数据库TigerGraph开发者版本入门-zhihu
  4. TigerGraph基准测试报告-简略版
  5. 区分图数据库的11个指标-zhihu
  6. Tigergraph-Gsql入门-zhihu
  7. TigerGraphの知识库和FAQ
  8. 图数据库实战入门 —— 一个简单的电影推荐系统实现-zhihu
  9. gsql官方文档之定义Schema&加载数据(一)
  10. gsql官方文档之查询(二)
  11. gsql官方实例demo(三)
  12. (更新)图计算算法库文档
  13. (12月更新)Tigergraph中文FAQ和常见问题解答(推荐)