运行 NiFi 所需的 Hadoop 配置是啥?

Posted

技术标签:

【中文标题】运行 NiFi 所需的 Hadoop 配置是啥?【英文标题】:What are the required Hadoop configurations for running NiFi?运行 NiFi 所需的 Hadoop 配置是什么? 【发布时间】:2018-11-29 17:28:13 【问题描述】:

我们已将 nifi(HDF 服务)安装到现有的 HDP。安装成功,我可以运行 nifi 没有任何错误。但是我在 PutHDFS 中遇到了一个问题

2018-06-20 12:00:14,246 WARN [StandardProcessScheduler Thread-6] org.apache.hadoop.conf.Configuration /tmp/core-site.xml:an attempt to override final parameter: fs.defaultFS;  Ignoring.
2018-06-20 12:00:14,248 ERROR [StandardProcessScheduler Thread-6] o.apache.nifi.processors.hadoop.PutHDFS PutHDFS[id=11a40827-0164-1000-ffff-ffffb07a04d9] HDFS Configuration error - java.net.ConnectException: Connection refused: 
java.net.ConnectException: Connection refused
        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
        at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
        at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)
        at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:495)
        at org.apache.nifi.processors.hadoop.AbstractHadoopProcessor.checkHdfsUriForTimeout(AbstractHadoopProcessor.java:345)
        at org.apache.nifi.processors.hadoop.AbstractHadoopProcessor.resetHDFSResources(AbstractHadoopProcessor.java:260)
        at org.apache.nifi.processors.hadoop.AbstractHadoopProcessor.abstractOnScheduled(AbstractHadoopProcessor.java:205)
        at sun.reflect.GeneratedMethodAccessor728.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.nifi.util.ReflectionUtils.invokeMethodsWithAnnotations(ReflectionUtils.java:137)
        at org.apache.nifi.util.ReflectionUtils.invokeMethodsWithAnnotations(ReflectionUtils.java:125)
        at org.apache.nifi.util.ReflectionUtils.invokeMethodsWithAnnotations(ReflectionUtils.java:70)
        at org.apache.nifi.util.ReflectionUtils.invokeMethodsWithAnnotation(ReflectionUtils.java:47)
        at org.apache.nifi.controller.StandardProcessorNode$1.call(StandardProcessorNode.java:1334)
        at org.apache.nifi.controller.StandardProcessorNode$1.call(StandardProcessorNode.java:1330)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
2018-06-20 12:00:14,248 ERROR [StandardProcessScheduler Thread-6] org.apache.nifi.engine.FlowEngine A flow controller task execution stopped abnormally
java.util.concurrent.ExecutionException: java.lang.reflect.InvocationTargetException
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
        at org.apache.nifi.engine.FlowEngine.afterExecute(FlowEngine.java:100)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1150)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException: null

我也附上了截图。

【问题讨论】:

您能否验证您为属性Hadoop Configuration Resources 提供的hdfs-site.xmlcore-site.xml 是否正确? 我很确定他们是正确的。你能告诉我应该特别检查什么吗?因为使用 Ambari 本身提供的默认属性,集群运行良好 你能显示处理器的配置屏幕吗? @BryanBende 我已附上图片。而且我知道您可能会怀疑我没有在配置中提供 hdfs-site.xml 和 core-site.xml 的路径,这是因为我已将这些文件复制到 /usr/hdf/current/nifi/lib (这意味着我不需要明确提供路径) @Abhinav 虽然确实将它们复制到 lib 中确实将其放在了 nifi 的全局类路径中,但它不能保证在捆绑在 hadoop 客户端 jar 中的任何默认值之前拾取它们,我建议在处理器中设置属性 【参考方案1】:

正如@BryanBende 所说,你得到一个 java.net.ConnectException: Connection denied,所以它似乎与 Hadoop 机器中的安全配置有关,与 NiFi 本身无关,尝试连接 Hadoop 客户端。

有关此类错误的信息:

Hadoop cluster setup - java.net.ConnectException: Connection refused

https://wiki.apache.org/hadoop/ConnectionRefused

【讨论】:

但它也指出存在一些 Hadoop 配置错误。但是我的所有服务都已启动并运行,那么为什么只有 Ni-Fi 服务无法正常工作? 来自 NiFi 机器的 hadoop 客户端是否能够连接到 hadoop?我看到你正在使用 netgear.slave.com,Nifi 机器是用私有 IP 解析这个 IP 还是使用公共 IP?在这种情况下,您可能会遇到路由问题。所以从我的角度来看,首先你需要尝试检查两台机器之间是否有连接以及如何连接,然后检查端口是否打开(你说是)并且允许Nifi机器访问它。

以上是关于运行 NiFi 所需的 Hadoop 配置是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Cygwin 中运行(而不是编译)Linux 环境 C 程序所需的唯一软件包是啥?

计算机中执行程序所需的时钟周期数和执行时间的区别是啥

hadoop fs -mkdir没有创建所需的文件夹

Kendo Scheduler 所需的数据源是啥,“from”是啥?

Hadoop 计算所有拆分中所需的术语

带有 Ambari 的 NiFi 集群 - 维护的最佳实践是啥?