基于DataX的janusgraph入库性能优化实践

基于DataX的janusgraph入库性能优化实践

目录

基于DataX的janusgraph入库性能优化实践

前言

1. 插件整体设计

2. 入库插件设计V1

2.1 对开图参数与底层存储的调优

3. 入库插件设计V2(加缓存)

4. 入库插件设计V3(多通道)

5. 结语


前言

实际工作过程中需要将不同来源的数据写入janusgraph图数据库,项目选型以dataX作为数据抽取框架来开发janusgraphWriter插件来达到适配任意数据来源的目的。具体时间实现DataX插件开发指南,结合自身项目业务完成janusgraph插件开发(后续附上插件开源项目地址)。我们发现在插件运行过程中存在入库性能不理想的问题,本实践有效规避了业务中入库数据去重校验逻辑造成的入库缓慢问题,百倍提高入库速率,基本达到不做校验的入库水平,远远超过对janusgraph开图配置参数的调优对入库速率的性能提升。

1. 插件整体设计

基于项目需求我们要实现以下几个功能:

1. 多源数据入图库

2. 新数据入库,重复数据更新

3. 入库的统计数据与脏数据需要记录

基本设计是依赖Datax开发janusGraphWriter插件,对Reader接入的数据做数据转换,去重校验等逻辑,将数据放入缓存,然后入库;考虑到脏数据体量与数据生产速度等问题,将入库过程中的统计数据与脏数据明细接入到外部kafka集群(修改datax-core工程),便于应用系统消费。

2. 入库插件设计V1

第一版的插件在入库过程中插件写入速度并不理想,并且写入数据随着时间的递增而下降。经过开图参数调优、底层存储系统切换、入库逻辑排查等过程之后,我们发现,最耗时的是数据校验的过程,因为每一条数据在入库前都要查询图数据库来校验数据是否存在,不存在的话才做插入操作,存在就做更新操作(虽然本人觉得,不应该将数据治理工作放到数据抽取的工作中来)。每条数据都需要与数据库交互一次,随着数据库的存量数据增加,查询速度越来越慢是符合预期的。

2.1 对开图参数与底层存储的调优

这里只介绍对入库性能提升较大一些的操作,(开图参数调整对写入速度并没明显的提升;对于切换成cassandra等其他的底层存储,得到的结果是更慢,按照原理cassandra对数据一致性要求更低,预期更快,至于为什么更慢有待大神们指点):

1. 修改gremlin-server开图参数,配置各个regionserver默认的region数量,根据自己的集群资源和入库数据量来做相应修改,可提高入库速度。

storage.hbase.region-count:gremlin-server对应的底层hbase表的初始region数量;

storage.hbase.regions-per-server:每个hbase的regionServer节点的初始region数量:

此参数配置合理,可以有效利用hbase数据节点资源做到写负载均衡,并且可以降低region 合并操作造成的存储系统停顿耗时。

2. 调大ids.block-size,cache.db-cache-size并未实际提升

3. 修改默认数据压缩方式GZ为SNAPPY,调整storage.hbase.compat-class和storage.hbase.compression-algorithm,需要hadoop支持SNAPPY,未安装成功,预计在大数据量的情况下,提升压缩效率会提高入库速度,参见:Hadoop之常见压缩格式以及性能对比

3. 入库插件设计V2(加缓存)

相比于第一版,加入了Redis缓存,将每个批次的数据在内存中去重,将写入成功的数据的Vertex的id存进redis,将之前与janus交互,改为批量查询redis,极大提高了入库性能。平均提升20倍以上。

4. 入库插件设计V3(多通道)

为了更进一步提升入库速度,结合DataX的Reader的SplitPk属性,将入库数据拆分成多个通道,并行写入,提高入库性能,这里一般不会是正比提升,因为底层hbase数据节点的入库性能有限制。在多线程无法线性提升入库性能的同时,考虑增加hbase集群的RegionServer。

5. 结语

本实践结合自身项目需求,对janusgraph入库性能,在配置参数,底层存储,入库逻辑等方面做了比较深入的研究和论证,达到了比较好的效果,单节点,多线程模式下,点入库速度能达到2500-300条每秒,边入库速度能达到9000条每秒;如果有兴趣交流知识图谱,请联系作者,见二维码,欢迎交流指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于DataX-Web的性能优化,可以从以下几个方面入手: 1. 调整DataX Job内Channel并发数:当提升DataX Job内Channel并发数时,内存的占用会显著增加,因为DataX作为数据交换通道,在内存中会缓存较多的数据。为了防止OOM等错误,可以调大JVM的堆内存。可以通过调整JVM的-Xms和-Xmx参数来增加堆内存的分配。\[1\]\[2\] 2. 全局调优:可以通过修改DataX-Web的配置文件来进行全局调优。在配置文件中,可以调整数据导入的并发度、解除对读取行数和字节的限制,以及设置每次读取batch的大小等参数。根据服务器硬件情况进行调优,可以提升DataX-Web的性能。\[3\] 3. 硬件优化:除了软件层面的调优,还可以考虑进行硬件优化。例如,增加服务器的内存、CPU等硬件资源,提升服务器的性能,从而提高DataX-Web的性能。 综上所述,对于DataX-Web的性能优化,可以通过调整DataX Job内Channel并发数、全局调优和硬件优化等方式来提升性能。 #### 引用[.reference_title] - *1* *2* [DataX优化](https://blog.csdn.net/qq_36593748/article/details/122441642)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [DataX3.0 启动参数说明及优化](https://blog.csdn.net/qq_23268209/article/details/90437073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仔仔1993

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值