Я перехожу по этой ссылке, чтобы настроить Nifi putHDFS для записи в Azure Data Lake. nifi-dataflow.html" rel="nofollow noreferrer">Подключение к Azure Data Lake из потока данных NiFi
Nifi находится в виртуальной машине HDF 3.1, а версия Nifi — 1.5.
Мы получили файлы jar, упомянутые в приведенной выше ссылке, из головного узла HD Insight (v 3.6, который поддерживает Hadoop 2.7), эти jar-файлы:
adls2-oauth2-token-provider-1.0.jar
azure-data-lake-store-sdk-2.1.4.jar
hadoop-azure-datalake.jar
jackson-core-2.2.3.jar
okhttp-2.4.0.jar
okio-1.4.0.jar
И копируются в папку /usr/lib/hdinsight-datalake хоста HDF кластера Nifi (у нас в кластере всего 1 хост). И конфигурация putHDFS (изображение) прикреплена (точно так же, как ссылка выше) атрибуты putHDFS.
Но в журнале нифи мы получаем это:
Вызвано: java.lang.NoSuchMethodError: org.apache.hadoop.conf.Configuration.reloadExistingConfigurations()V в org.apache.hadoop.fs.adl.AdlConfKeys.addDeprecatedKeys(AdlConfKeys.java:112) в org.apache.hadoop .fs.adl.AdlFileSystem.(AdlFileSystem.java:92) в java.lang.Class.forName0(собственный метод) в java.lang.Class.forName(Class.java:348) в org.apache.nifi.processors. hadoop.AbstractHadoopProcessor$ExtendedConfiguration.getClassByNameOrNull(AbstractHadoopProcessor.java:490) в org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2099) в org.apache.hadoop.conf.Configuration.getClass(Configuration.java: 2193) в org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2654) в org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2667) в org.apache.hadoop.fs.FileSystem .get(FileSystem.java:370) в org.apache.hadoop.fs.FileSystem.get(FileSystem.java:172) в org.apache.nifi.processors.hadoop.AbstractHadoopProcessor$1.run(AbstractHadoopProcessor.java:3 22) в org.apache.nifi.processors.hadoop.AbstractHadoopProcessor$1.run(AbstractHadoopProcessor.java:319) в java.security.AccessController.doPrivileged(собственный метод) в javax.security.auth.Subject.doAs(Subject.java :422) в org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) в org.apache.nifi.processors.hadoop.AbstractHadoopProcessor.getFileSystemAsUser(AbstractHadoopProcessor.java:319) в org.apache.nifi. процессоры.hadoop.AbstractHadoopProcessor.resetHDFSResources(AbstractHadoopProcessor.java:281) в org.apache.nifi.processors.hadoop.AbstractHadoopProcessor.abstractOnScheduled(AbstractHadoopProcessor.java:205) ... 16 общих кадров пропущены
Класс AdlConfKeys взят из приведенного выше файла hadoop-azure-datalake.jar. Из приведенного выше исключения мне кажется, что AdlConfKeys загружает более старую версию класса org.apache.hadoop.conf.Configuration, в котором нет метода reloadExistingConfigurations. Однако мы не можем узнать, откуда загружается этот старый класс. Этот HDF 3.1 имеет hadoop-common-XXXX.jar в нескольких местах, все те, что в версии 2.7, имеют org.apache.hadoop.conf.Configuration, содержащий метод reloadExistingConfigurations, только те, что в версии 2.3, не имеют этого метода. (Я декомпилировал банки 2.7 и 2.3, чтобы узнать)
[root@NifiHost /]# find . -name *hadoop-common*
(вывод намного больше, чем показано ниже, однако я удалил некоторые из них для наглядности, большинство из них в версии 2.7, только 2 из них в версии 2.3):
./var/lib/nifi/work/nar/extensions/nifi-hadoop-libraries-nar-1.5.0.3.1.0.0-564.nar-unpacked/META-INF/bundled-dependencies/hadoop-common-2.7.3.jar
./var/lib/ambari-agent/cred/lib/hadoop-common-2.7.3.jar
./var/lib/ambari-server/resources.backup/views/work/WORKFLOW_MANAGER{1.0.0}/WEB-INF/lib/hadoop-common-2.7.3.2.6.2.0-205.jar
./var/lib/ambari-server/resources.backup/views/work/HUETOAMBARI_MIGRATION{1.0.0}/WEB-INF/lib/hadoop-common-2.3.0.jar
./var/lib/ambari-server/resources/views/work/HUETOAMBARI_MIGRATION{1.0.0}/WEB-INF/lib/hadoop-common-2.3.0.jar
./var/lib/ambari-server/resources/views/work/HIVE{1.5.0}/WEB-INF/lib/hadoop-common-2.7.3.2.6.4.0-91.jar
./var/lib/ambari-server/resources/views/work/CAPACITY-SCHEDULER{1.0.0}/WEB-INF/lib/hadoop-common-2.7.3.2.6.4.0-91.jar
./var/lib/ambari-server/resources/views/work/TEZ{0.7.0.2.6.2.0-205}/WEB-INF/lib/hadoop-common-2.7.3.2.6.2.0-205.jar
./usr/lib/ambari-server/hadoop-common-2.7.2.jar
./usr/hdf/3.1.0.0-564/nifi/ext/ranger/install/lib/hadoop-common-2.7.3.jar
./usr/hdf/3.0.2.0-76/nifi/ext/ranger/install/lib/hadoop-common-2.7.3.jar
Поэтому я действительно не знаю, как Нифи удалось найти общий файл jar для хаупа или что-то еще, содержащее класс конфигурации, не имеющий метода reloadExistingConfigurations(). У нас также нет никаких настраиваемых файлов Nar, развернутых в Nifi, все в значительной степени по умолчанию из того, что есть в HDF 3.1 на Nifi.
Пожалуйста, порекомендуйте. Я потратил целый день на это, но не могу решить проблему. Ценю твою помощь.