[英]Python Spark / Yarn memory usage
我有一个火花python应用程序被纱线杀死超过内存限制。 我有一个步骤涉及加载一些有点重(500+ MB)的资源,所以我正在使用mapPartitions。 基本上:
def process_and_output(partition):
resources = load_resources()
for record in partition:
yield transform_record(resources, record)
input = sc.textFile(input_location)
processed = input.mapPartitions(process_and_output)
processed.saveAsTextFile(output_location)
运行时,我一直收到此错误:
错误YarnScheduler:丢失执行程序1(已删除地址):由于超出内存限制而被YARN杀死的容器。 使用11.4 GB的11.2 GB物理内存。 考虑提升spark.yarn.executor.memoryOverhead。
我试过将memoryOverhead提升到极高,但仍然是同样的问题。 我跑了:
--conf "spark.python.worker.memory=1200m" \
--conf "spark.yarn.executor.memoryOverhead=5300" \
--conf "spark.executor.memory=6g" \
当然,这足够的记忆总结?
我想更普遍的是,我很难理解蟒蛇工作者的记忆是如何在总体中控制/计算的。 有没有这方面的文件?
我还想了解使用生成器函数是否会减少内存使用量。 它会通过python进程流式传输数据(就像我希望的那样)还是会在发送回JVM / spark基础设施之前将其缓冲?
纱线杀死执行者
memory usage > (executor-memory + executor.memoryOverhead)
从您的设置看起来它是一个有效的例外。
(memory usage) 11.4GB > 11.18GB (executor-memory=6GB + memoryOverhead=5.18GB)
尝试
--conf "spark.yarn.executor.memoryOverhead=6144"`
如您所见,11.2 GB是由纱线创建的容器的最大内存。 它等于执行程序内存+开销。 所以python内存不计算在内。
异常希望您增加开销,但您可以在不增加开销内存的情况下增加执行程序内存。 多数民众赞成我不知道为什么你需要在一个执行器中需要那么多的内存,可能是一个笛卡尔或类似的东西需要这么多的记忆。
两年半之后......我碰巧正在阅读火花释放笔记并看到这个:
添加spark.executor.pyspark.memory限制
有这个链接的错误: https : //issues.apache.org/jira/browse/SPARK-25004
我早就解决了原来的问题然后改变了工作,所以我不再有能力尝试这个。 但我怀疑这可能是我遇到的确切问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.