【发布时间】:2018-05-14 16:11:55
【问题描述】:
我的目标是将每个 Spark 工作人员的所有数据累积到一个文件中。
我阅读了一些article 的类似问题的解决方案,作者鼓励为此目的使用org.apache.hadoop.fs.FileUtil#copyMerge 方法。我决定在我的项目中实现它,这就是我所拥有的:
try (JavaSparkContext sparkCtx = new JavaSparkContext(sparkConf)) {
// reading, transforming and storing RDDs to the text files
FileUtil.copyMerge(...) // merge them altogether into the single file
} // 'try-with-resources' eventually closes spark context
在实现这种方法时,我感到困惑:如果我运行这段代码,我最终会在每个工作实例上运行它,它们会相互覆盖。如果某些工人无法完成工作,会发生什么?每个工人都会有自己的最终单个文件的副本?
我意识到我需要找到一些地方/方法来保证所有工作人员都已停止执行以及我可以开始数据积累的地方。
如何做到这一点?我的猜测是在try-with-resources 块之后运行这个数据积累,对吗?
【问题讨论】:
标签: java apache-spark hdfs distributed-computing