无效的NameNode地址URI

10
我正在尝试建立一个包含主节点(包含namenode、secondarynamenode和jobtracker)和两个其他节点(包含datanode和tasktracker)的Cloudera Hadoop集群。Cloudera版本为4.6,操作系统为Ubuntu Precise x64。此外,该集群是从AWS实例创建的。已设置ssh无密码登录,并安装了Oracle-7 Java。每当我执行“sudo service hadoop-hdfs-namenode start”时,会出现以下错误信息:
2014-05-14 05:08:38,023 FATAL org.apache.hadoop.hdfs.server.namenode.NameNode: Exception in namenode join
java.lang.IllegalArgumentException: Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority.
        at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:329)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:317)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.getRpcServerAddress(NameNode.java:370)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.loginAsNameNodeUser(NameNode.java:422)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:442)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:621)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:606)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1177)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1241)

My core-site.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->
<configuration>
   <property>
      <name>fs.defaultFS</name>
      <value>hdfs://<master-ip>:8020</value>
   </property>
</configuration>

mapred-site.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->
<configuration>
   <property>
      <name>mapred.job.tracker</name>
      <value>hdfs://<master-ip>:8021</value>
   </property>
</configuration>

hdfs-site.xml:

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->
<configuration>
   <property>
      <name>dfs.replication</name>
      <value>2</value>
   </property>
   <property>
      <name>dfs.permissions</name>
      <value>false</value>
   </property>
</configuration>

我尝试使用公共IP私有IP公共DNSFQDN,但结果相同。 目录/etc/hadoop/conf.empty的外观如下:

-rw-r--r-- 1 root root   2998 Feb 26 10:21 capacity-scheduler.xml
-rw-r--r-- 1 root hadoop 1335 Feb 26 10:21 configuration.xsl
-rw-r--r-- 1 root root    233 Feb 26 10:21 container-executor.cfg
-rwxr-xr-x 1 root root    287 May 14 05:09 core-site.xml
-rwxr-xr-x 1 root root   2445 May 14 05:09 hadoop-env.sh
-rw-r--r-- 1 root hadoop 1774 Feb 26 10:21 hadoop-metrics2.properties
-rw-r--r-- 1 root hadoop 2490 Feb 26 10:21 hadoop-metrics.properties
-rw-r--r-- 1 root hadoop 9196 Feb 26 10:21 hadoop-policy.xml
-rwxr-xr-x 1 root root    332 May 14 05:09 hdfs-site.xml
-rw-r--r-- 1 root hadoop 8735 Feb 26 10:21 log4j.properties
-rw-r--r-- 1 root root   4113 Feb 26 10:21 mapred-queues.xml.template
-rwxr-xr-x 1 root root    290 May 14 05:09 mapred-site.xml
-rw-r--r-- 1 root root    178 Feb 26 10:21 mapred-site.xml.template
-rwxr-xr-x 1 root root     12 May 14 05:09 masters
-rwxr-xr-x 1 root root     29 May 14 05:09 slaves
-rw-r--r-- 1 root hadoop 2316 Feb 26 10:21 ssl-client.xml.example
-rw-r--r-- 1 root hadoop 2251 Feb 26 10:21 ssl-server.xml.example
-rw-r--r-- 1 root root   2513 Feb 26 10:21 yarn-env.sh
-rw-r--r-- 1 root root   2262 Feb 26 10:21 yarn-site.xml

slaves 列出了两台从属机的 IP地址

<slave1-ip>
<slave2-ip>

执行
update-alternatives --get-selections | grep hadoop
hadoop-conf                    auto     /etc/hadoop/conf.empty

我做了很多搜索,但没有找到任何能帮助我解决问题的东西。有人能提供一些线索吗?到底出了什么问题?

好的,我没有太多使用Cloudera的经验,但是为什么要使用fs.defaultFS而不是fs.default.name呢?我相信fs.defaultFS用于HDFS HA。 - Chandra kant
@Chandrakant,无论是 fs.defaultFS 还是 fs.default.name 都会导致失败。此外,在 Cloudera 页面上它说 fs.default.name 已经被弃用了。 - cybertextron
我知道 fs.default.name 已经被弃用,现在应该使用 fs.defaultFS。我一开始没有看到你在使用 hadoop-2。后来看了一下 namenode 格式化的那行代码才意识到。 - Chandra kant
@Chandrakant 你知道为什么namenode没有启动吗? - cybertextron
一般来说,“无权限”意味着没有许可。你检查过Namenode所写入的目录的权限了吗? - Chandra kant
你能否检查一下数据节点和任务跟踪器的配置设置。 - Chandra kant
4个回答

16

我曾面临同样的问题,并通过格式化namenode解决了。以下是命令:

hdfs namenode -format

core-site.xml的条目是:

<configuration>
   <property>
      <name>fs.defaultFS</name>
      <value>hdfs://localhost:9000</value>
   </property>
</configuration>

那肯定会解决问题。


我不得不更新我的 hadoop-3.1.2\etc\hadoop\core-site.xml 文件,使用这个方法在 Standalone 模式下运行得非常完美,谢谢!此外,我还需要从这里的链接下载一个 DLL 文件,并将其放到我的 bin 目录中:https://wiki.apache.org/hadoop/WindowsProblems - abelito

4
我遇到了同样的问题。我发现我需要在hdfs-site.xml中添加一个fs.defaultFS属性,以匹配core-site.xml中的fs.defaultFS属性:
<property>
      <name>fs.defaultFS</name>
      <value>hdfs://<master-ip>:8020</value>
</property>

当我添加了这个后,辅助名称节点就成功启动了。


1

0

可能您在hdfs-site.xml中为dfs.datanode.data.dir或dfs.namenode.data.dir提供了错误的语法。如果在值中缺少/,则会出现此错误。 请检查以下语法: file:///home/hadoop/hdfs/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接