我试图通过ReplaceText处理器向PutHiveQL输入多个insert语句。每个insert语句都是来自ReplaceText的流文件。我将PutHiveQL中的批处理设置为100.但是,它似乎仍然一次发送1个流文件。如何最好地实施这批次?
答案 0 :(得分:2)
我认为PutHiveQL处理器并不像你期望的那样在JDBC层批量处理语句,而不像PutSQL这样的处理器那样。 From the code,看起来Batch Size属性用于控制处理器在产生之前处理的流程文件数,但每个流文件的语句仍然是单独执行的。
这可能是NiFi feature request的一个好主题。
答案 1 :(得分: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 < / p>