华为云图引擎服务GES对接使用完全指南
引言:为什么需要图引擎服务
在当今数据驱动的商业环境中,数据之间的关联关系往往比数据本身更有价值。社交网络中用户之间的好友关系、电商平台上商品之间的购买关联、金融风控中账户之间的资金流转——这些以关系为核心的场景,传统的关系型数据库难以高效处理。图引擎服务正是为这类场景而生。
华为云图引擎服务是业内首个商用的、拥有自主知识产权的国产分布式原生图引擎。它使用华为自研的EYWA内核,专门针对以关系为基础的图结构数据进行查询和分析。无论是社交应用中的好友推荐、企业关系分析、金融风控、舆情监测,还是防欺诈等需要处理丰富关系数据的场景,GES都能提供卓越的性能支撑。
本文将从零开始,手把手教你如何对接和使用华为云图引擎服务GES,涵盖从环境准备、图创建、数据导入、查询分析到API集成和算法应用的完整流程。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
一、准备工作:开通服务与权限配置
1.1 账号准备与实名认证
使用图引擎服务之前,首先需要注册华为账号并开通华为云,同时完成实名认证。如果已经拥有华为云账号并完成了实名认证,可以直接跳过此步骤。在使用GES服务前,还需要检查账号状态,确保账号不处于欠费或冻结状态。
1.2 创建IAM用户与授权
出于安全考虑,不建议直接使用主账号进行日常操作。华为云提供了统一身份认证服务,支持创建IAM用户及用户组并授予特定权限。默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使用户获得对应的GES操作权限。
授权时,如果需要在企业项目中配置GES FullAccess权限,还需要额外在IAM权限中配置可用区列表等策略。对于需要与OBS服务交互的场景,还需要对OBS进行相应的权限授权,且授权时需要指定权限范围为全局服务资源。
二、创建图实例
图引擎服务提供了三种创建图的方式,用户可以根据实际需求灵活选择。
2.1 自定义创建图
自定义创建是最常用的方式,允许用户全面控制图的各项配置参数。具体操作步骤如下:
进入图引擎服务管理控制台,单击右上角的创建图按钮,进入创建图页面。在创建图页面选择自定义创建方式,然后设置图的相关信息。图名称可以使用系统默认值,需要注意的是图创建完成后不支持修改图名称。GES软件版本默认使用最新版本。虚拟私有云和子网需要根据实际网络环境选择,如果账号下已有VPC,系统会自动填充一个。
设置完成后单击确认创建,进入规格确认页面,单击提交开始创建图。提交成功后系统会自动跳转到完成页面,单击返回任务中心可以查看所创建图的状态及运行结果。当图创建完成后,在图管理页面中可以看到图的运行状态变成运行中。
2.2 行业图模板创建
行业图模板创建方式适用于特定行业场景的快速构建。华为云提供了针对社交网络、知识图谱、金融风控等典型场景的预置模板,包含了行业特定的图结构和元数据定义。使用模板创建可以大幅降低建模门槛,让用户快速体验图引擎服务的核心能力。
2.3 创建动态图
动态图功能将单一视角的静态图转化为多视角的动态图,能够展示在一段时间内点、边随时间变化的轨迹。这种方式适用于需要分析时间维度变化的场景,如社交网络中关系随时间演变、金融交易的时间序列分析等。
三、导入图数据
图创建完成后,需要将数据导入到图实例中才能进行分析和查询。
3.1 数据格式准备
GES要求数据以点数据集、边数据集和元数据三个部分组织。点数据集描述图中的节点,边数据集描述节点之间的关系,元数据则定义了点和边的标签结构及其属性类型。
在导入数据前,可以先下载模板文件来了解数据格式要求。进入图管理页面,选择需要导入数据的图,在操作列选择导入,在弹出的导入窗口中分别下载元数据、边数据集和点数据集的模板。下载的模板中已包含一份示例电影数据,可以直接用于测试。
3.2 从OBS导入数据
GES的图数据存储在对象存储服务上,满足安全、可靠、低成本存储的要求。导入数据时,需要将准备好的点数据集CSV文件、边数据集CSV文件和元数据XML文件上传到OBS桶中。
在图引擎管理控制台的元数据管理页面,单击左上角的导入,可以在类型中选择从OBS中导入元数据。对于大规模数据的导入,还可以使用DataArts Studio的Import GES节点,将OBS桶中的文件导入到GES的图中。
3.3 使用DataArts Studio进行数据迁移
对于需要定期同步数据的生产环境,可以通过数据治理中心DataArts Studio来实现自动化数据导入。具体流程是:通过数据开发调用数据集成作业,将MySQL等原始数据定期同步到OBS和MRS Hive中,并标准化为GES点边数据集。然后基于标准化后的点边数据集,自动生成图的元数据,最终将图数据定期导入到GES服务中。
GES的数据迁移功能还提供了一键式从常见关系型数据库以及大数据组件将数据导入到图实例的能力。用户只需要将原始数据预处理成GES所需要的点边表,就可以通过界面化操作完成导入,省去了繁琐的中间步骤。
四、查询与分析图
数据导入完成后,就可以对图进行查询和分析了。GES提供了三种查询语言:Cypher、Gremlin和DSL。
4.1 Cypher查询语言
Cypher是一种被广泛使用的声明式图数据库查询语言。使用Cypher语句可以查询GES中的数据并返回结果。Cypher查询编译过程中使用了基于标签的点边索引。第一次使用Cypher查询时,需要先构建索引。对于内存版图,需要在结果展示区右上角单击建索引;对于持久化图,需要在画布左侧的索引区中单击创建索引按钮。
以下是一些常用的Cypher查询语句示例:
// 查询label为movie的所有点
match (n:movie) return n
// 查询前100个节点的详细数据
match (n) return n limit 100
// 查询属性Occupation为artist的点,返回id和Gender属性
match (n{Occupation:'artist'}) return id(n), n.Gender limit 100
// 查询id为Vivian的点
match (n) where id(n)='Vivian' return n
// 分页查询:跳过前50个,返回100个
match (n) return n skip 50 limit 100
// 查询所有的边,并返回边和边两端的点
match (n)-[r]->(m) return r, n, m
// 查询label为rate的边
match (n)-[r:rate]->(m) return r, n, m
// 查询起点为Vivian,边label为rate或friends的所有边
match (n)-[r:rate|:friends]-(m) where id(n)='Vivian' return n,r,m
// 路径查询:起点label为user,一跳终点为user,二跳终点为movie
match p=(n:user)--(m1:user)--(m2:movie) return p limit 100
// 统计全图点的数目
match (n) return count(*)
// 按Gender分组统计user点的数量
match (n:user) return n.Gender, count(n)
// 查询user点的Occupation属性并去重
match (n:user) return distinct n.Occupation
// 排序查询
match (n:user) return id(n) as name order by name
// 创建点
create (n:movie{_ID_:'机长', Title: '机长', Year:2019}) return n
// 创建两个点及其关联的边
create (n:movie{_ID_:'机长', Title: '机长', Year:2019})-[r:rate]->
(m:movie{_ID_:'攀登XX', Title: '攀登XX', Year:2019}) return r
// 给定两个id创建边
match (n),(m) where id(n)='机长' and id(m)='Lethal Weapon'
create (n)-[r:rate]->(m) return r
// 修改点属性
match (n) where id(n)='机长' set n.Title='《机长》' return n
// 删除点
match (n) where id(n)='机长' delete n
// 删除点及其关联的边
match (n) where id(n)='机长' detach delete n
// 查询schema
call db.schema()4.2 Gremlin查询语言
Gremlin是Apache Tinkerpop框架中使用的图遍历语言。使用Gremlin可以方便地对图数据进行查询,进行图的修改、局部遍历和属性过滤等操作。Gremlin采用函数式编程风格,通过一系列步骤的组合来完成复杂的图遍历任务。对于熟悉Tinkerpop生态的开发者来说,Gremlin是一个自然的选择。
4.3 DSL查询语言
GES还提供了一种专有的DSL查询语言,可以利用DSL来完成对图的查询与计算,帮助用户低成本设计并运行算法。该功能仅支持2.3.14及以上版本的图。DSL语言针对GES的底层引擎进行了深度优化,在特定场景下可以获得更好的性能表现。
五、使用图算法进行分析
GES内置了丰富的基础图算法、图分析算法和图指标算法。用户可以通过图引擎编辑器或API调用这些算法进行关系分析。
5.1 实时推荐算法
实时推荐算法是一种基于随机游走模型的实时推荐算法,能够推荐与输入节点相近程度高、关系或喜好相近的节点。该算法可以基于历史购买和浏览数据进行相近商品推荐,也可以为用户进行相近喜好的潜在好友推荐。
算法的工作机制是:首先找到所有的源节点,然后根据方向参数得到所有能通向的路径,以路径数的概率选择一条路径并前往下一个节点。对于一个节点,如果在随机游走过程中被访问到,且被访问到的次数达到阈值,则该节点将被记入候选推荐列表。具体操作可以在图引擎编辑器的算法区内选定该算法执行。
5.2 其他常用算法
除了实时推荐算法,GES还提供了最短路径算法、k跳算法、PageRank、社区发现等多种图算法。最短路径算法用于查找两点之间的最短路径;k跳算法用于查找从指定节点出发在k步内可达的所有节点;PageRank用于评估节点在图中的重要性;社区发现算法用于识别图中紧密连接的子图结构。
六、使用SDK对接GES
GES提供了Java和Python两种SDK,方便开发者将图能力集成到自己的应用中。
6.1 获取连接信息
在使用SDK之前,需要获取图实例的连接信息。登录GES服务控制台,在图管理页面可以获取图的名称和访问地址。访问地址分为内网访问地址和公网访问地址,需要根据实际网络环境选择。
同时需要准备认证凭证。登录华为云控制台,在右上角用户名下拉列表中选择我的凭证。在API凭证页签的项目列表中找到图所属的项目。在左侧导航栏单击访问密钥,单击新增访问密钥。创建成功后单击立即下载获取AK、SK和区域代码。
6.2 Java SDK集成
解压huaweicloud-ges-sdk-xxx.zip,其中包含一个graph-java-sdk-example的Maven工程,这是GES API对应的Java SDK代码示例。可以将该工程导入到IDE中修改API参数进行调试。
在Java项目的pom.xml文件中加入SDK依赖:
<dependency>
<groupId>com.huawei.ges</groupId>
<artifactId>ges-sdk-java</artifactId>
<version>${ges.sdk.version}</version>
</dependency>客户端初始化的参数定义在GraphClientUtils类中,选择不同的认证方式填写参数即可。以下是一个完整的Java SDK使用示例:
import com.huawei.ges.graph.sdk.v1.GraphClient;
import com.huawei.ges.graph.sdk.v1.model.*;
public class GesExample {
public static void main(String[] args) {
// 1. 初始化客户端
GraphClient client = new GraphClient();
// 设置认证参数 - AK/SK方式
client.setAk("your-access-key");
client.setSk("your-secret-key");
client.setRegionCode("cn-north-4");
client.setGraphName("your-graph-name");
client.setGraphEndPoint("https://your-ges-endpoint");
// 2. 执行Cypher查询
String cypherQuery = "match (n) return n limit 10";
ExecuteCypherQueryRequest request = new ExecuteCypherQueryRequest();
request.setQuery(cypherQuery);
ExecuteCypherQueryResponse response = client.executeCypherQuery(request);
System.out.println("查询结果: " + response.getResult());
// 3. 查询点详情
QueryVertexDetailsRequest vertexRequest = new QueryVertexDetailsRequest();
vertexRequest.setVertexIds(Arrays.asList("vertex_id_1", "vertex_id_2"));
QueryVertexDetailsResponse vertexResponse = client.queryVertexDetails(vertexRequest);
System.out.println("点详情: " + vertexResponse.getData());
}
}代码样例文件所在的路径存在一个Main文件可用于调试。对于执行Cypher查询API,对应的Java SDK代码样例文件名为ExecuteCypherQuerySample.java。更多API对应的SDK代码样例可以参考Java SDK样例参考文档。
6.3 Python SDK集成
解压huaweicloud-ges-sdk-xxx.zip后,其中也包含一个graph-python-sdk-example的Python工程。Python SDK同样支持多种认证方式。
以下是一个Python SDK的使用示例:
from huaweicloud_ges import GraphClient
# 初始化客户端
client = GraphClient(
ak='your-access-key',
sk='your-secret-key',
region_code='cn-north-4',
graph_name='your-graph-name',
graph_endpoint='https://your-ges-endpoint'
)
# 执行Cypher查询
cypher_query = "match (n) return n limit 10"
response = client.execute_cypher_query(query=cypher_query)
print(f"查询结果: {response}")
# 批量点查询
vertex_ids = ['vertex_id_1', 'vertex_id_2']
vertex_response = client.batch_vertex_query(vertex_ids=vertex_ids)
print(f"批量点查询结果: {vertex_response}")
# 执行实时推荐算法
recommendation_response = client.execute_algorithm(
algorithm_name='realtime_recommendation',
parameters={
'sources': ['source_vertex_id'],
'alpha': 0.85,
'nv': 5
}
)
print(f"推荐结果: {recommendation_response}")6.4 请求路由配置
GES默认仅主节点响应请求。如果希望使用从节点响应,可以在初始化请求时设置requestType参数。requestType参数取值为read时请求负载均衡发送到主从节点;取值为slave时请求仅发送到从节点。当前只有内存版图的读请求支持设置requestType参数。
七、安全管理
7.1 IAM权限管理
GES支持通过IAM进行精细的权限管理。管理员可以创建不同权限的IAM用户,实现最小权限原则。GES的权限策略包括GES FullAccess(完全管理权限)和GES ReadOnlyAccess(只读权限)等。对于需要绑定或解绑弹性IP的操作,还需要拥有Security Administrator权限用于创建委托。
7.2 细粒度权限控制
GES图实例提供了细粒度权限控制功能,可以对特定标签的特定属性设置遍历、读、写权限。用户可以对管理的图进行标签和属性级别的细粒度权限设置,并对用户组进行授权。这种精细化的权限控制机制使得在多人协作或多应用共享图实例的场景下,能够有效保障数据安全。
八、运维与监控
8.1 监控指标
GES提供了多维度的运维监控界面,为图实例的稳定运行提供保障。该功能对图实例所使用的磁盘、网络、操作系统指标数据,以及集群运行关键性能指标数据进行收集、监控和分析。能够及时暴露数据库中的关键故障及性能问题,指导用户进行优化解决。
8.2 告警配置
用户可以通过云监控服务创建告警规则。在实例监控指标页面中,找到需要创建告警的指标项,单击指标右上角的按钮跳转到创建告警规则页面。在告警规则页面设置告警信息。当监控指标触发设定的阈值或者指定的事件发生时,云监控服务会在第一时间通过消息通知服务实时告知。
九、图实例生命周期管理
GES支持对图实例进行启动、停止、删除、升级等一系列管理操作。当完成图数据分析后,不再需要继续使用该图实例时,可以删除图以释放资源,避免产生额外费用。对于需要长期运行的生产环境图实例,建议定期检查版本更新,及时升级以获得最新的功能和安全补丁。
十、实战案例:社交推荐系统
下面通过一个完整的社交推荐系统案例,串联GES的核心功能。
10.1 场景描述
假设我们有一个社交网络平台,需要为用户推荐可能感兴趣的其他用户。平台中已有的数据包括用户信息(点)、用户之间的好友关系(边)、用户对内容的兴趣标签(点)以及用户与兴趣标签之间的关联(边)。
10.2 数据准备
准备点数据集user.csv,包含用户ID、姓名、性别、年龄等属性。准备点数据集interest.csv,包含兴趣标签ID和名称。准备边数据集friend.csv,表示用户之间的好友关系。准备边数据集user_interest.csv,表示用户对兴趣标签的关联。
10.3 创建图与导入数据
按照第二章和第三章的方法创建图实例并导入上述数据。
10.4 使用Cypher进行关系分析
分析用户的好友网络结构:
// 查询某个用户的所有好友
match (u:user {id: 'user_123'})-[r:friend]->(f:user) return f
// 查询某个用户的好友的好友(二度好友)
match (u:user {id: 'user_123'})-[r1:friend]->(f1:user)-[r2:friend]->(f2:user)
where f2.id <> 'user_123'
return distinct f2
// 统计每个用户的好友数量
match (u:user)-[r:friend]->(f:user)
return u.id, count(f) as friend_count
order by friend_count desc10.5 使用实时推荐算法
调用实时推荐算法为用户推荐潜在好友:
// Java SDK调用实时推荐算法
ExecuteAlgorithmRequest request = new ExecuteAlgorithmRequest();
request.setAlgorithmName("realtime_recommendation");
Map<String, Object> params = new HashMap<>();
params.put("sources", Arrays.asList("user_123"));
params.put("alpha", 0.85); // 随机游走参数
params.put("nv", 5); // 最小访问次数阈值
params.put("directed", false);
request.setParameters(params);
ExecuteAlgorithmResponse response = client.executeAlgorithm(request);
System.out.println("推荐的好友: " + response.getResult());常见问题解答
问:GES支持哪些查询语言?
答:GES支持三种查询语言:Cypher(声明式图查询语言)、Gremlin(Apache Tinkerpop图遍历语言)和DSL(GES专有的查询语言)。
问:第一次使用Cypher查询时需要做什么准备工作?
答:第一次使用Cypher查询前需要构建索引。内存版图需要在结果展示区右上角单击建索引;持久化图需要在画布左侧的索引区中单击创建索引按钮。
问:GES的数据如何导入?
答:GES支持多种数据导入方式:从OBS桶导入点边数据集和元数据;使用DataArts Studio进行数据迁移;以及通过界面化的数据迁移功能从常见数据库导入。
问:如何获取GES的Java SDK?
答:在GES管理控制台的连接管理页面下载SDK压缩包。解压后包含graph-java-sdk-example的Maven工程,可导入IDE使用。
问:GES的实时推荐算法是如何工作的?
答:实时推荐算法基于随机游走模型。算法从源节点出发,以路径数的概率选择路径并游走。节点在随机游走中被访问的次数达到阈值后,会被记入候选推荐列表。
问:GES如何保障数据安全?
答:GES通过IAM进行身份认证和权限管理,支持细粒度的标签和属性级别权限控制,并可与OBS的加密存储功能结合使用。



