apache-spark - Spark 溢出独立于分配的执行程序内存

在使用 spark 2.0 运行 pyspark 应用程序时,我注意到了奇怪的行为。在我的脚本中涉及 reduceByKey(因此是 shuffle)操作的第一步中,我观察到 shuffle 写入的数量大致符合我的预期,但是发生的溢出比我预期的要多得多。我试图通过将每个执行程序分配的内存量增加到原始内存量的 8 倍来避免这些溢出,但在溢出量上基本上没有区别。奇怪的是,我还看到,在此阶段运行时,几乎没有使用任何分配的存储内存(如 spark Web UI 中的 executors 选项卡所报告的那样)。

我看到了这个较早的问题,这让我相信增加执行程序内存可能有助于避免溢出:How to optimize shuffle spill in Apache Spark application
.这让我相信一些硬限制导致了溢出,而不是 spark.shuffle.memoryFraction 参数。是否存在这样的硬限制,可能在 HDFS 参数中?否则,除了增加执行程序内存之外,还可以做些什么来避免溢出?

非常感谢,R



最佳答案

PySpark 中的溢出行为使用 spark.python.worker.memory 控制:

Amount of memory to use per python worker process during aggregation, in the same format as JVM memory strings (e.g. 512m, 2g). If the memory used during aggregation goes above this amount, it will spill the data into disks.



这是 by default set to 512MB .此外,PySpark 使用自己的减少机制与 External(GroupBy|Sorter|Merger)并表现出与其原生对应物略有不同的行为。

关于apache-spark - Spark 溢出独立于分配的执行程序内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41343302/

相关文章:

unity3d - 切换场景时网格会重新加载吗?

apache-spark - 自定义 log4j 类不适用于 spark 2.0 EMR

android - 使用 DownloadManager.Request 从 url 下载文件时下载

compiler-construction - 这个产生式规则是否左递归?

cherrypy - 更改 Content-Type 后返回的内容未自动编码

wpf - 在其 winforms 父级中拖动托管 WPF 控件吞噬的事件

sprite-kit - SpriteKit : calculate distance betwee

hdf5 - dask 和并行 hdf5 写入

Ansible - 使用用户输入选择变量

C - do/while 循环和 switch(int)。输入 char 值会导致 inf。环形