Scala 是否有一个“问题”;钩;对于spark中的阶段/任务的结束?
我有一个Spark UDF,它需要在执行器的本地磁盘上安装一个特定的文件(在我的例子中是MATLAB运行时)(我们使用的是纱线)。由于我不能直接访问executor机器,因此我必须找到另一种方法在集群上部署我的运行时。 由于文件非常大,我无法在每次调用UDF时安装/删除它,因此我考虑了以下策略:Scala 是否有一个“问题”;钩;对于spark中的阶段/任务的结束?,scala,hadoop,apache-spark,Scala,Hadoop,Apache Spark,我有一个Spark UDF,它需要在执行器的本地磁盘上安装一个特定的文件(在我的例子中是MATLAB运行时)(我们使用的是纱线)。由于我不能直接访问executor机器,因此我必须找到另一种方法在集群上部署我的运行时。 由于文件非常大,我无法在每次调用UDF时安装/删除它,因此我考虑了以下策略: 在UDF的开头,我检查运行时是否在特定路径下本地可用,例如tmp-目录 如果运行时尚未安装,我将从HDFS获取它并安装在tmp中。这仅在第一次对特定执行者调用UDF时完成 上面的screnario工
- 在UDF的开头,我检查运行时是否在特定路径下本地可用,例如
-目录tmp
- 如果运行时尚未安装,我将从HDFS获取它并安装在
中。这仅在第一次对特定执行者调用UDF时完成tmp
似乎没有办法为executors()添加关闭钩子,是否还有另一个“钩子”,例如任务结束钩子?正如我所提到的,您可以监听任务结束(我现在刚刚有时间尝试),至少在spark上下文的全局级别上是这样的(稍后我将用scala编写一些东西,因为我目前无法运行scala代码):
还有很多其他侦听器,请参见我提到的,您可以侦听任务的结束(我现在刚刚有时间尝试),至少在spark上下文的全局级别上,可以使用类似的内容(我稍后将在scala中编写一些内容,因为我目前无法运行scala代码):
还有很多其他侦听器,请参见我会尝试使用JobProgressListener.onJobEnd()/onTaskEnd():(它似乎与spark UI相关,因此不确定它是否适用于您的情况)只是检查一下,但是您是否尝试过使用spark submit中的--files选项部署运行时?这是这类事情的明显选择。@RobertoCongiu是的,仅提交此选项是显而易见的,但我的运行时需要“安装”正在执行bash命令…@asettouf这听起来很有希望,我将研究我是否会尝试使用JobProgressListener.onJobEnd()/onTaskEnd():(它似乎与spark UI相关,因此不确定它是否适用于您的情况)只是检查一下,但是您是否尝试过使用spark submit中的--files选项部署运行时?这是这类事情的明显选择。@RobertoCongiu是的,仅提交此选项是显而易见的,但我的运行时需要“安装”正在执行bash命令…@asettouf这听起来很有希望,我会调查一下,我试过这个,问题是这个代码是在驱动程序上执行的,而不是在执行器上执行的……因此它对我没有用。@RaphaelRoth,你不能用应用程序和监听器上的
清理你的资源吗?我试过了,问题是这个代码是在驱动程序上执行的,而不是在执行器上执行的……因此它对我没有用。@RaphaelRoth,你不能用应用程序的侦听器清理你的资源吗?
//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);
}
});