【问题标题】:How to guarantee that all Spark workers have been stopped?如何保证所有 Spark 工作人员都已停止?
【发布时间】: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


    【解决方案1】:

    FileUtil 完全独立于 Spark,不使用 Spark 工作程序或执行程序。

    如果您想确保它在 Spark 应用程序完成后执行,您可以在停止上下文后立即调用它。

    sparkCtx.stop();
    FileUtil.copyMerge(...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多