此次的问题乍看起来很奇怪,在本机完成配置启动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服务,启动后的进程显示见下图。 以上只是本人做为菜鸟的一些不成熟的看法,所言不实之处还请见谅,望各位高人指点,感激涕零。