如何使用linux或hdfs命令将多个镶木地板文件合并到单个镶木地板文件?

时间:2016-07-27 10:49:09

标签: hdfs parquet

我有多个小parquet文件生成为hive ql作业的输出,我想将输出文件合并到单个镶木地板文件中?

使用某些hdfs or linux commands进行此操作的最佳方式是什么?

我们曾经使用cat命令合并文本文件,但这对于镶木地板也适用吗? 在使用HiveQL中的repartitioncoalesc方法编写输出文件时,我们可以使用spark本身吗?

2 个答案:

答案 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

或使用像https://github.com/stripe/herringbone

这样的工具

答案 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中详细了解此设置。