您的位置:首页 > 博客中心 > 网络系统 >

Hadoop启动不了Namenode进程,出现IllegalArgumentException异常

时间:2022-04-03 10:34

这次的问题乍看起来很奇怪,在本机完成配置启动Hadoop的时候,首先,我们需要对namenode进行format,但是在执行了命令之后,却出现了如下的异常:FATAL namenode.NameNode: Exception in namenode join java.lang.IllegalArgumentException: URI has an authority component。别的不管,就冲着这个 authority,我义无反顾地在 format命令前加上了 sudo,结果发现…………木有起到半点作用。 那么,直接跳过format环节执行start-all呢?结果看起来有点神奇,几个进程居然还都跑起来了。不过明眼一看……怪了,唯独没有namenode进程(如下图所示)。通过namenode上50070端口的 Web UI也发现无法打开网页。于是查看namenode的log文件,发现又出现了上述的IllegalArgumentException异常;而在datanode的log文件里,也发现了一大串Retrying connect to server。嗯……好吧……看来得耗上了。 经过几番查找、尝试,终于发现了问题的原因。这个异常的出现主要与这么两个文件有关:core-site.xml和hdfs-site.xml。想必进行过Hadoop配置的人对这两个文件都有着很深的印象,而这两个文件中,与本问题关系最直接的就是这么几个Property: [html] view plaincopy在code上查看代码片派生到我的代码片 在core-site.xml里,我们配置了hadoop.tmp.dir属性,以我这里的配置为例:hadoop.tmp.dirfile:/home/hdusr/hadoop-2.2.0/tmp/[html] view plaincopy在code上查看代码片派生到我的代码片 在hdfs-site.xml里,我们通过如下的方式使用了hadoop.tmp.dir的属性值(以下的写法也是Hadoop 2.2中hdfs-site的默认配置值):dfs.namenode.name.dirfile://${hadoop.tmp.dir}/dfs/namedfs.datanode.data.dirfile://${hadoop.tmp.dir}/dfs/data这样的配置看似没有什么大的问题,而且还包含着${hadoop.tmp.dir}这种高端大气上档次的灵活性写法。但问题就出在了这里,经过实际操作确认,如果我们用这种变量式的方法对hdfs-site文件中的属性进行配置就会出现关于URI的权限问题。个人猜测可能因为Hadoop安装在hdusr目录,所以启动hadoop服务过程中,对hdfs-site文件进行载入时,解析变量式配置信息的中间过程遇到了权限问题(在下对Linux实在是菜鸟中的菜鸟,止步于此,不敢多加妄言)。。 总而言之,IllegalArgumentException出现在本人的这种配置情况中时,可以通过把hdfs-site.xml修改为如下形式解决。 [html] view plaincopy在code上查看代码片派生到我的代码片 为了解决这个出现的异常,我们把hdfs-site.xml中的以下两个属性修改为:dfs.namenode.name.dirfile:/home/hdusr/hadoop-2.2.0/tmp/dfs/name(即使用完整的绝对地址)dfs.datanode.data.dirfile:/home/hdusr/hadoop-2.2.0/tmp/dfs/name(即使用完整的绝对地址)进过对hdfs-site.xml文件的修改后,终于……namenode成功格式化,并且也能够正常启动Hadoop服务,启动后的进程显示见下图。 以上只是本人作为菜鸟的一些不成熟的见解,所言不实之处还请见谅,望各位高人指点,感激不尽。

本类排行

今日推荐

热门手游