我有多个小parquet
文件生成为hive ql作业的输出,我想将输出文件合并到单个镶木地板文件中?
使用某些hdfs or linux commands
进行此操作的最佳方式是什么?
我们曾经使用cat
命令合并文本文件,但这对于镶木地板也适用吗?
在使用HiveQL
中的repartition
或coalesc
方法编写输出文件时,我们可以使用spark
本身吗?
答案 0 :(得分:11)
根据这个https://issues.apache.org/jira/browse/PARQUET-460 现在您可以下载源代码并编译使用merge命令构建的镶木地板工具。
java -jar ./target/parquet-tools-1.8.2-SNAPSHOT.jar merge /input_directory/
/output_idr/file_name
这样的工具
答案 1 :(得分:3)
如果您的执行引擎是HiveQL
,您也可以使用mapreduce
本身来执行此操作。
您可以为查询设置一个标志,这会导致配置单元在作业结束时合并小文件:
SET hive.merge.mapredfiles=true;
或
SET hive.merge.mapfiles=true;
如果您的工作是仅限地图的工作。
这将导致hive作业自动将许多小的镶木地板文件合并为更少的大文件。您可以通过调整hive.merge.size.per.task
设置来控制输出文件的数量。如果您只想拥有一个文件,请确保将其设置为始终大于输出大小的值。另外,请务必相应地调整hive.merge.smallfiles.avgsize
。如果要确保hive始终合并文件,请将其设置为非常低的值。您可以在配置单元documentation中详细了解此设置。