问题描述
我已经建立了一个多节点Hadoop集群。 NameNode和Secondary Namenode在同一台计算机上运行,并且群集只有一个Datanode。所有节点都在Amazon EC2计算机上配置。
以下是主节点上的配置文件:
masters
54.68.218.192 (public IP of the master node)
slaves
54.68.169.62 (public IP of the slave node)
core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>
</configuration>
现在是datanode上的配置文件:
core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://54.68.218.192:10001</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>54.68.218.192:10002</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>
</configuration>
在Namenode上运行的jps提供以下内容:
5696 NameNode
6504 Jps
5905 SecondaryNameNode
6040 ResourceManager
和datanode上的jps:
2883 DataNode
3496 Jps
3381 NodeManager
在我看来这是对的。
现在,当我尝试运行put命令时:
hadoop fs -put count_inputfile /test/input/
它给了我以下错误:
put: File /count_inputfile._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation.
datanode上的日志显示以下内容:
hadoop-datanode log
INFO org.apache.hadoop.ipc.Client: Retrying connect to server: 54.68.218.192/54.68.218.192:10001. Already tried 8 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
yarn-nodemanager日志:
INFO org.apache.hadoop.ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8031. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
节点管理器(50070)的Web UI显示存在0个活动节点和0个死节点,并且使用的dfs为100%
我也禁用了IPV6。
在一些网站上,我发现我还应该编辑/etc/hosts
文件。我还编辑了它们,它们看起来像这样:
127.0.0.1 localhost
172.31.25.151 ip-172-31-25-151.us-west-2.compute.internal
172.31.25.152 ip-172-31-25-152.us-west-2.compute.internal
为什么我仍然收到错误消息?
最佳答案
有两件事对我有用,
步骤1:停止hadoop并从hduser
清除临时文件
sudo rm -R /tmp/*
also, you may need to delete and recreate /app/hadoop/tmp
(主要是当我将hadoop版本从2.2.0
更改为2.7.0
时)
sudo rm -r /app/hadoop/tmp
sudo mkdir -p /app/hadoop/tmp
sudo chown hduser:hadoop /app/hadoop/tmp
sudo chmod 750 /app/hadoop/tmp
步骤2:格式化namenode
hdfs namenode -format
现在,我可以看到DataNode
hduser@prayagupd:~$ jps
19135 NameNode
20497 Jps
19477 DataNode
20447 NodeManager
19902 SecondaryNameNode
20106 ResourceManager
次佳答案
不当关闭节点后,我遇到了同样的问题。还检查了UI中未列出的datanode。
现在,从datanode文件夹中删除文件并重新启动服务后,它就可以工作了。
stop-all.sh
rm -rf /usr/local/hadoop_store/hdfs/datanode/*
start-all.sh
第三种答案
@Learner,我遇到了名称节点的Web UI中未显示的数据节点问题。通过Hadoop 2.4.1中的这些步骤解决了它。对所有节点(主节点和从节点)执行此操作1.删除所有临时文件(默认情况下在/tmp中)-sudo rm -R /tmp/*
。 2.现在,尝试使用ssh username@host
通过ssh
连接到所有节点,并使用ssh-copy-id -i ~/.ssh/id_rsa.pub username@host
在主服务器中添加密钥,以使从属服务器不受限制地访问主服务器(这样做可能是拒绝连接的问题)。 3.使用hadoop namenode -format
格式化namenode,然后尝试重新启动守护程序。
第四种答案
就我而言,防火墙服务正在运行。它是默认配置。而且它不允许节点之间的通信。我的hadoop集群是一个测试集群。因此,我停止了服务。如果您的服务器正在生产中,则应在firewalld上允许hadoop端口,而不是
service firewalld stop
chkconfig firewalld off