天天看点

Block pool ID needed, but service not yet registered with NN, trace

报错

Block pool ID needed, but service not yet registered with NN, trace
Failed to retrieve data from /webhdfs/v1/?op=LISTSTATUS: Server Error

查看日志关键部分:

Block pool ID needed, but service not yet registered with NN, trace

完整如下:

java.lang.Exception
  at org.apache.hadoop.hdfs.server.datanode.BPOfferService.getBlockPoolId(BPOfferService.java:214)
  at org.apache.hadoop.hdfs.server.datanode.BPOfferService.getBlockPoolId(BPOfferService.java:225)
  at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.getActorInfoMap(BPServiceActor.java:183)
  at org.apache.hadoop.hdfs.server.datanode.DataNode.getBPServiceActorInfo(DataNode.java:3167)
  at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
  at java.base/java.lang.reflect.Method.invoke(Method.java:577)
  at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:72)
  at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
  at java.base/java.lang.reflect.Method.invoke(Method.java:577)
  at java.base/sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:262)
  at java.management/com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:193)
  at java.management/com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:175)
  at java.management/com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:117)
  at java.management/com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:54)
  at java.management/com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
  at java.management/com.sun.jmx.mbeanserver.PerInterface.getAttribute(PerInterface.java:83)
  at java.management/com.sun.jmx.mbeanserver.MBeanSupport.getAttribute(MBeanSupport.java:206)
  at java.management/com.sun.jmx.mbeanserver.MBeanSupport.getAttributes(MBeanSupport.java:213)
  at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttributes(DefaultMBeanServerInterceptor.java:702)
  at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.getAttributes(JmxMBeanServer.java:706)
  at org.apache.hadoop.hdfs.server.common.MetricsLoggerTask.run(MetricsLoggerTask.java:93)
  at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
  at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
  at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
  at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
  at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)      

分析与解决

好像是版本原因,Hadoop Java 版本

  • Apache Hadoop 3.3 及更高版本支持 Java 8 和 Java 11
  • 从 3.0.x 到 3.2.x 的 Apache Hadoop 现在仅支持 Java 8
  • 从 2.7.x 到 2.10.x 的 Apache Hadoop 支持 Java 7 和 8

对应表:

Block pool ID needed, but service not yet registered with NN, trace

我的hadoop版本为3.2.4 ,java版本为18.0.2.1,我的版本太新了,因此需要降低版本。

删除:

Block pool ID needed, but service not yet registered with NN, trace

然后下载了版本jdk-13.0.2_linux-x64_bin,重新安装上去就好了,然后记得环境变量那里也改一下,因为原来是18。 如果不会,请参考:环境配置我已经修改环境变量如下:

Block pool ID needed, but service not yet registered with NN, trace