2016-07-27 17 views
5

ハイブqlジョブの出力として複数の小さなparquetファイルが生成されました。出力ファイルを1つの寄木張りファイルにマージしますか?largeコマンドまたはhdfsコマンドを使用して、複数のパーケットファイルを1つのパーケットファイルにマージする方法はありますか?

hdfs or linux commandsを使用して行う最良の方法は何ですか?

私たちはcatコマンドを使ってテキストファイルをマージしましたが、これは寄木張りにも使えますか? repartitionまたはcoalescメソッドをsparkに使用して出力ファイルを書き込むときに、HiveQLを使用してそれを行うことはできますか?

答えて

7

この通りhttps://issues.apache.org/jira/browse/PARQUET-460 ソースコードをダウンロードして、マージコマンドで作成された寄木張りツールをコンパイルできます。

java -jar ./target/parquet-tools-1.8.2-SNAPSHOT.jar merge /input_directory/ 
     /output_idr/file_name 

またはあなたの実行エンジンがmapreduceある場合にも、それは、自分自身をHiveQLを使用して行うことができhttps://github.com/stripe/herringbone

+0

どこでも瓶をダウンロードできますか?これを構築するのは苦痛です。 – samthebest

0

などのツールを使用して。

あなたはあなたの仕事の終わりに小さなファイルをマージするハイブ原因クエリのためのフラグを設定することができます。

SET hive.merge.mapredfiles=true; 

または

SET hive.merge.mapfiles=true; 

あなたの仕事は、マップ専用の場合ジョブ。

これは、ハイブジョブが自動的に多くの小さな寄木細工ファイルを少数の大きなファイルにマージさせる原因になります。 hive.merge.size.per.taskの設定を調整することで、出力ファイルの数を制御できます。 1つのファイルしか持たない場合は、出力のサイズより常に大きな値に設定してください。また、それに応じてhive.merge.smallfiles.avgsizeを調整してください。ハイブが常にファイルをマージするようにするには、非常に低い値に設定します。ハイブdocumentationでこの設定の詳細を読むことができます。

関連する問題