Nifi java.lang.NoSuchMethodError: org.apache.hadoop.conf.Con



我正在点击此链接设置 Nifi putHDFS 以写入 Azure Data Lake.从 NiFi 数据流连接到 Azure Data Lake。

Nifi 位于 HDF 3.1 VM 中,Nifi 版本为 1.5。

我们从HD Insight(v 3.6,支持hadoop 2.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 中(集群中只有 1 台主机)。并且 putHDFS 配置(图片)如附件(与上面的链接完全相同)putHDFS 属性。

但是在nifi日志中,我们得到了这个:

由: java.lang.NoSuchMethodError: org.apache.hadoop.conf.Configuration.reloadExistingConfigurations()V at org.apache.hadoop.fs.adl.AdlConfKeys.addDeprecatedKeys(

AdlConfKeys.java:112) at org.apache.hadoop.fs.adl.AdlFileSystem.(AdlFileSystem.java:92) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at org.apache.nifi.processor.hadoop.AbstractHadoopProcessor$ExtendedConfiguration.getClassByNameOrNull(AbstractHadoopProcessor.java:490) at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2099) at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2193) at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2654) at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2667) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370) at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:172) at org.apache.nifi.processor.hadoop.AbstractHadoopProcessor$1.run(AbstractHadoopProcessor.java:322) at org.apache.nifi.processor.hadoop.AbstractHadoopProcessor$1.run(AbstractHadoopProcessor.java:319) atjava.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) at org.apache.nifi.processor.hadoop.AbstractHadoopProcessor.getFileSystemAsUser(AbstractHadoopProcessor.java:319) at org.apache.nifi.processor.hadoop.AbstractHadoopProcessor.resetHDFSResources(AbstractHadoopProcessor.java:281) atorg.apache.nifi.processor.hadoop.AbstractHadoopProcessor.abstractOnScheduled(AbstractHadoopProcessor.java:205) ...省略 16 个常见帧

AdlConfKeys 类来自上面的 hadoop-azure-datalake.jar 文件。从上面的异常来看,在我看来,这个AdlConfKeys正在加载一个旧版本的org.apache.hadoop.conf.Configuration类,它没有reloadExistingConfiguration方法。但是,我们无法找到这个旧类的加载位置。这个HDF 3.1在多个位置都有hadoop-common-XXXX.jar,所有在2.7版本的东西都有org.apache.hadoop.conf.Configuration包含方法reloadExistingConfiguration,只有那些在2.3版本没有这种方法。(我反编译了 2.7 和 2.3 jar 以找出答案)

[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-common jar 文件或其他包含 Configuration 类的东西没有方法 reloadExistingConfiguration()。我们也没有将任何自定义的 Nar 文件部署到 Nifi,一切都是 HDF 3.1 在 Nifi 上默认的。

请指教。我已经花了一整天的时间,但无法解决问题。感谢您的帮助。

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

如果您查看 2.7.3 中的 Configuration 类,则没有"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

相关内容

最新更新