2016-08-04 2 views
0

Я пытаюсь ввести несколько операторов вставки в PutHiveQL с помощью процессора ReplaceText. Каждый оператор insert является файлом потока, выходящим из ReplaceText. Я установил пакет в PutHiveQL равным 100. Однако, похоже, он по-прежнему отправляет ему 1 файл потока за раз. Как лучше всего реализовать эту партию?Как работает PutHiveQL в пакетном режиме?

ответ

2

Я не думаю, что процессор PutHiveQL пакетные заявления на уровне JDBC, как вы ожидаете, не так, как это делают процессоры, такие как PutSQL. From the code, похоже, что свойство Batch Size используется для управления количеством потоков, над которыми процессор работает, прежде чем уступить, но операторы для каждого файла потока все еще выполняются индивидуально.

Это может быть хорошей темой для NiFi feature request.

0

Версия Hive, поддерживаемая NiFi, не допускает докетирования/транзакций. Параметр «Размер партии» предназначен для того, чтобы попытаться переместить несколько файлов входящих потоков немного быстрее, чем частое обращение к процессору. Поэтому, если вы планируете процессор PutHiveQL каждые 5 секунд с размером партии 100, то каждые 5 секунд (если есть 100 файлов потока в очереди) процессор будет пытаться обрабатывать их во время одного сеанса.

В качестве альтернативы вы можете указать размер партии 0 или 1 и запланировать ее так быстро, как вам нравится; к сожалению, это не повлияет на сторону улья, поскольку оно автоматически компилирует каждую инструкцию HiveQL; версия Hive не поддерживает транзакции или пакетную обработку.

Другой (возможно, более производительный) альтернатива поставить весь набор строк в виде CSV-файла в HDFS и использовать оператор HiveQL «LOAD DATA» DML для создания таблицы в верхней части данных: https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-DMLOperations

Смежные вопросы