我正在按照此链接设置nifi puthdfs以写入azure数据湖。正在从nifi数据流连接到azure数据湖
nifi在hdf3.1vm中,nifi版本是1.5。
我们从hdinsight(v3.6,支持hadoop2.7)头节点得到了上面链接中提到的jar文件,这些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
它们被复制到hdf集群nifi主机的文件夹/usr/lib/hdinsight datalake中(集群中只有一台主机)。puthdfs config(picture)与puthdfs属性的附件(与上面的链接完全相同)。
但是在nifi日志中我们得到了:
原因:java.lang.nosuchmethoderror:org.apache.hadoop.conf.configuration.reloadexistingconfigurations()v at 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(类。java:348)在org.apache.nifi.processors.hadoop.abstracthadoopprocessor$extendedconfiguration.getclassbynameornull(抽象HadoopProcessor)。java:490)在org.apache.hadoop.conf.configuration.getclassbyname(配置。java:2099)在org.apache.hadoop.conf.configuration.getclass(configuration。java:2193)在org.apache.hadoop.fs.filesystem.getfilesystemclass(文件系统)。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:322)位于org.apache.nifi.processors.hadoop.abstracthadoopprocessor$1.run(abstracthadoopprocessor)。java:319)位于javax.security.auth.subject.doas(subject)的java.security.accesscontroller.doprivileged(本机方法)。java:422)在org.apache.hadoop.security.usergroupinformation.doas(用户组信息。java:1698)位于org.apache.nifi.processors.hadoop.abstracthadoopprocessor.getfilesystemasser(abstracthadoopprocessor)。java:319)在org.apache.nifi.processors.hadoop.abstracthadoopprocessor.resethdfsresources(abstracthadoopprocessor)上。java:281)在org.apache.nifi.processors.hadoop.abstracthadoopprocessor.abstractonscheduled(抽象HadoopProcessor)。java:205) ... 省略16个公共框架
adlconfkeys类来自上面的hadoop-azure-datalake.jar文件。从上面的异常中,我觉得这个adlconfkeys加载的是org.apache.hadoop.conf.configuration类的旧版本,它没有reloadexistingconfigurations方法。但是,我们无法找到从何处加载这个旧类。这个HDF3.1在多个位置有hadoop-common-x.jar,2.7something上的所有配置都有org.apache.hadoop.conf.configuration,其中包含方法reloadexistingconfigurations,只有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
所以我真的不知道nifi是如何找到一个hadoop公共jar文件的,或者其他包含configuration类的东西没有方法reloadexistingconfigurations()。我们也没有任何定制的nar文件部署到nifi上,所有东西都是hdf3.1在nifi上的默认值。
请告知。我花了一整天的时间在这个问题上,但解决不了这个问题。谢谢你的帮助。
1条答案
按热度按时间wmvff8tz1#
我认为你使用的azurejar需要比nifi使用的2.7.3版本更新的hadoop common版本。
如果查看2.7.3中的配置类,则没有“reloadexistingconfiguration”方法:
https://github.com/apache/hadoop/blob/release-2.7.3-rc2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/configuration.java
它似乎是在2.8.x期间引入的:
https://github.com/apache/hadoop/blob/release-2.8.3-rc0/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/configuration.java