Процессор PutHiveStreaming в нифи бросает NPE - PullRequest
0 голосов
/ 25 января 2019

Я отлаживаю HiveProcessor, который следует за официальным процессором PutHiveStreaming, но пишет в Hive 2.x вместо 3.x. Поток работает в кластере Nifi 1.7.1. Хотя это исключение происходит, данные все еще записываются в Hive.

Исключение составляет:


java.lang.NullPointerException: null
    at org.apache.hadoop.hive.ql.security.authorization.plugin.AuthorizationMetaStoreFilterHook.getFilteredObjects(AuthorizationMetaStoreFilterHook.java:77)
    at org.apache.hadoop.hive.ql.security.authorization.plugin.AuthorizationMetaStoreFilterHook.filterDatabases(AuthorizationMetaStoreFilterHook.java:54)
    at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.getDatabases(HiveMetaStoreClient.java:1147)
    at org.apache.hive.hcatalog.common.HiveClientCache$CacheableHiveMetaStoreClient.isOpen(HiveClientCache.java:471)
    at sun.reflect.GeneratedMethodAccessor1641.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.invoke(RetryingMetaStoreClient.java:169)
    at com.sun.proxy.$Proxy308.isOpen(Unknown Source)
    at org.apache.hive.hcatalog.common.HiveClientCache.get(HiveClientCache.java:270)
    at org.apache.hive.hcatalog.common.HCatUtil.getHiveMetastoreClient(HCatUtil.java:558)
    at org.apache.hive.hcatalog.streaming.AbstractRecordWriter.<init>(AbstractRecordWriter.java:95)
    at org.apache.hive.hcatalog.streaming.StrictJsonWriter.<init>(StrictJsonWriter.java:82)
    at org.apache.hive.hcatalog.streaming.StrictJsonWriter.<init>(StrictJsonWriter.java:60)
    at org.apache.nifi.util.hive.HiveWriter.lambda$getRecordWriter$0(HiveWriter.java:91)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
    at org.apache.nifi.util.hive.HiveWriter.getRecordWriter(HiveWriter.java:91)
    at org.apache.nifi.util.hive.HiveWriter.<init>(HiveWriter.java:75)
    at org.apache.nifi.util.hive.HiveUtils.makeHiveWriter(HiveUtils.java:46)
    at org.apache.nifi.processors.hive.PutHive2Streaming.makeHiveWriter(PutHive2Streaming.java:1152)
    at org.apache.nifi.processors.hive.PutHive2Streaming.getOrCreateWriter(PutHive2Streaming.java:1065)
    at org.apache.nifi.processors.hive.PutHive2Streaming.access$1000(PutHive2Streaming.java:114)
    at org.apache.nifi.processors.hive.PutHive2Streaming$1.lambda$process$2(PutHive2Streaming.java:858)
    at org.apache.nifi.processor.util.pattern.ExceptionHandler.execute(ExceptionHandler.java:127)
    at org.apache.nifi.processors.hive.PutHive2Streaming$1.process(PutHive2Streaming.java:855)
    at org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2211)
    at org.apache.nifi.controller.repository.StandardProcessSession.read(StandardProcessSession.java:2179)
    at org.apache.nifi.processors.hive.PutHive2Streaming.onTrigger(PutHive2Streaming.java:808)
    at org.apache.nifi.processors.hive.PutHive2Streaming.lambda$onTrigger$4(PutHive2Streaming.java:672)
    at org.apache.nifi.processor.util.pattern.PartialFunctions.onTrigger(PartialFunctions.java:114)
    at org.apache.nifi.processor.util.pattern.RollbackOnFailure.onTrigger(RollbackOnFailure.java:184)
    at org.apache.nifi.processors.hive.PutHive2Streaming.onTrigger(PutHive2Streaming.java:672)
    at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1165)
    at org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:203)
    at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:117)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Мне также нравится воспроизводить ошибку. Может ли TestRunners.newTestRunner(processor); найти его? Я имею в виду тестовый пример для Hive 3.x https://github.com/apache/nifi/blob/ea9b0db2f620526c8dd0db595cf8b44c3ef835be/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/test/java/org/apache/nifi/processors/hive/TestPutHiveStreaming.java

Другой способ - запустить Hive 2.x и контейнер Nifi локально. Но затем мне нужно запустить docker cp, чтобы скопировать пакет nar с помощью mvn, и подключить удаленную JVM из intellij, как описано в этом блоге. https://community.hortonworks.com/articles/106931/nifi-debugging-tutorial.html

Кто-то делал подобное? или есть более простой способ отладки собственного процессора?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

NPE не отображается после того, как hcatalog.hive.client.cache.disabled установлено в true

Kafka Connect также рекомендует этот параметр.

от Kafka Connect Doc https://docs.confluent.io/3.0.0/connect/connect-hdfs/docs/hdfs_connector.html

Поскольку задачи коннектора долго выполняются, соединения с метастазами Hive остаются открытыми, пока задачи не будут остановлены. В Улей по умолчанию конфигурации, переподключение к Hive metastore создает новый подключение. Когда количество задач велико, возможно, что повторные попытки могут привести к тому, что количество открытых соединений превысит максимальное разрешенные соединения в операционной системе. Таким образом, рекомендуется установите для hcatalog.hive.client.cache.disabled значение true в hive.xml.

Когда Max Concurrent Tasks из PutHiveStreaming установлено более чем в 1, это свойство автоматически устанавливается как ложное

Также документ от Nifi уже решил проблему.

NiFi PutHiveStreaming имеет пул соединений, поэтому многопоточный; Установка hcatalog.hive.client.cache.disabled в true позволит каждому соединению установить свой собственный сеанс, не полагаясь на кеш.

исх: https://community.hortonworks.com/content/supportkb/196628/hive-client-puthivestreaming-fails-against-partiti.html

0 голосов
/ 27 января 2019

Это ошибка красной сельди, есть некоторая проблема на стороне Hive, когда он не может получить свой собственный IP-адрес или имя хоста, и в результате периодически выдает эту ошибку. Однако я не думаю, что это вызывает какие-либо реальные проблемы, поскольку вы сказали, что данные записываются в Hive.

Просто для полноты, в Apache NiFi PutHiveStreaming создан для работы с Hive 1.2.x, а не с Hive 2.x. В настоящее время нет конкретных процессоров Hive 2.x, мы никогда не определяли, работают ли процессоры Hive 1.2.x с Hive 2.x.

Для отладки, если вы можете запустить Hive в контейнере и открыть порт метастаза (я полагаю, по умолчанию - 9083), тогда вы сможете создать интеграционный тест, используя такие вещи, как TestRunners, и запускать NiFi локально с вашего IDE. Так выполняются другие интеграционные тесты для внешних систем, таких как, например, MongoDB или Elasticsearch.

В наборе тестов Hive есть класс MiniHS2 для интеграционного тестирования, но его нет в опубликованном артефакте, поэтому, к сожалению, нам осталось провести тесты на реальном экземпляре Hive.

...