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

标签 azure hadoop apache-nifi hdf

我按照此链接设置 Nifi putHDFS 以写入 Azure Data Lake。 Connecting to Azure Data Lake from a NiFi dataflow

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 attributes .

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

Caused by: 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.processors.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.processors.hadoop.AbstractHadoopProcessor$1.run(AbstractHadoopProcessor.java:322) at org.apache.nifi.processors.hadoop.AbstractHadoopProcessor$1.run(AbstractHadoopProcessor.java:319) 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:1698) at org.apache.nifi.processors.hadoop.AbstractHadoopProcessor.getFileSystemAsUser(AbstractHadoopProcessor.java:319) at org.apache.nifi.processors.hadoop.AbstractHadoopProcessor.resetHDFSResources(AbstractHadoopProcessor.java:281) at org.apache.nifi.processors.hadoop.AbstractHadoopProcessor.abstractOnScheduled(AbstractHadoopProcessor.java:205) ... 16 common frames omitted

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 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类但没有方法reloadExistingConfigurations()的文件。我们也没有将任何自定义的 Nar 文件部署到 Nifi,一切都几乎是 Nifi 上 HDF 3.1 的默认设置。

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

最佳答案

我认为您使用的 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

关于azure - Nifi java.lang.NoSuchMethodError : org. apache.hadoop.conf.Configuration.reloadExistingConfigurations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49059136/

相关文章:

apache-nifi - 自动启用 Controller 服务 NiFi

具有触发计时器的 Azure Functions 不会在监视器下显示日志

linux - 如何加载这么大的 hadoop 文件?

azure - 使用 Terraform(或 ARM 模板)为 Webtest 创建 Azure 警报规则?

python - 从python hadoop映射器输出空白

hadoop - 格式无效 : "19690321" is too short

apache-nifi - 调试复杂 NiFi 数据流的理想方式

apache-nifi - Apache NIFI "Execute Processor"

azure - CMD 文件对于启动任务和通过 RDP 手动执行的 react 不同

git - 如何启用我的 Azure 管道以使用 Git checkout 子模块?