Hive qlジョブの出力として生成された複数の小さなparquet
ファイルがあります。出力ファイルを1つの寄木細工のファイルにマージしますか?
いくつかのhdfs or linux commands
を使用してそれを行うための最良の方法は何ですか?
以前はcat
コマンドを使用してテキストファイルをマージしていましたが、これは寄木細工でも機能しますか? HiveQL
でrepartition
またはcoalesc
メソッドを使用する方法のように、出力ファイルを書き込むときにspark
自体を使用してそれを実行できますか?
これによると https://issues.Apache.org/jira/browse/PARQUET-46 これで、ソースコードをダウンロードして、mergeコマンドに組み込まれているparquet-toolsをコンパイルできます。
Java -jar ./target/parquet-tools-1.8.2-SNAPSHOT.jar merge /input_directory/
/output_idr/file_name
または https://github.com/stripe/herringbone のようなツールを使用する
実行エンジンがHiveQL
の場合は、mapreduce
自体を使用して行うこともできます。
クエリにフラグを設定できます。これにより、Hiveはジョブの最後に小さなファイルをマージします。
SET Hive.merge.mapredfiles=true;
または
SET Hive.merge.mapfiles=true;
あなたの仕事が地図のみの仕事なら。
これにより、Hiveジョブは自動的に多くの小さな寄木細工のファイルを少数の大きなファイルにマージします。 Hive.merge.size.per.task
設定を調整することで、出力ファイルの数を制御できます。ファイルを1つだけにしたい場合は、出力のサイズより常に大きい値に設定してください。また、Hive.merge.smallfiles.avgsize
も適宜調整してください。 Hiveが常にファイルをマージするようにする場合は、非常に低い値に設定します。この設定の詳細については、Hive documentation を参照してください。