Joe*_*e K 10 python hadoop hadoop-yarn apache-spark pyspark
我有一个火花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)
Run Code Online (Sandbox Code Playgroud)
运行时,我一直收到此错误:
错误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" \
Run Code Online (Sandbox Code Playgroud)
当然,这足够的记忆总结?
我想更普遍的是,我很难理解蟒蛇工作者的记忆是如何在总体中控制/计算的.有没有这方面的文件?
我还想了解使用生成器函数是否会减少内存使用量.它会通过python进程流式传输数据(就像我希望的那样)还是会在发送回JVM/spark基础设施之前将其缓冲?
纱线杀死执行者
memory usage > (executor-memory + executor.memoryOverhead)
Run Code Online (Sandbox Code Playgroud)
从您的设置看起来它是一个有效的例外.
(memory usage) 11.4GB > 11.18GB (executor-memory=6GB + memoryOverhead=5.18GB)
Run Code Online (Sandbox Code Playgroud)
尝试
--conf "spark.yarn.executor.memoryOverhead=6144"`
Run Code Online (Sandbox Code Playgroud)
如您所见,11.2 GB 是由yarn 创建的容器的最大内存。它等于执行器内存+开销。所以Python内存不计算在内。
异常希望您增加开销,但您可以只增加执行程序内存而不增加开销内存。这就是我能说的,但不知道为什么你在单个执行器中需要那么多内存,可能是笛卡尔或类似的东西可能需要这么多内存。
归档时间: |
|
查看次数: |
1335 次 |
最近记录: |