Namenode 守护进程没有正常启动
Namenode daemon not starting properly
我刚刚开始学习 hadoop,是从 Hadoop:权威指南。
我按照伪分发模式下的 Hadoop 安装教程进行操作。我启用了 ssh 的无密码登录。
首次使用前格式化 hdfs 文件系统。第一次成功启动。
之后,我使用 copyFromLocal
将文本文件复制到 HDFS,一切正常。但是,如果我重新启动系统并再次启动守护程序并查看网络 UI ,则只有 YARN 成功启动。
当我发出 stop-dfs.sh 命令时,我得到
Stopping namenodes on [localhost]
localhost: no namenode to stop
localhost: stopping datanode
Stopping secondary namenodes [0.0.0.0]
0.0.0.0: stopping secondarynamenode
如果我再次格式化 hdfs 文件系统,然后尝试启动守护进程,那么它们都会成功启动。
这是我的配置 files.Exactly 正如 hadoop 权威指南书中所述。
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
核心-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost/</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
纱-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
这是名称节点日志文件中的错误
WARN org.apache.hadoop.hdfs.server.common.Storage: Storage directory /tmp/hadoop/dfs/name does not exist
WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimage
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverStorageDirs(FSImage.java:327)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:215)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:975)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:681)
at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:585)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:645)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:812)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:796)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1493)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1559)
这是来自 mapred 日志
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:744)
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.hadoop.ipc.Client$Connection.setupConnection(Client.java:614)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:712)
at org.apache.hadoop.ipc.Client$Connection.access00(Client.java:375)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1528)
at org.apache.hadoop.ipc.Client.call(Client.java:1451)
... 33 more
我访问了 apache hadoop : connection refused 上面写着
- 检查 /etc/hosts 中是否没有映射到 127.0.0.1 或 127.0.1.1 的主机名条目(Ubuntu 因这一点而臭名昭著)。
我发现我的 /etc/hosts 中有一个条目,但如果我删除它,我的 sudo 就会中断导致错误 sudo: unable to resolve host
。如果不删除映射到 127.0.1.1
的主机名,我应该在 /etc/hosts
中附加什么
我不明白这个问题的根本原因是什么。
如果配置文件没有问题,请尝试以下操作:
1.first 删除临时文件夹中的所有内容:
rm -Rf <tmp dir> (my was /usr/local/hadoop/tmp)
2.format 名称节点:
bin/hadoop namenode -format
3.start 再次处理所有进程:
bin/start-all.sh
嗯,它在你的 Namenode 日志文件中说你的 namenode 目录的默认存储是 /tmp/hadoop
。 /tmp
目录在某些系统重新启动时被格式化为 linux。所以一定是问题所在。
您需要通过更改 hdfs-site.xml
配置文件来更改默认的名称节点和数据节点目录。
将此添加到您的 hdfs-site.xml
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/"your-user-name"/hadoop</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/"your-user-name"/datanode</value>
</property>
在此之后通过 hdfs namenode -format
命令格式化您的名称节点。
我想这会解决你的问题。
我刚刚开始学习 hadoop,是从 Hadoop:权威指南。
我按照伪分发模式下的 Hadoop 安装教程进行操作。我启用了 ssh 的无密码登录。
首次使用前格式化 hdfs 文件系统。第一次成功启动。
之后,我使用 copyFromLocal
将文本文件复制到 HDFS,一切正常。但是,如果我重新启动系统并再次启动守护程序并查看网络 UI ,则只有 YARN 成功启动。
当我发出 stop-dfs.sh 命令时,我得到
Stopping namenodes on [localhost]
localhost: no namenode to stop
localhost: stopping datanode
Stopping secondary namenodes [0.0.0.0]
0.0.0.0: stopping secondarynamenode
如果我再次格式化 hdfs 文件系统,然后尝试启动守护进程,那么它们都会成功启动。
这是我的配置 files.Exactly 正如 hadoop 权威指南书中所述。
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
核心-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost/</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
纱-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
这是名称节点日志文件中的错误
WARN org.apache.hadoop.hdfs.server.common.Storage: Storage directory /tmp/hadoop/dfs/name does not exist
WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimage
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverStorageDirs(FSImage.java:327)
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:215)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:975)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:681)
at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:585)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:645)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:812)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:796)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1493)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1559)
这是来自 mapred 日志
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:744)
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.hadoop.ipc.Client$Connection.setupConnection(Client.java:614)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:712)
at org.apache.hadoop.ipc.Client$Connection.access00(Client.java:375)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1528)
at org.apache.hadoop.ipc.Client.call(Client.java:1451)
... 33 more
我访问了 apache hadoop : connection refused 上面写着
- 检查 /etc/hosts 中是否没有映射到 127.0.0.1 或 127.0.1.1 的主机名条目(Ubuntu 因这一点而臭名昭著)。
我发现我的 /etc/hosts 中有一个条目,但如果我删除它,我的 sudo 就会中断导致错误 sudo: unable to resolve host
。如果不删除映射到 127.0.1.1
/etc/hosts
中附加什么
我不明白这个问题的根本原因是什么。
如果配置文件没有问题,请尝试以下操作:
1.first 删除临时文件夹中的所有内容:
rm -Rf <tmp dir> (my was /usr/local/hadoop/tmp)
2.format 名称节点:
bin/hadoop namenode -format
3.start 再次处理所有进程:
bin/start-all.sh
嗯,它在你的 Namenode 日志文件中说你的 namenode 目录的默认存储是 /tmp/hadoop
。 /tmp
目录在某些系统重新启动时被格式化为 linux。所以一定是问题所在。
您需要通过更改 hdfs-site.xml
配置文件来更改默认的名称节点和数据节点目录。
将此添加到您的 hdfs-site.xml
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/"your-user-name"/hadoop</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/"your-user-name"/datanode</value>
</property>
在此之后通过 hdfs namenode -format
命令格式化您的名称节点。
我想这会解决你的问题。