我一直在阅读有关该主题的几个问题,也阅读过多个论坛,在所有这些论坛中,他们似乎都提到从Spark产生的每个.parquet文件的大小应为64MB或1GB,但仍然可以我不介意哪种情况属于每种文件大小,其背后的原因除了HDFS将它们分成64MB的块。
我当前的测试方案如下。
dataset
.coalesce(n) # being 'n' 4 or 48 - reasons explained below.
.write
.mode(SaveMode.Append)
.partitionBy(CONSTANTS)
.option("basepath", outputPath)
.parquet(outputPath)
我目前总共处理2.5GB到3GB的每日数据,这些数据将被拆分并每年保存到每日存储桶中。
所以我的问题是...
如果我不打算使用HDFS,而只是从S3存储和检索数据,我应该考虑这么多的大小吗?
而且,如果我打算使用HDFS存储生成的.parquet文件,那应该是大约10GB 最大的每日数据集的最佳大小?
任何其他优化技巧都将不胜感激!
答案 0 :(得分:2)
您可以控制实木复合地板文件的拆分大小,前提是您使用可分割的压缩文件(如snappy)保存它们。对于s3a连接器,只需将fs.s3a.block.size
设置为不同的字节数。
较小的分割尺寸
小文件vs大文件
小文件:
spark.hadoop.fs.s3a.fast.upload true
,Hadoop 2.8+会这样做。个人,这是观点,是一些基准测试驱动的,但不是您的查询
写作
阅读
spark.hadoop.fs.s3a.experimental.fadvise random
.repartion()
保存到较大的文件。