web-dev-qa-db-ja.com

Linuxまたはhdfsコマンドを使用して、複数の寄木細工ファイルを単一の寄木細工ファイルにマージする方法

Hive qlジョブの出力として生成された複数の小さなparquetファイルがあります。出力ファイルを1つの寄木細工のファイルにマージしますか?

いくつかのhdfs or linux commandsを使用してそれを行うための最良の方法は何ですか?

以前はcatコマンドを使用してテキストファイルをマージしていましたが、これは寄木細工でも機能しますか? HiveQLrepartitionまたはcoalescメソッドを使用する方法のように、出力ファイルを書き込むときにspark自体を使用してそれを実行できますか?

12
Shankar

これによると 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 のようなツールを使用する

15
giaosudau

実行エンジンが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 を参照してください。

5
Jakub Kukul