2016-08-04 52 views
0

我想通過ReplaceText處理器向PutHiveQL輸入多個插入語句。每個插入語句都是從ReplaceText出來的一個流文件。我將PutHiveQL中的批次設置爲100.但是,它似乎仍然一次發送1個流文件。如何最好地實施這批?PutHiveQL如何在批處理上工作?

回答

2

我不認爲PutHiveQL處理器按照您的期望在JDBC層上批語句,而不像PutSQL這樣的處理器。 From the code,看起來批量大小屬性用於控制處理器在產生之前處理的流文件數量,但每個流文件的語句仍然單獨執行。

對於NiFi feature request這可能是一個好主題。

0

由NiFi支持的Hive版本不允許進行配料/交易。批處理大小參數旨在嘗試將多個傳入流文件移動得比處理器每隔一段時間調用一次更快。因此,如果您每隔5秒調度一次PutHiveQL處理器,其批處理大小爲100,那麼每5秒(如果有100個流文件排隊),處理器將嘗試在一個「會話」期間處理這些處理。

或者,您可以指定0或1的批量大小,並按照您的喜好快速安排它;不幸的是,這對Hive方面沒有任何影響,因爲它會自動提交每個HiveQL語句; Hive的版本不支持事務或批處理。

另一個(可能更好的性能),另一種方法是把整個一套行作爲一個CSV文件導入HDFS和使用HiveQL「LOAD DATA」 DML語句對數據的頂部創建一個表:https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-DMLOperations