写点什么

TuGraph Analytics 图建模研发:为图计算业务提速增效

  • 2023-10-25
    浙江
  • 本文字数:2472 字

    阅读完需:约 8 分钟

概述

GeaFlow Console 平台提供了图数据研发能力,包括了对点、边、图、表、函数、任务的管理功能, 为了让用户更好的管理元数据信息,同时也便于用户对图计算进一步地了解。通过对这些研发资源的管理,用户可以方便地、白屏化地创建、修改、删除这些元数据,也可以很方便地查看当前租户下所拥有的数据资产概览及详情,从而更多关注于业务逻辑的实现。

图数据研发介绍

基本概念

  1. 点(GeaflowVertex):表示一个对象或实体、包含了点 id,标签和属性。

  2. 边(GeaflowEdge):表示对象之间的关系,连接点和点,包含源点 id,目标点 id,标签,时间戳和属性。

  3. 图(GeaflowGraph):表示对象之间关联关系的一种抽象数据结构,由若干个点和若干边组成。

  4. 表(GeaflowTable): 是有结构的数据的集,由行和列组成,每列为字段,有相应的类型和约束条件,每行为一条具体数据。

  5. 函数(GeaflowFunction): 用户自定义的方法,可在 dsl 作业中使用。

  6. 图拓扑(GeaflowEndpoint): 逻辑概念,为一个三元组<edgeId, srcId, targetId>, 表示在一个图中,一个边的起点和目标点的约束关系。

  7. 任务(GeaflowJob): 研发时对计算逻辑的描述,用户通过编辑任务实现业务逻辑,目前支持 dsl 和高阶两种方式进行任务研发:

  8. dsl 任务(GeaflowCodeJob): 通过编写 dsl 代码运行。

  9. 高阶任务(GeaflowApiJob): 通过 api 的方式,使用 jar 包运行。

  10. 作业(GeaflowTask): 由任务经过发布流程生成,最终提交运行。一旦构建,不可修改作业元信息(例如作业的 dsl 代码或 jar 包)。

模型结构

点 &边 &图 &表 &函数


Geaflow 将所有研发资源进行了结构化的模型设计,从模型图中,可以看到 vertex,edge,table 都继承自 GeaflowStruct,GeaflowStruct 中包含一个 GeaflowField 列表,其中 GeaflowField 代表了字段,包含类型(Long,String,Boolean 等)和约束条件(点 id,属性,边源点 id,边目标点 id 等)。在图中,包含了点、边以及 Endpoint 的列表,描述了实体之间的关联信息。图和表关联了 GeaflowPluginConfig,这是插件配置,表示图表的来源或输出配置,例如 odps,sls,oss 等。函数中主要包含一个 jar 包对象和主类,以标识函数的入口。

任务 &作业


GeaflowJob 为所有任务类型的父类,其中的 structs、graphs、functions 字段记录了这个任务所使用的图、表、函数,方便用户了解作业关联的一些元信息。任务根据使用途径还可分为以下几种类型:


  1. GeaflowProcessJob: 加工任务,用户编写 dsl 代码实现构图或图计算逻辑, 例如环形计数。

  2. GeaflowIntegrationJob: 集成任务,可以根据数据源表自动生成代码,导入到图中。

  3. GeaflowCustomJob: 自定义任务, 用户通过编写高阶 api 代码,实现图计算逻辑,例如实现 PageRank, SSSP 等算法。

  4. GeaflowStatisticJob: 统计任务,用于统计图的信息,例如点边个数。

  5. GeaflowServerJob: 查询任务,用于 olap 服务,执行图查询。


任务(GeaflowJob)和作业(GeaflowTask)通过发布包(GeaflowRelease)进行关联,任务为研发时的描述,作业为运行时的描述,用户可以对任务进行发布,通过 BuildPipeline 执行流水线构建生成相应的发布包,进而得到相应的作业。Release 中包含了作业运行的执行计划、引擎版本、作业参数、集群和集群参数等,是作业在运行时所需要的信息。用户通过创建和修改任务进行业务逻辑的研发,通过发布的作业进行提交运行。

Demo 演示

创建点

在研发管理中新增点定义, 每个点有对应的字段列表,且必须有点 id 字段,如下例子中新增了 2 个点:person 和 software。



创建边

在研发管理中新增边定义, 每条边需要有源点 id 和目标点 id 字段,如下例子中新增了 2 条边:knows 和 creates。



创建图

在研发管理中新增图定义, 图可以关联之前定义的点和边,console 中通过选择框的方式进行关联。如下例子中,创建了名为 dy_modern 的图,其包含了 person 和 software 点、created 和 knows 边。同时,可以为图配置拓扑约束,限制此图上边的源点目标点的绑定关系,例如 create 边只能是 person->software, know 边只能是 person->person(Endpoint 具体作用将在后续文章中介绍)。


创建表

在研发管理中新增表定义, 此例子中创建了一个输出表,为最终结果输出的载体,有 2 个字段 person 名字和 software 名字。其参数配置中的类型为 file,表示输出到本地文件目录(也可以选择其他类型,例如 kafka,hive)。



创建任务

本示例中,构造如下关系图:



任务 dsl 如下,先向图 dy_modern 中插入点边数据,然后执行 MATCH 遍历图,找到 id=1 的人(jim)认识的人(kate、tom)所创建的软件(software1、software2),最后将结果插入到 tbl_result 表(文件)中。


USE GRAPH dy_modern;
INSERT INTO dy_modern.person(id, name, age)SELECT 1, 'jim', 20UNION ALLSELECT 2, 'kate', 22UNION ALLSELECT 3, 'tom', 24;
INSERT INTO dy_modern.software(id, name, lang)SELECT 4, 'software1', 'java'UNION ALLSELECT 5, 'software2', 'java';
INSERT INTO dy_modern.knowsSELECT 1,2 ,0.2UNION ALLSELECT 1,3 ,0.3;
INSERT INTO dy_modern.createsSELECT 2, 4, 0.6UNION ALLSELECT 3, 5, 0.8;
INSERT INTO tbl_resultSELECT b_name, c_nameFROM ( MATCH (a:person where id = 1) -[e:knows]->(b:person)-[e2:creates]-> (c:software) RETURN b.name as b_name, c.name as c_name)
复制代码



任务发布之后即可生成对应 task,进入作业详情界面,提交作业之后开始执行,最终运行完成。



作业的参数配置如下, 注意 worker 数需要设置:




在容器的/tmp/result 目录中找到结果文件。


[root@09db8348371a tmp]# cd /tmp/result/.partiton_0.crc  .partiton_1.crc  partiton_0  partiton_1
复制代码


由于 graph 中的 shradCount 设置的为 2,所以结果文件有 2 个分片:partition_0, partition_1 查看文件,有 2 条数据,符合结果。


kate,software1tom, software2
复制代码


至此,我们就成功使用平台的图研发功能完成了图表的创建和计算作业的运行!是不是超简单!快来试一试吧!


GeaFlow(品牌名 TuGraph-Analytics) 已正式开源,欢迎大家关注!!!欢迎给我们 Star 哦! GitHub👉 https://github.com/TuGraph-family/tugraph-analytics 更多精彩内容,关注我们的博客 https://geaflow.github.io/


用户头像

欢迎访问:geaflow.github.io 2023-07-05 加入

GeaFlow(品牌名TuGraph-Analytics) 是一个分布式流图计算引擎 欢迎给我们 Star 哦! GitHub👉github.com/TuGraph-family/tugraph-analytics 更多精彩内容,关注我们的博客geaflow.github.io

评论

发布
暂无评论
TuGraph Analytics图建模研发:为图计算业务提速增效_分布式_TuGraph Analytics_InfoQ写作社区