Spark花了20G+内存写了一个140MB的Parquet文件

Lun*_*Jin 5 java memory-management apache-spark parquet apache-spark-sql

我有一个 Spark 作业,它在较小的镶木地板文件中读取并对列名称进行一些更改,然后将其重新分区到稍大的文件中并在分区中排序。

最终以 parquet 格式写入 HDFS。

但基于 YARN 容器日志:

2018-10-10 20:51:19,397 INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl:container-id 容器的 ProcessTree 13331 的内存使用情况:使用了 26.9 GB 的 35.5 GB 物理内存;使用了 35.0 GB 的 74.5 GB 虚拟内存

文件大小仅为 145MB

这是代码:

df.repartition(32, columns)
            .sortWithinPartitions(columns)
            .write().parquet(PATH)
Run Code Online (Sandbox Code Playgroud)

该作业的每个任务占用 25GB+ 物理内存使用量