这里,我有python实用程序,可以使用Pyarrow库为单个数据集创建多个镶木文件,因为数据集的大小一天之内很大。这里的实木复合地板文件在每个拆分实木复合地板文件中均包含10K实木复合地板行组,最后,我们将拆分的文件组合为一个文件,以创建一个大型的单个实木复合地板文件。在这里,我正在创建两个具有合并文件和多个拆分文件的Impala表。
当拆分文件数据加载到Impala表中并尝试查询时,结果很快就会在几秒钟内出现,但是在单个合并的镶木地板文件上创建Impala表时。与提到的拆分文件Impala表相比,它将带来性能问题。尝试计算Impala表的统计信息时,我无法识别这两个表之间的差异。
任何想法,为什么这种性能行为在多拼花实木复合地板文件Impala表和单合并拼合文件Impala表之间存在差异。
答案 0 :(得分:1)
从历史上看,大型Parquet文件具有良好的Parquet性能。但是,实际上,良好的性能不是大文件的结果,而是大行组(最大为HDFS块大小)的结果。
将行组一个接一个地合并而不合并它们不会显着改变Spark性能,但会使Impala变慢很多。
主题中的一些JIRA-s
除了合并较小的Parquet文件外,您可以做的是将新数据放在效率较低的单独表中(文本文件,Avro或许多小型Parquet文件),然后使用Hive,Spark或Impala查询该表的内容并将其批量插入生产表。这将创建具有有效行组大小的适当大小的Parquet文件。