【spark报错排查】ERROR YarnScheduler: Lost executor 2 on url: Container container_1

近期工作中,遇到了一个ERROR特别头疼,经过多次实验,总于把它解决了,因此记录之~

具体error日志如下:

20/06/10 11:19:41 WARN YarnSchedulerBackend$YarnSchedulerEndpoint: Requesting driver to remove executor 1 for reason Container container_1587136360493_239335_01_4194305 on host: xxxxxxxx.com was preempted.
20/06/10 11:19:41 ERROR YarnScheduler: Lost executor 1 on xxxxxxxxxxx.com: Container container_1587136360493_239335_01_4194305 on host: xxxxxxxxx.com was preempted.
20/06/10 11:19:41 INFO TaskSetManager: Task 8 failed because while it was being computed, its executor exited for a reason unrelated to the task. Not counting this failure towards the maximum number of failures for the task.
20/06/10 11:19:41 INFO BlockManagerMasterEndpoint: Trying to remove executor 1 from BlockManagerMaster.
20/06/10 11:19:41 INFO BlockManagerMaster: Removal of executor 1 requested
20/06/10 11:19:41 INFO YarnSchedulerBackend$YarnDriverEndpoint: Asked to remove non-existent executor 1

一直在网上查,但是没有结果,后面才定位到原来是executor 1中占用内存太大,超过了预先分配的内存,导致OOM了。实质上的错误是这个:java.lang.OutOfMemoryError: Java heap space

1. 问题

我们用了sc.wholeTextFiles(data_path)的方式读取文件,这种方式主要用读取许多小文件,读取大文件时,有一个致命的问题,就是如果只读一个文件,它默认就是用一个executor来读取,这个时候就会存在一个问题,那就是如果这个文件很大,这个读取的executor很容就出现上述的OOM,进而导致executor被抢占了(preempted)。

2. 解决办法

最好的解决办法就是将wholeTextFiles的读取方式改成textFile的读取方式,
首先我们看一下pyspark(https://www.cnblogs.com/wenBlog/p/6323678.html)中textFile的参数介绍
textFile(name, minPartitions=None, use_unicode=True)
可以看到,除了路径外,还有一个minPartitions,表示最小的分区数,我们可以对这个minPartitions设置为1000,这样就相当于最少有1000个tasks去读取这个路径下的文件了,这样即使有大文件,也会有1000个tasks将该大文件切分成很多块,每块读取时所占用的内存就会比较小了。
具体命令

sc.textFile(data_path, 1000)

这里用了1000个task去读取大文件,这里要注意区分一下各个名词,每个executor可以执行很多个task,这里用1000个task去读取大文件,不是1000个task并行读取,并行读取的设置参数是:executor-cores
【spark报错排查】ERROR YarnScheduler: Lost executor 2 on url: Container container_1_第1张图片
具体的spark调优的指导可以参考:Spark性能优化指南——基础篇(https://tech.meituan.com/2016/04/29/spark-tuning-basic.html)、Spark性能优化指南——高级篇(https://tech.meituan.com/2016/05/12/spark-tuning-pro.html)

你可能感兴趣的:(并行计算,spark,spark性能调优,spark,大数据,textFile,wholeTextFiles,preempted)