2016-08-04 4 views
0

ReplaceTextプロセッサ経由でPutHiveQLに複数のinsert文を入力しようとしています。各insert文は、ReplaceTextから出力されるフローファイルです。 PutHiveQLのバッチを100に設定しました。しかし、一度に1つのフローファイルを送信しているようです。このバッチを最適に実装するには?PutHiveQLはどのようにバッチで動作しますか?

答えて

2

PutHiveQLプロセッサは、PutSQLのようなプロセッサではなく、期待どおりにJDBCレイヤでステートメントをバッチ処理するとは思いません。 From the codeでは、Batch Sizeプロパティを使用して、降伏前にプロセッサが動作するフローファイルの数を制御するように見えますが、各フローファイルのステートメントは個別に実行されます。

これはNiFi feature requestのための良いトピックかもしれません。

0

NiFiでサポートされているHiveのバージョンでは、バッチ処理/トランザクションはできません。 Batch Sizeパラメータは、プロセッサが頻繁に呼び出されるよりも、複数の着信フローファイルを少し速く移動しようとするためのものです。したがって、Put HiveQLプロセッサをバッチサイズ100で5秒ごとにスケジューリングし、5秒ごとに(100個のフローファイルがキューに入れられている場合)、プロセッサは1つの「セッション」中にそれらを処理しようとします。

また、バッチサイズを0または1に指定し、好きなだけ速くスケジュールすることもできます。残念ながら、これは各HiveQLステートメントを自動コミットするので、事のハイブ側には何の影響も与えません。 Hiveのバージョンはトランザクションやバッチ処理をサポートしていません。

別の(おそらくよりパフォーマンス)の代替がHDFSにCSVファイルとして行のセット全体を入れて、データの上にテーブルを作成するHiveQL「LOADデータ」DMLステートメントを使用することです

https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-DMLOperations

関連する問題