nebula-exchange启动并行多个spark任务处理数据时,是否存在生成的数据文件冲突的问题

目的

导数据的过程中发现tag和edge比较多,所以想拆分多个spark任务同时跑,达到并行生成数据的效果。

场景

比如需要使用exchange生成5个tag的sst数据,我启动spark A跑两个tag的数据,启动spark B跑另外三个tag的数据,其他配置都一样,生成sst后放文件的hdfs remote地址也是同一个root目录

熟悉代码过程

在看exchange源码的过程中,看到hdfs地址生成规则

 val taskID                  = TaskContext.get().taskAttemptId()
 val localFile = s"$localPath/$currentPart-$taskID.sst"
 HDFSUtils.upload(localFile,s"$remotePath/${currentPart}/$currentPart-$taskID.sst",
                                 namenode)

远程hdfs文件地址规则:$remotePath/${currentPart}/$currentPart-$taskID.sst
remotePath:多个并行的spark设置的一样
currentPart:不同tag有可能进入同一个part文件
$currentPart-$taskID:所以taskID如果一样的话,多个并行的spark任务,将会产生同一个文件

问题

(1)这样并行多个spark任务,是否可以起到提高生成sst速度到效果?或者有没有其他好的办法
(2)再次上传这个文件是否存在可能性,导致两次上传的文件地址冲突,导致数据出现问题?

手动 ping @nicole :grin:

如果集群资源足够,且tag/edge多的情况下起多个任务同时跑理论上是会提升速度的,因为生成sst过程中有个shuffle操作进行全局排序是相对耗时的,如果拆分成多份任务同时跑可以缩短该算子的执行时间。

1 个赞

浙ICP备20010487号