是否有"钩子"为了火花中的舞台/任务的结束?

时间:2017-03-31 08:04:01

标签: scala hadoop apache-spark

我有一个Spark UDF需要在执行程序的本地磁盘上安装一个特定的文件(在我的情况下是MATLAB运行时)(我们使用的是YARN)。由于我无法直接访问执行程序计算机,因此我必须找到另一种在集群上部署运行时的方法。 由于文件非常大,我不能为UDF的每次调用安装/删除它,所以我考虑了以下策略:

  • 在UDF的开头,我检查运行时是否在特定路径下本地可用,例如tmp - 目录
  • 如果尚未安装运行时,我从HDFS获取它并安装在tmp中。这仅在第一次在特定执行程序上调用UDF时完成。

上面的screnario工作正常,但是我的已安装的运行时遍布集群,所以我希望之后删除它们。

似乎无法为执行程序添加shutdown-hooks(Spark worker shutdown - how to free shared resources),还有另一个" hook"例如任务挂钩?

1 个答案:

答案 0 :(得分:0)

正如我所提到的,你可以听一个任务的结束(我现在有时间尝试一下),至少在火花环境的全球范围内用喜欢的东西(我会写点什么)在Scala中,因为我现在无法运行scala代码):

//sc is the SparkContext
sc.addSparkListener(new SparkListener() {

        @Override
        public void onTaskEnd(SparkListenerTaskEnd taskEnd) {
            // TODO Auto-generated method stub
            System.out.println("Task ended: " + taskEnd);
            super.onTaskEnd(taskEnd);
        }
    });

还有很多其他听众,请参阅SparkListener