nebulaGraph2.5.1 hive 生成sst 文件现在有500个节点和边。怎样让每个sql任务并发执行加快速度

nebula 版本:2.5.0
部署方式(分布式 rpm):
是否为线上版本:Y /
硬件信息
磁盘500ssd
CPU16c、32G内存信息
问题的具体描述
nebulaGraph2.5.1 hive 生成sst 文件现在有500个节点和边类型。怎样让每个sql任务并发执行加快速度

如果你的500个tag和edgetype是定义在一个配置文件中,那他们之间是串行的,每个tag和每个edgetype内部是并发导入的。

如果你想多个tag和edgetype并发,那就分到不同的配置文件里面,同时起多个exchange任务。

1 个赞

那这样生成的sst 文件我都放一个hdfs文件目录这样会有冲突吗?

分开不同的目录。 如果数据所在的spark task id和nebula part 一样,就会冲突。

分开不同目录怎么样合并导入到nebula里面了,这是同一个图啊

exchange 里面能不能改成多线程呀,多个tag,edge 同时跑, 这样比同时创建几百个配置文件跑几百个exchange更好一点

exchange本来就是多线程的, 是一个tag内部按并发数跑,和多个tag同时按并发数跑是一样的, 因为并发数不会变。

这边测试sst 生产10亿数据,tag字段多时,比较慢要4个小时,还没直接导入快,说以希望这边可以帮助改成多线程并发生成sst 文件,希望10亿数据能在30分种,不然sst 方式就没多大意义

你每个tag里面是多线程,我想在外面多个tag在多个线程,这样跑完一个tag 时间可能全部tag 就跑完了,不用一个个tag 跑完再跑下一个

就是想在一个spark 任务里面启动多个stage 分别跑不同tag

能实现吗??

你有另一个帖子, 帖子中也说了是因为你的导入命令中没有配置spark.sql.shuffle.partitions 所以导致生成sst过程时并发数为1,肯定很慢的。
ldbc数据测试sst 是2.2亿边数据(只有一个属性)耗时7min。
你的10亿数据有太多字段了,不能单纯看条数。

不是这样的, 如果你最多能分配100个cores给exchange任务,不管是一个一个tag跑还是多个tag跑,你的并发度始终是100.
100个线程同时跑10个tasks,和100个线程一个一个task跑,他们的并发度都是一样的。

分区数已经解决了。但是现在是我的tag ,和边类型很多,一个个跑加起来总时间要4个小时很慢,我测试了是因为有些tag 字段太多的原因,现在就是字段太多了导致sst 生成很慢,所以我想说是不是还有别的方法并发跑,那现在是只能多个配置文件并发跑多个spark 任务的方式是吧,这个文件合并冲突问题怎么解决啊,每个任务生成文件怎么保证不冲突taskid ,和part 怎样保持不一样exchange 里面的id是唯一策略生成的吗

上面说了呀,你就配一下不同的hdfs目录就好了, 然后sst文件生成之后针对不同path执行多次download hdfs ”path“

你是说我不同tag 生成多个不同文件目录,再多次命令导入nebual,这样不同tag 文件确定不会文件名称冲突啥的??我先试试看吧

如果你的尝试结果有任何问题,记得来更新帖子~

问下INGEST命令导入不是每个节点同步导入download 的数据吗,导入7.4G数据 12个storage节点半小时都没INGEST 完,还有,我多个tag 路径数据,可以多个INGEST 命令同时导入吗,但是你INGEST 对应图download 路径只有一个,文件都放里面应该会重复导入了,这个方式好像也不行哦

问下,这边要调整生成的sst文件的大小和数量,是设置这2参数吗
target_file_size_base
target_file_size_multiplier
这个设置了但是文件数量还是没有变。帮看看

只和spark的partition数 & nebula space的part数有关。