当前位置: 首页 > 知识库问答 >
问题:

Spark中有一个阶段/任务结束的“钩子”吗?

郭均
2023-03-14

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

    null

似乎没有办法为执行者添加关机钩子(Spark worker shutdown-如何释放共享资源),是否还有另一个“钩子”,例如任务结束钩子?

共有1个答案

顾昊穹
2023-03-14

正如我提到的,您可以监听任务的结束(我现在才有时间尝试),至少在spark上下文的全局级别上使用类似的内容(稍后我将用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

 类似资料:
  • 我看到分区中的行数和任务的执行时间之间有明显的相关性。由于我的数据集具有无法更改的偏斜性质,我有几个分区,其元素数(>8000)远高于平均值(~3000)。一个分区的平均执行时间为10-20分钟,较大的可达3小时以上。我的一些最大的分区具有较高的,因此相应的任务几乎是在阶段结束时执行的。结果,其中一个Spark阶段在最后5个任务上挂起3个小时。 问题: 是否有一种方法可以重新排序分区的,以便首先执

  • 下面我们假设每个时间点只有一个Spark作业在运行。 以下是我所理解的在Spark中发生的事情: 创建时,每个工作节点都启动一个执行器。执行程序是单独的进程(JVM),它连接回驱动程序。每个执行器都有驱动程序的jar。退出驱动程序,关闭执行程序。每个执行程序可以保存一些分区。 执行作业时,将根据沿袭图创建执行计划。 执行作业被拆分为多个阶段,其中阶段包含相同数量的相邻转换和操作(在沿袭图中),但不

  • 我正在使用以下项目结构 子模块包含在设置中。gradle,并在内部版本中配置。根项目的渐变。 我有3个任务要做 (每个子项目都有这个) (这是每个子项目都需要自己工作的打包机制) (这只需要调用一次) 我想能够打电话 $gradle部署 build.gradle

  • 我得到了下面的错误当我运行一个应用程序JavaWeb使用 我的问题是为什么它只在部署应用程序后才发生?在开发环境中它没有发生。 2021 03月24日08:50:41.150信息19613---[uler事件循环]组织。阿帕奇。火花调度程序。DAGScheduler:ShuffleMapStage 0(FalhaService中的collectAsList。java:60)在7.513秒内失败,原

  • 我有一个包含子项目的简单项目,我希望在执行<code>gradle test 我遵循了gradle文档并添加了以下内容: 这在我执行时有效,但当我在根项目中执行或时-任务未运行。 如何使gradle在不每次指定任务的情况下运行任务?

  • 我不太理解参数。在我看来,“任务”对应于执行器中的“线程”或“进程”。假设我将“spark.task.cpus”设置为2。 > 线程如何同时使用两个CPU?它不会需要锁并导致同步问题吗? 我正在查看部署/执行器/Executor.scala中的函数,在这里我看不到任何“每个任务的cpu数量”的概念。那么Spark最终在哪里/如何在独立模式下为任务分配多个cpu呢?