OOM 从镶木地板加载数据

OOM loading data from parquet

我们有一个 Apache Spark 1.4.0 集群,我们想从 HDFS 的一组 350 个镶木地板文件中加载数据。目前,当我们尝试 运行 我们的程序时,我们得到一个 "OutOfMemory Error" 驱动端。 分析执行器和驱动程序时,我们注意到在操作期间,当驱动程序内存不断增加时,执行程序内存保持不变。 对于每个镶木地板文件,我们按如下方式加载数据:

sqlContext.read().format(PARQUET_OUT_TYPE).load("path").toJavaRDD(mappingFunction)

然后,我们通过 "union" 连接 RDD,然后合并它们

partitions.reduce((r1,r2) -> r1.union(r2).coalesce(PARTITION_COUNT))

对我来说真正奇怪的是执行程序内存在加载阶段保持不变(当我期望看到它增加时因为节点读取的数据)并且驱动程序内存不断增加(当我期望看到它保持不变,因为它不应该加载到驱动程序内存中)。

我们加载数据的方式有问题吗?你能解释一下如何从 parquet 中并行读取数据吗?

谢谢

OOM 是由 parquet 元数据而非数据引起的。

谢谢