Apache spark Spark应用程序杀死执行器
我在独立模式下运行spark cluster,并使用spark提交应用程序。在spark UI阶段部分,我发现执行阶段的执行时间很长(>10h,通常为30秒)。阶段有许多失败的任务,错误Apache spark Spark应用程序杀死执行器,apache-spark,Apache Spark,我在独立模式下运行spark cluster,并使用spark提交应用程序。在spark UI阶段部分,我发现执行阶段的执行时间很长(>10h,通常为30秒)。阶段有许多失败的任务,错误已重新提交(由于执行器丢失而重新提交)。在“阶段”页面的“按执行者聚合的度量”部分中,存在地址为“代码”的执行者无法找到地址。Spark尝试无限期地重新提交此任务。如果我关闭了这个阶段(我的应用程序会自动重新运行未完成的spark作业),所有这些都会继续正常工作 我还在spark日志中发现了一些奇怪的条目(与阶段
已重新提交(由于执行器丢失而重新提交)
。在“阶段”页面的“按执行者聚合的度量”部分中,存在地址为“代码”的执行者无法找到地址。Spark尝试无限期地重新提交此任务。如果我关闭了这个阶段(我的应用程序会自动重新运行未完成的spark作业),所有这些都会继续正常工作
我还在spark日志中发现了一些奇怪的条目(与阶段执行开始时间相同)
大师:
16/11/19 19:04:32 INFO Master: Application app-20161109161724-0045 requests to kill executors: 0
16/11/19 19:04:36 INFO Master: Launching executor app-20161109161724-0045/1 on worker worker-20161108150133
16/11/19 19:05:03 WARN Master: Got status update for unknown executor app-20161109161724-0045/0
16/11/25 10:05:46 INFO Master: Application app-20161109161724-0045 requests to kill executors: 1
16/11/25 10:05:48 INFO Master: Launching executor app-20161109161724-0045/2 on worker worker-20161108150133
16/11/25 10:06:14 WARN Master: Got status update for unknown executor app-20161109161724-0045/1
工人:
16/11/25 10:06:05 INFO Worker: Asked to kill executor app-20161109161724-0045/1
16/11/25 10:06:08 INFO ExecutorRunner: Runner thread for executor app-20161109161724-0045/1 interrupted
16/11/25 10:06:08 INFO ExecutorRunner: Killing process!
16/11/25 10:06:13 INFO Worker: Executor app-20161109161724-0045/1 finished with state KILLED exitStatus 137
16/11/25 10:06:14 INFO Worker: Asked to launch executor app-20161109161724-0045/2 for app.jar
16/11/25 10:06:17 INFO SecurityManager: Changing view acls to: spark
16/11/25 10:06:17 INFO SecurityManager: Changing modify acls to: spark
16/11/25 10:06:17 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(spark); users with modify permissions: Set(spark)
网络连接没有问题,因为worker、master(上面的日志)和驱动程序运行在同一台机器上
Spark版本1.6.1很可能日志中有趣的部分是:
16/11/25 10:06:13 INFO Worker: Executor app-20161109161724-0045/1 finished with state KILLED exitStatus 137
退出137
强烈建议内存或cpu内核出现资源问题。
考虑到你可以通过重新运行这个阶段来解决你的问题,可能所有的内核都已经分配好了(也许你还运行了一些Spark shell?)。
这是独立Spark设置(一台主机上的所有设备)的常见问题
无论哪种方式,我都会按顺序尝试以下内容:
spark.storage.memoryFraction
以预分配更多内存用于存储,并防止系统在大舞台上随机分配137
spark.deploy.defaultCores
执行此操作,将其设置为3甚至2(在英特尔四核上,假设8个vcores)Spark.executor。内存需要增加
export SPARK\u JAVA\u OPTS+=”-Dspark.kryoserializer.buffer.mb=10-Dspark.cleaner.ttl=43200“
最后,您的SPARK env.sh
可能会通过强制更频繁地运行元数据清理来实现这一目的在我看来,其中一个应该会起作用。阿明的回答很好。我只是想指出对我有用的东西 当我增加参数时,同样的问题消失了:
spark.default.parallelism
从28(我拥有的执行器数量)到84(可用内核数量)
注意:这不是设置此参数的规则,这仅适用于我
更新:此方法还得到以下支持:
有时,您会出现OutOfMemory错误,这不是因为RDD不适合内存,而是因为您的一个任务(例如groupByKey中的一个reduce任务)的工作集太大。Spark的shuffle操作(sortByKey、groupByKey、reduceByKey、join等)在每个任务中构建一个哈希表来执行分组,而分组通常可能很大这里最简单的修复方法是提高并行度,使每个任务的输入集更小。Spark可以有效地支持短至200毫秒的任务,因为它在多个任务中重用一个executor JVM,并且任务启动成本较低,因此,您可以安全地将并行级别提高到集群中的核心数以上
你能添加引起麻烦的工人的日志吗?如果任务多次失败,可能会杀死一名工作人员。有任何异常发生吗?@YuvalItzchakov worker登录pos-来自执行器丢失的worker的日志。在执行器丢失之前没有异常和失败。“工作人员登录pos-来自丢失执行器的工作人员的日志”不确定这是什么means@YuvalItzchakov抱歉,“工作人员登录帖子(我的问题)”。我在我的问题中添加了工作日志。此工作进程丢失了执行器。@vefthym more memory allocation helpedd您对此有什么理论解释吗?@Cortwave是的,增加分区数会减少每个任务的内存需求(每个分区由一个任务处理)。至于具体的数字,没有,但在我以前的MapReduce经验中,添加更多的分区具有相同的行为,我不断增加分区,直到没有抛出OOM错误(如果适用)。嗨,Armin,你知道spark 2.3.x以后的版本中spark.storage.memoryFraction的等价物是什么吗?此参数已弃用。现在有spark.memory.storageFraction,但其效果与旧设置的1:1不可比。