Azure Nifi java.lang.NoSuchMethodError:org.apache.hadoop.conf.Configuration.reloadExistingConfigurations

Azure Nifi java.lang.NoSuchMethodError:org.apache.hadoop.conf.Configuration.reloadExistingConfigurations,azure,hadoop,apache-nifi,hdf,Azure,Hadoop,Apache Nifi,Hdf,我按照此链接设置Nifi putHDFS以写入Azure Data Lake Nifi在HDF 3.1虚拟机中,Nifi版本为1.5 我们从HD Insight(支持hadoop 2.7的V3.6)头节点获得了上面链接中提到的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

我按照此链接设置Nifi putHDFS以写入Azure Data Lake

Nifi在HDF 3.1虚拟机中,Nifi版本为1.5

我们从HD Insight(支持hadoop 2.7的V3.6)头节点获得了上面链接中提到的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配置(图片)如附件所示(与上面的链接完全相同)

但在nifi日志中,我们看到:

原因: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.hadoop.nifi.processors.hadoop.AbstractHadoopProcessor$ExtendedConfiguration.getClassByNameOrNull(AbstractHadoopProcessor.java:490)在org.apache.hadoop.conf.conf.getClassByName(Configuration.java:2099)在org.apache.hadoop.fs.FileSystem.getFileSystemClass(Configuration.java:2193)上(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:322)位于org.apache.nifi.processors.hadoop.AbstractHadoopProcessor$1.run(AbstractHadoopProcessor.java:319),位于java.security.AccessController.doPrivileged(Native Method),位于javax.security.auth.Subject.doAs(Subject.java:422),位于org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)位于org.apache.nifi.processors.hadoop.AbstractHadoopProcessor.GetFileSystemAsser(AbstractHadoopProcessor.java:319),位于org.apache.nifi.processors.hadoop.Processor.AbstractHadoopProcessor.resetHDFSResources(AbstractHadoopProcessor.java:281),位于org.apache.nifi.processors.hadoop.AbstractHadoopProcessor.AbstractHadoopProcessor.AbstractHadoopProcessor.Ab…省略了16个公共帧

AdlConfKeys类来自上面的hadoop-azure-datalake.jar文件。从上面的异常情况来看,这个AdlConfKeys似乎正在加载org.apache.hadoop.conf.Configuration类的旧版本,它没有reloadExistingConfigurations方法。但是,我们无法找到从何处加载这个旧类。这个HDF3.1在多个位置都有hadoop-common-XXXX.jar,2.7版上的所有东西都有org.apache.hadoop.conf.Configuration,其中包含重新加载现有配置的方法,只有2.3版上的没有这个方法。(我反编译了2.7和2.3 jar以找出答案)

(输出比下面多得多,但我删除了一些用于显示的内容,其中大多数在2.7上,只有2个在2.3版上):

因此,我真的不知道Nifi是如何找到hadoop公共jar文件的,或者其他包含配置类的文件没有方法reloadExistingConfigurations()。我们也没有任何定制的Nar文件部署到Nifi,所有东西都是Nifi上HDF 3.1的默认值


请提供建议。我花了一整天的时间来解决这个问题。感谢您的帮助。

我认为您使用的Azure JAR需要比NiFi使用的2.7.3版本更新的hadoop common版本

如果查看2.7.3中的配置类,则没有“reloadExistingConfiguration”方法:

它似乎是在2.8.x中的某个时间引入的:


我认为您使用的Azure JAR需要比NiFi使用的2.7.3版本更新的hadoop common版本

如果查看2.7.3中的配置类,则没有“reloadExistingConfiguration”方法:

它似乎是在2.8.x中的某个时间引入的:


Bryan感谢你的快速回复!你说得对。我遇到这个问题的原因是我不小心复制了3.0版的hadoop common jar(打开/反编译后发现它确实包含该方法)我认为这是我从HDF得到的2.7版本!让我试着将2.8版本一包括在我们的jar列表中,看看会发生什么。将更新。没问题。这将是困难的,因为NiFi的处理器包括2.7.3,所以即使您将2.8.x放入目录中,也可能无法确定它将找到哪个jar配置您可能最终需要构建自己的NiFi Hadoop NARs版本,将NiFi根pom中的Hadoop.version设置为2.8.3,但我不知道这是否会带来任何其他问题。再次感谢Bryan的进一步解释!是的,我尝试了我的运气,知道它可能不起作用…在NiFi库/b中添加了一个Hadoop-common-3.0.jarootstrap文件夹,不起作用;然后尝试将此jar与Azure jar文件合并,也不起作用。我猜这与Nifi加载类的方式有关,它将要求其父类加载程序首先找到该类,在这种情况下,父类将给出其类加载路径中的配置类的旧版本…Br谢谢你的快速回复!你是对的。我遇到这个问题的原因是我不小心复制了3.0版的hadoop common jar(打开/反编译后发现它确实包含该方法)我认为这是我从HDF得到的2.7版本!让我试着将2.8版本一包括在我们的jar列表中,看看会发生什么。将更新。没问题。这将是困难的,因为NiFi的处理器包括2.7.3,所以即使您将2.8.x放入目录中,也可能无法确定它将找到哪个jar配置定量配给课。你可能最终需要b
[root@NifiHost /]# find . -name *hadoop-common*
./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