Hadoop 火花拼花地板尺寸不均匀

Hadoop 火花拼花地板尺寸不均匀,hadoop,apache-spark,apache-spark-sql,hadoop2,parquet,Hadoop,Apache Spark,Apache Spark Sql,Hadoop2,Parquet,由于内存不足错误,我检查了spark作业的输出拼花文件,该作业总是会发出尖嘴声。 我在Cloudera 5.13.1上使用了Spark 1.6.0 我注意到拼花地板排组大小不均匀。 第一排和最后一排的人很多。剩下的真的很小 拼花地板工具的缩短输出RC=行数,TS=总尺寸: row group 1: RC:5740100 TS:566954562 OFFSET:4 row group 2: RC:33769 TS:2904145 OF

由于
内存不足错误,我检查了spark作业的输出拼花文件,该作业总是会发出尖嘴声。
我在Cloudera 5.13.1上使用了
Spark 1.6.0

我注意到拼花地板排组大小不均匀。 第一排和最后一排的人很多。剩下的真的很小

拼花地板工具的缩短输出
RC=行数
TS=总尺寸

row group 1:                RC:5740100 TS:566954562 OFFSET:4  
row group 2:                RC:33769 TS:2904145 OFFSET:117971092  
row group 3:                RC:31822 TS:2772650 OFFSET:118905225  
row group 4:                RC:29854 TS:2704127 OFFSET:119793188  
row group 5:                RC:28050 TS:2356729 OFFSET:120660675  
row group 6:                RC:26507 TS:2111983 OFFSET:121406541  
row group 7:                RC:25143 TS:1967731 OFFSET:122069351  
row group 8:                RC:23876 TS:1991238 OFFSET:122682160  
row group 9:                RC:22584 TS:2069463 OFFSET:123303246  
row group 10:               RC:21225 TS:1955748 OFFSET:123960700  
row group 11:               RC:19960 TS:1931889 OFFSET:124575333  
row group 12:               RC:18806 TS:1725871 OFFSET:125132862  
row group 13:               RC:17719 TS:1653309 OFFSET:125668057  
row group 14:               RC:1617743 TS:157973949 OFFSET:134217728
这是已知的bug吗?如何在Spark中设置拼花地板块大小(行组大小)

编辑:
Spark应用程序所做的是:它读取一个大的AVRO文件,然后通过两个分区键(使用select中的
distribute by
)分配行,然后使用:

DF.write.partitionBy().parquet()

您的RDD可能会被不均匀地分割。每个块中的行数与RDD的不同分区的大小有关

在创建RDD时,每个分区包含的数据量大致相同(这是由于数据量不同)。在处理Spark作业之后,一个分区可能比另一个分区包含更多的数据,可能过滤器转换从一个分区中删除的行比从另一个分区中删除的行更多。在写入拼花地板文件之前,可以通过调用重新平衡分区

编辑:如果问题与分区无关,则减小行组的大小可能有助于:

sc.hadoopConfiguration.setInt(“parquet.block.size”,blockSize)

这有一个已知的错误:

我使用了13名遗嘱执行人。是否可能,节点本地行进入大行组,来自每个执行器的远程读取进入单独的行组?您是否能够解决问题或找到解决方法?否,我无法找到解决方法Yet请查看我的编辑。RDD在写入操作之前被重新分区。您可以尝试更改块大小(请参见我的编辑),但我不知道这是否会解决内存不足问题此设置适用于具有一些示例数据的开发集群。如果我在我的实际应用程序中使用它,不幸的是它不会影响任何东西。。。是否从某个地方重写了此配置?是否可以检查在创建DataFrameWriter(
DF.repartition(13.write.partitionBy…
)之前调用时会发生什么情况?