编译 GeaFlow 依赖以下环境:
执行以下命令来编译 GeaFlow 源码:
git clone https://github.com/apache/geaflow.git geaflow cd geaflow/ ./build.sh --module=geaflow --output=package
下面介绍如何在本地环境运行一个实时环路查找的图计算作业。
bin/gql_submit.sh --gql geaflow/geaflow-examples/gql/loop_detection_file_demo.sql
其中 loop_detection_file_demo.sql 是一段实时查询图中所有四度环路的 DSL 计算作业,其内容如下:
set geaflow.dsl.window.size = 1; set geaflow.dsl.ignore.exception = true; CREATE GRAPH IF NOT EXISTS dy_modern ( Vertex person ( id bigint ID, name varchar ), Edge knows ( srcId bigint SOURCE ID, targetId bigint DESTINATION ID, weight double ) ) WITH ( storeType='rocksdb', shardCount = 1 ); CREATE TABLE IF NOT EXISTS tbl_source ( text varchar ) WITH ( type='file', `geaflow.dsl.file.path` = 'resource:///demo/demo_job_data.txt', `geaflow.dsl.column.separator`='|' ); CREATE TABLE IF NOT EXISTS tbl_result ( a_id bigint, b_id bigint, c_id bigint, d_id bigint, a1_id bigint ) WITH ( type='file', `geaflow.dsl.file.path` = '/tmp/geaflow/demo_job_result' ); USE GRAPH dy_modern; INSERT INTO dy_modern.person(id, name) SELECT cast(trim(split_ex(t1, ',', 0)) as bigint), split_ex(trim(t1), ',', 1) FROM ( Select trim(substr(text, 2)) as t1 FROM tbl_source WHERE substr(text, 1, 1) = '.' ); INSERT INTO dy_modern.knows SELECT cast(split_ex(t1, ',', 0) as bigint), cast(split_ex(t1, ',', 1) as bigint), cast(split_ex(t1, ',', 2) as double) FROM ( Select trim(substr(text, 2)) as t1 FROM tbl_source WHERE substr(text, 1, 1) = '-' ); INSERT INTO tbl_result SELECT DISTINCT a_id, b_id, c_id, d_id, a1_id FROM ( MATCH (a:person) -[:knows]->(b:person) -[:knows]-> (c:person) -[:knows]-> (d:person) -> (a:person) RETURN a.id as a_id, b.id as b_id, c.id as c_id, d.id as d_id, a.id as a1_id );
该 DSL 会从项目中的 resource 文件 demo_job_data.txt 中读取点边数据,进行构图,然后计算图中所有的 4 度的环路, 并将环路上的点 id 输出到 /tmp/geaflow/demo_job_result, 用户也可通过修改 geaflow.dsl.file.path 参数自定义输出路径。
2,3,4,1,2 4,1,2,3,4 3,4,1,2,3 1,2,3,4,1
用户也可自己在命令台输入数据,实时进行构图。
bin/gql_submit.sh --gql geaflow/geaflow-examples/gql/loop_detection_socket_demo.sql
loop_detection_socket_demo.sql 主要区别是 source 表是通过 socket 进行读取:
CREATE TABLE IF NOT EXISTS tbl_source ( text varchar ) WITH ( type='socket', `geaflow.dsl.column.separator` = '#', `geaflow.dsl.socket.host` = 'localhost', `geaflow.dsl.socket.port` = 9003 ); CREATE TABLE IF NOT EXISTS tbl_result ( a_id bigint, b_id bigint, c_id bigint, d_id bigint, a1_id bigint ) WITH ( type='socket', `geaflow.dsl.column.separator` = ',', `geaflow.dsl.socket.host` = 'localhost', `geaflow.dsl.socket.port` = 9003 );
该 DSL 实时读取 socket 服务 9003 端口数据,实时构图,然后计算图中所有的 4 度的环路, 并将环路上的点 id 输出到 socket 服务 9003 端口,然后显示在 socket 控制台。
执行以下命令,启动 socket server 程序:
bin/socket.sh
socket 服务启动后,控制台显示如下信息:
输入数据如下,数据前面的".“代表一条点数据,”-"代表一条边数据(起点、终点和权重)。
. 1,jim . 2,kate . 3,lily . 4,lucy . 5,brown . 6,jack . 7,jackson - 1,2,0.2 - 2,3,0.3 - 3,4,0.2 - 4,1,0.1 - 4,5,0.1 - 5,1,0.2 - 5,6,0.1 - 6,7,0.1
可以看到 socket 控制台上显示计算出来的环路数据:
你也可以继续输入新的点边数据,查看最新计算结果,如输入一下数据:
- 6,3,0.1
可以看到新的环路 3-4-5-6-3 被检查出来:
本地模式的进程会占用本地的 8090 和 8088 端口,附带一个可视化页面。
在浏览器中输入 http://localhost:8090 即可访问前端页面。
若端口被占用,gql_submit.sh脚本会选择更大的空闲端口号,请查看控制台输出的如下日志确定使用的端口。
View dashboard via http://localhost:${master_port}.
关于更多 dashboard 相关的内容,请参考文档: 文档
bin/gql_submit.sh --gql geaflow/geaflow-examples/gql/sql_join_to_graph_demo.sql
其中 sql_join_to_graph_demo.sql 是一段在模拟流图中的SQL Join查询,其关键内容如下:
USE GRAPH dy_modern; select u.name, friend.name from person u, knows e, person friend where u.id = e.srcId and e.targetId = friend.id ;
该 DSL 会从项目中的 resource 文件 demo_job_data.txt 中读取点边数据,进行构图。
然后在图dy_modern上执行点与边的Join查询,引擎解析Join语义后自动转为图的查询。
运行以下命令,可以打印结果文件的内容。
cat /tmp/geaflow/sql_join_to_graph_demo_result/partition_0
查询结果默认写入/tmp/geaflow/sql_join_to_graph_demo_result, 用户也可通过修改 geaflow.dsl.file.path 参数自定义输出路径。
jim,jim kate,kate lily,lily lucy,lucy jim,jim lucy,lucy lucy,lucy jack,jack
关于更多 SQL图查询 相关的内容,请参考文档: 文档
GeaFlow Console 是 GeaFlow 提供的图计算研发平台,我们将介绍如何在 Docker 容器里面启动 GeaFlow Console 平台,提交流图计算作业。文档地址: 文档
Geaflow Kubernetes Operator 是一个可以快速将 Geaflow 应用部署到 kubernetes 集群中的部署工具。 我们将介绍如何通过 Helm 安装 geaflow-kubernetes-operator,通过 yaml 文件快速提交 geaflow 作业, 并访问 operator 的 dashboard 页面查看集群下的作业状态。文档地址: 文档
G6VP 是一个可扩展的图可视分析平台,包括数据源管理、构图、图元素个性化配置、图可视分析等功能模块。使用 G6VP 能够很方便的对 Geaflow 计算结果进行可视化分析。文档地址: 文档