我有一个 Spark 应用程序内存不足,集群有两个节点,RAM 大约为 30G,输入数据大小大约为几百 GB。
该应用程序是一个 Spark SQL 作业,它从 HDFS 读取数据并创建一个表并缓存它,然后执行一些 Spark SQL 查询并将结果写回 HDFS。
最初我将数据分成 64 个分区,结果出现了 OOM,然后我能够通过使用 1024 个分区来解决内存问题。但是为什么使用更多的分区可以帮助我解决 OOM 问题?
最佳答案
大数据的解决方案是分区(分而治之)。由于并非所有数据都可以放入内存中,因此也无法在一台机器上进行处理。
每个分区都可以在相对较短的时间内装入内存并处理(映射)。在为每个分区处理数据之后。它需要合并(减少)。这是传统 map reduce
将数据拆分到更多分区意味着每个分区越来越小。
[编辑]
Spark 使用称为弹性分布式数据集(RDD)的革命性概念。
(来源:cloudera.com)
我为 Youtube 上的演示做了一个小截屏Spark Makes Big Data Sparking .
关于apache-spark - Apache Spark 内存不足,分区数量较少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38133744/