neo4j
2022 年8 月 1 日 10:14
1
目的
导数据的过程中发现tag和edge比较多,所以想拆分多个spark任务同时跑,达到并行生成数据的效果。
场景
比如需要使用exchange生成5个tag的sst数据,我启动spark A跑两个tag的数据,启动spark B跑另外三个tag的数据,其他配置都一样,生成sst后放文件的hdfs remote地址也是同一个root目录
熟悉代码过程
在看exchange源码的过程中,看到hdfs地址生成规则
/* Copyright (c) 2020 vesoft inc. All rights reserved.
*
* This source code is licensed under Apache 2.0 License.
*/
package com.vesoft.exchange.common.writer
import java.nio.{ByteBuffer, ByteOrder}
import java.nio.file.{Files, Paths}
import com.vesoft.exchange.common.config.FileBaseSinkConfigEntry
import com.vesoft.exchange.common.utils.HDFSUtils
import org.apache.spark.TaskContext
import org.apache.spark.sql.Row
import org.apache.spark.util.LongAccumulator
import org.rocksdb.{EnvOptions, Options, RocksDB, SstFileWriter}
import org.slf4j.LoggerFactory
/**
* NebulaSSTWriter
This file has been truncated. show original
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)再次上传这个文件是否存在可能性,导致两次上传的文件地址冲突,导致数据出现问题?
如果集群资源足够,且tag/edge多的情况下起多个任务同时跑理论上是会提升速度的,因为生成sst过程中有个shuffle操作进行全局排序是相对耗时的,如果拆分成多份任务同时跑可以缩短该算子的执行时间。
1 个赞
system
关闭
2022 年9 月 6 日 02:40
4
此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。