Apache Spark 在分区数量较少时内存不足

2024-02-24

我有一个Spark应用程序总是内存不足,集群有两个节点,RAM大约30G,输入数据大小大约几百GB。

该应用程序是一个 Spark SQL 作业,它从 HDFS 读取数据并创建一个表并缓存它,然后执行一些 Spark SQL 查询并将结果写回 HDFS。

最初我将数据分成 64 个分区,结果出现 OOM,然后我使用 1024 个分区解决了内存问题。但为什么使用更多分区可以帮助我解决 OOM 问题呢?


大数据的解决方案是分区(分而治之)。由于并非所有数据都可以放入内存中,并且也无法在单台机器中处理。

每个分区都可以在相对较短的时间内装入内存并进行处理(映射)。对每个分区的数据进行处理后。它需要合并(减少)。这是传统地图缩小 https://ai.google/research/pubs/pub62

将数据拆分到更多分区意味着每个分区变得更小。

[Edit]

Spark 使用称为弹性分布式数据集 (RDD) 的革命概念。

  • 操作有两种类型,transformation和acton
  • 转换是从一个 RDD 映射到另一个 RDD。它是惰性评估的。这些 RDD 可以被视为我们不想得到的中间结果。
  • 当您确实想要获取数据时,请使用操作。这些 RDD/数据可以按照我们想要的方式处理,就像采取顶部失败一样。
  • Spark在执行之前会分析所有的操作并创建一个DAG(有向无环图)。
  • 当操作被触发时,Spark 从源 RDD 开始计算。然后忘记它。

Spark DAG
(source: cloudera.com https://blog.cloudera.com/wp-content/uploads/2014/03/spark-devs1.png)

我为 YouTube 上的演示制作了一个小截屏视频Spark让大数据火花四射 https://www.youtube.com/watch?v=bLeLXIbULN0.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache Spark 在分区数量较少时内存不足 的相关文章

随机推荐