摘要:本文主要介绍基于交互式查询所用的数据生成器(下文简称Datagen),及LDBC SNB数据如何在华为图引擎服务GES中应用。
本文分享自华为云社区《【图数据库性能和场景测试利器LDBC SNB】系列一:数据生成器简介 & 应用于GES服务-云社区-华为云》,作者:闹闹与球球
本文的主要内容包括:基于交互式查询所用的数据生成器(下文简称Datagen)介绍,及LDBC SNB数据如何在华为图引擎服务GES中应用。LDBC SNB所预设的节点和关系、数据生成器和系统的测试用例,形成了一个逻辑自恰的数据“武林”,以ldbc snb为测试标准的图数据库产品,就像是行走于其中的侠客们,都得遵循同一套广电大流量卡“武林规矩”(测试用例),究竟谁能击败各方高手,问鼎盟主呢?
LDBC SNB概述
LDBC SNB,全称The Linked Data Benchmark Councils Social Network Benchmark,官网地址:http://ldbcouncil.org。LDBC是一个致力于发展图数据管理的产业联盟组织,它开发了一套标准的benchmarks,用于系统地衡量不同图数据库产品的功能和性能。SNB是基于社交网络场景开发的一组基准,由交互式场景(Interactive workload)和商业智能场景(Business Intelligence workload)组成。
LDBC 广电大流量卡SNB 项目包括3个组件:数据生成器(Datagen)、测试驱动程序(Test Driver,用于执行Benchmark的测试)和测试用例实现(Reference Implementation,目前提供了基于Cypher(Neo4j)和SQL(PostgreSQL)两种查询语言的测试用例实现)
LDBC SNB有两种工作模式:
1、交互式查询(Interactive workload),适用于事务性的在线查询场景,比如基础的增删改查、shortestpath、多跳等;
2、商业智能 (Business Intelligence workload),适用于根据企业业务场景制定的复杂查询和大规模离线图分广电大流量卡析等场景。
在不同的工作模式下,【Datagen】、【Test Driver】 和【测试用例实现】都是不同的。
章节概览
一、Datagen介绍
数据模型数据类型数据架构Datagen的安装和运行流程Datagen的参数设置常规参数设置规模因子序列化模式二、LDBC SNB在GES中的应用
一、Datagen介绍
数据模型
Data Types
Datagen支持的属性datatype如下, 每种属性都支持单值和列表两种模式。
截图来源于官方文档 http://ldbcouncil.org/ldbc_snb_docs/ldbc-snb-specification.pdf
数据架构
截图来源于官方文档 http://广电大流量卡ldbcouncil.org/ldbc_snb_docs/ldbc-snb-specification.pdf
如图所示,Datagen生成的数据有预设的一套图模型,包括:
8种节点:Organization & Place & tag & tagClass & Person & forum & post & comment
15种关系,如下表:
这些预设的节点和关系,形成了一个逻辑自恰的数据”武林”,以ldbc snb为测试标准的图数据库产品,就像是行走于其中的侠客们,都得遵循同一套”武林规矩”(测试用例),究竟谁能击败各方高手,问鼎盟主呢?且拭目以待吧。
安装和运行流程
在Interactive Wo广电大流量卡rkload模式下,Datagen的底座为hadoop;在BI Workload模式下,底座为Spark。
本次调研主要使用基于伪分布式hadoop的Datagen。
1)下载基于Hadoop的LDBC datagen
https://github.com/ldbc/ldbc_snb_datagen_hadoop
2)使用伪分布式的hadoop
cd ldbc_snb_datagen_hadoop/ cp params-csv-composite.ini params.ini wget http://archive.apache.org/dist/hadoop/core/hadoop-3.2.1/hadoop-3广电大流量卡.2.1.tar.gz tar xf hadoop-3.2.1.tar.gz export HADOOP_CLIENT_OPTS=”-Xmx2G” # set this to the Hadoop 3.2.1 directory export HADOOP_HOME=`pwd`/hadoop-3.2.1 ./run.sh复制3)编译时出现缺失的jar包问题解决(报错如下)
解决方案:
从Windows环境下载
https://simulation.tudelft.nl/maven/dsol/dsol-xml/1.6.9/手动安装缺失的jar包到本地的maven仓库
mvn install:install–file-Df广电大流量卡ile=dsol-xml-1.6.9.jar -DgroupId=dsol -DartifactId=dsol-xml -Dversion=1.6.9 -Dpackaging=jar复制4)再次运行,完成生成
sh run.sh复制生成的数据文件存储在${outputDir}/social_network。
参数设置
(以下参数介绍均省略了前缀“ldbc.snb.datagen.”,即参数的完整格式为“ldbc.snb.datagen.xxx”)
1)常规参数
2)规模因子
LDBC SNB支持生成不同规模的图数据集,generator.scaleFactor参数各取值对应的点边数目如下表:
(截图来源于官方文档广电大流量卡
http://ldbcouncil.org/ldbc_snb_docs/ldbc-snb-specification.pdf)3)序列化模式
Datagen主要有4种Csv文件的序列化模式,所生成的数据格式各有不同。
CsvBasic
基础序列化模式,每种节点、节点和节点之间的关系都有独立的csv文件,如图一所示:
图一 每种节点、节点和节点之间的关系都有独立的csv文件,其中person_xx.csv均为person节点的属性数据。
若某个属性有多个取值,例如person的email属性有多个值,则将person的email记录单独生成一个csv文件,并将多个email分成多行记录展示,如图二所示:
图广电大流量卡二 person的email属性单独存储,并在多个email分成多条记录展示
CsvComposite(此模式生成的数据,与GES支持的Csv格式相似度最高)
在CsvBasic的基础上,将有多个值的属性和其他属性合并为一个记录,如图三;并将多个值进行合并(以list的格式,分号分隔),如图四;
图三 person节点的属性记录合并为person_0_0.csv
图四 language和email两个list属性合并在一行
CsvMergeForeign
在CsvBasic基础上,如果节点间关系是1对多的,则将关系作为外键合并入节点的属性文件中展示,如图五
图五 将comment-hasCreator->p广电大流量卡erson、comment-isLocationIn->place、comment-replyOf->post、comment-replyOf->comment关系与comment属性文件合并
CsvCompositeMergeForeign
是CsvComposite和 CsvMergeForeign的结合,既合并了list属性,又将一对多关系进行了压缩表示,如图六
图六 place列表示person-isLocationIn->place关系的外键表示,同时language和email以list形式展示
各序列化模式对应的参数值如下
CsvBasic
ldbc.snb.datagen.serializ广电大流量卡er.dynamicActivitySerializer:ldbc.snb.datagen.serializer.snb.csv.dynamicserializer.activity.CsvBasicDynamicActivitySerializerldbc.snb.datagen.serializer.dynamicPersonSerializer:ldbc.snb.datagen.serializer.snb.csv.dynamicserializer.person.CsvBasicDynamicPersonSerializer#ldbc.snb.datagen.serializer.st广电大流量卡aticSerializer:ldbc.snb.datagen.serializer.snb.csv.staticserializer.CsvBasicStaticSerializerCsv复合材料
ldbc.snb.datagen.serializer.dynamicActivitySerializer:ldbc.snb.datagen.serializer.snb.csv.dynamicserializer.activity.CsvCompositeDynamicActivitySerializerldbc.snb.datagen.serializer.dynamicPersonSerial广电大流量卡izer:ldbc.snb.datagen.serializer.snb.csv.dynamicserializer.person.CsvCompositeDynamicPersonSerializerldbc.snb.datagen.serializer.staticSerializer:ldbc.snb.datagen.serializer.snb.csv.staticserializer.CsvCompositeStaticSerializerCsvMergeForeign
ldbc.snb.datagen.serializer.dynamicActivitySerializer:ldbc广电大流量卡.snb.datagen.serializer.snb.csv.dynamicserializer.activity.CsvMergeForeignDynamicActivitySerializerldbc.snb.datagen.serializer.dynamicPersonSerializer:ldbc.snb.datagen.serializer.snb.csv.dynamicserializer.person.CsvMergeForeignDynamicPersonSerializerldbc.snb.datagen.serializer.staticSerializer:ldbc.广电大流量卡snb.datagen.serializer.snb.csv.staticserializer.CsvMergeForeignStaticSerializerCsvCompositeMergeForeign
ldbc.snb.datagen.serializer.dynamicActivitySerializer:ldbc.snb.datagen.serializer.snb.csv.dynamicserializer.activity.CsvCompositeMergeForeignDynamicActivitySerializerldbc.snb.datagen.serializer.dyn广电大流量卡amicPersonSerializer:ldbc.snb.datagen.serializer.snb.csv.dynamicserializer.person.CsvCompositeMergeForeignDynamicPersonSerializerldbc.snb.datagen.serializer.staticSerializer:ldbc.snb.datagen.serializer.snb.csv.staticserializer.CsvCompositeMergeForeignStaticSerializerLDBC SNB在GES中的应用
Datagen生成的数据集与GES广电大流量卡格式有以下3点区别
不同标签的点id之间可能存在id重复的现象;knows关系是双向的;没有标签列。使用DatagenToGES数据转换脚本(基于CsvComposite序列化模式)可以将LDBC数,需在python3.6环境下运行。
DatagenTOGES脚本有如下功能:
将8种节点类型映射为1-8个数字前缀,将原id转换为以数字前缀为开头、长度为20bytes的新id,解决不同标签的点之间id重复的问题;增加knows边文件的反向边数据;增加标签列。转换前文件格式(CsvComposite序列化模式):
转换后文件格式:
DatagenToGES转换规模因子为100的大规模数据集用时约半个小时。
数广电大流量卡据转换脚本核心代码片段:
在GES中导入转换后的LDBC SNB(示例数据为SF0.1),并执行PageRank算法,效果如下图:
点击下方,第一时间了解华为云新鲜技术~
华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云
友情提醒: 请添加客服微信进行免费领取流量卡!
QQ交流群:226333560 站长微信:qgzmt2
原创文章,作者:sunyaqun,如若转载,请注明出处:https://www.dallk.cn/39169.html