hadoop - 在Spark中充分利用内存

标签 hadoop apache-spark pyspark

我已经运行了一个Pyspark应用程序,并且尝试在代码中再次使用该数据帧时尝试保留该数据帧。

我正在使用以下内容:
sourceDF.persist(StorageLevel.MEMORY_AND_DISK_SER)
我正在处理30GB的数据。
我有3个节点,所有16 GB RAM和4个虚拟内核。
从Spark UI,我看到持久化后的内存大小要小得多。我希望它尽可能将缓存的数据存储在RAM内存中。

enter image description here

如何最好地利用RAM内存?

另外,任务的GC时间似乎很长。我该如何减少呢?

enter image description here

最佳答案

通过使用数据帧并通过序列化存储数据,您已经在充分利用内存。除了在缓存之前过滤出最终结果不需要的尽可能多的数据之外,您没有更多的事情要做。

垃圾收集很棘手。在使用Dataframe API和无类型转换时,催化剂将尽力避免不必要的对象创建。在使用数据框并遇到GC问题时,您实际上没有太多发言权。就性能和对象创建而言,某些操作本来会更昂贵,但是您只能使用类型化的数据集api和rdd api来控制这些操作。最好不要做您当前正在做的事情。如果GC确实是一个问题,那么您可以做的最好的事情就是使用JVM分析工具,查找哪些代码段创建了最多的对象并希望对其进行优化。此外,尝试尽可能减少数据偏斜,并在可能的情况下利用广播连接应有助于避免出现GC。

关于hadoop - 在Spark中充分利用内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48734725/

相关文章:

使用 python 的 Azure Databricks dbfs

hadoop - MPI vs GPU vs Hadoop,这三种并行性之间的主要区别是什么?

hadoop java.io.IOException : while running namenode -format 错误

java - 我如何调试 Hadoop map reduce

hadoop - 我在哪里运行 spark - 独立、Hadoop 或 Mesos

dataframe - 通过 [PySpark] 列连接两个 DataFrame

video - Hadoop和视频数据

azure - Spark Cosmos 数据库连接器正在删除大多数行为空的列

performance - SPARK mapToPair 和 saveToTextFile 我应该使用重新分区来优化性能

apache-spark - YARN 在 launch_container.sh 中如何执行 PYSPARK 环境设置