use*_*459 6 hadoop-yarn apache-spark
我们目前遇到的问题是,在YARN上运行时,Spark作业看到许多容器因超出内存限制而被杀死.
16/11/18 17:58:52 WARN TaskSetManager: Lost task 53.0 in stage 49.0 (TID 32715, XXXXXXXXXX):
ExecutorLostFailure (executor 23 exited caused by one of the running tasks)
Reason: Container killed by YARN for exceeding memory limits. 12.4 GB of 12 GB physical memory used.
Consider boosting spark.yarn.executor.memoryOverhead.
Run Code Online (Sandbox Code Playgroud)
以下参数通过spark-submit传递:
--executor-memory=6G
--driver-memory=4G
--conf "spark.yarn.executor.memoryOverhead=6G"`
Run Code Online (Sandbox Code Playgroud)
我正在使用Spark 2.0.1.
在阅读了几篇关于YARN杀死容器的帖子之后,我们已经将memoryOverhead增加到了这个值(例如,如何避免Spark执行器丢失和纱线容器由于内存限制而将其杀死?).
鉴于我的参数和日志消息,它似乎"当内存使用量大于(executor-memory + executor.memoryOverhead)时,Yarn会终止执行程序".
继续增加这种开销是不切实际的,希望最终我们找到一个不会发生这些错误的值.我们在几个不同的工作中看到了这个问题.我将不胜感激任何关于我应该改变的参数的建议,我应该检查的东西,我应该开始寻找调试这个等等.我能够提供进一步的配置选项等.
Sim*_*iff 10
您可以通过以下配置减少内存使用量spark-defaults.conf:
spark.default.parallelism
spark.sql.shuffle.partitions
Run Code Online (Sandbox Code Playgroud)
当您使用超过2000个分区时,会有所不同spark.sql.shuffle.partitions.你可以在Github上的spark代码中看到它:
private[spark] object MapStatus {
def apply(loc: BlockManagerId, uncompressedSizes: Array[Long]): MapStatus = {
if (uncompressedSizes.length > 2000) {
HighlyCompressedMapStatus(loc, uncompressedSizes)
} else {
new CompressedMapStatus(loc, uncompressedSizes)
}
}
Run Code Online (Sandbox Code Playgroud)
我建议尝试使用超过2000个分区进行测试.当你使用非常庞大的数据集时,它可能会更快一些.根据这个,你的任务可以短至200毫秒.正确的配置不容易找到,但根据您的工作量,它可以产生不同的小时数.
| 归档时间: |
|
| 查看次数: |
7679 次 |
| 最近记录: |