正在运行0个数据节点,并且此操作中不排除任何节点

时间:2014-10-24 09:47:25

标签: ubuntu hadoop amazon-ec2 hdfs hadoop2

我已经设置了一个多节点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)

芯-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上的配置文件:

芯-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 log:

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

为什么我仍然在犯这个错误?

14 个答案:

答案 0 :(得分:23)

两件事对我有用,

第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步:格式化名称节点

hdfs namenode -format

现在,我可以看到DataNode

hduser@prayagupd:~$ jps
19135 NameNode
20497 Jps
19477 DataNode
20447 NodeManager
19902 SecondaryNameNode
20106 ResourceManager

答案 1 :(得分:9)

在节点关闭不当后我遇到了同样的问题。同样在UI中检查未列出datanode。

现在,在从datanode文件夹中删除文件并重新启动服务后,它正在工作。

  

stop-all.sh

     

rm -rf / usr / local / hadoop_store / hdfs / datanode / *

     

start-all.sh

答案 2 :(得分:5)

@Learner,我在Namenode的网页用户界面中没有显示这个数据节点的问题。通过Hadoop 2.4.1中的这些步骤解决了这个问题。

对所有节点(主站和从站)执行此操作

1。删除所有临时文件(默认情况下在/ tmp中) - sudo rm -R /tmp/* 2.现在尝试使用ssh通过ssh username@host连接到所有节点,并使用ssh-copy-id -i ~/.ssh/id_rsa.pub username@host在主服务器中添加密钥,以便为主服务器提供对服务器的无限制访问(不这样做可能是问题拒绝连接)。
3.使用hadoop namenode -format格式化namenode并尝试重新启动守护进程。

答案 3 :(得分:3)

在我的情况下,firewalld服务正在运行。它是默认配置。并且它不允许节点之间的通信。我的hadoop集群是一个测试集群。因此,我停止了服务。如果您的服务器正在生产中,您应该在firewalld上允许hadoop端口,而不是

service firewalld stop
chkconfig firewalld off

答案 4 :(得分:1)

我有同样的错误。我没有权限hdfs文件系统。所以我允许我的用户:

chmod 777 /usr/local/hadoop_store/hdfs/namenode
chmod 777 /usr/local/hadoop_store/hdfs/datanode

答案 5 :(得分:1)

在我的情况下,我错过了在MacOS上使用HomeBrew安装的hdfs-site.xml(Hadoop 3.0.0)中的必要属性。 (file:///不是拼写错误。)

<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///usr/local/Cellar/hadoop/hdfs/namenode</value>
</property>

<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///usr/local/Cellar/hadoop/hdfs/datanode</value>
</property>

答案 6 :(得分:1)

我遇到了同样的错误,在我的情况下,这是由于主机文件的配置不正确,首先,我修改了主节点的主机文件,添加了从属的IP,并且在每个DataNode中,修改了主机文件以指示NameNode和其余从属的IP。

同样的想法

adilazh1@master:~$ sudo cat /etc/hosts
[sudo] contraseña para adilazh1:
127.0.0.1       localhost
192.168.56.100  master

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.56.101  slave1
192.168.56.102  slave2

slave1的主机文件示例

127.0.0.1       localhost
192.168.56.101  slave1

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.56.100  master
192.168.56.102  slave2

答案 7 :(得分:0)

可能是因为数据节点的集群ID与名称节点或节点管理器不匹配。可以在namenode和datanode中找到的VERSION文件中看到集群ID。

当您格式化namenode然后重新启动集群但是数据节点仍然尝试使用以前的clusterID进行连接时,会发生这种情况。要成功连接,您需要正确的IP地址以及节点上匹配的群集ID。

因此,请尝试重新格式化namenode和datanode,或者只在新创建的文件夹上配置datanode和namenode。

这应该可以解决你的问题。

从当前datanodes文件夹中删除文件也将删除旧的VERSION文件,并在重新连接namenode时请求新的VERSION文件。

配置中的datanode目录为/ hadoop2 / datanode

directory

然后重启服务 如果您重新格式化namenode,请在此步骤之前执行此操作。每次重新格式化namenode时,它都会获得一个新ID,并且该ID是随机生成的,与您的datanode中的旧ID不匹配

所以每次都按照这个顺序

  
    

如果格式化namenode     然后删除datanode目录的内容或在新创建的目录上配置datanode     然后启动你的namenode和datanodes

  

答案 8 :(得分:0)

主机和从机上的core-site.xml中的属性{fs.default.name}的值必须指向主机。所以它会是这样的:

<property>
     <name>fs.default.name</name>
     <value>hdfs://master:9000</value>
</property>

其中master是/ etc / hosts文件中指向主节点的主机名。

答案 9 :(得分:0)

您是否尝试清除/ tmp文件夹。

在清理之前,没有出现一个数据节点

86528 SecondaryNameNode
87719 Jps
86198 NameNode
78968 RunJar
79515 RunJar
63964 RunNiFi
63981 NiFi

清理后

sudo rm -rf /tmp/*

对我有用

89200 Jps
88859 DataNode

答案 10 :(得分:0)

@mustafacanturk解决方案,禁用防火墙对我有用。 我认为datanodes之所以启动是因为它们在运行jps时出现了,但是在尝试上传文件时却收到了消息“正在运行0个节点”。 实际上,由于防火墙,通往(http://nn1:50070)的Web界面都无法正常工作。 我在安装hadoop时禁用了防火墙,但由于某种原因它已启动。 解决方案有时没必要清理或重新创建临时文件夹(hadoop.tmp.dir)甚至dfs.data.dir和dfs.namenode.name.dir文件夹,然后重新命名服务器就是解决方案。

答案 11 :(得分:0)

我的单节点群集中遇到相同的问题。

为了解决此问题,我已经执行了以下步骤:
1.检查日志目录下的datanode日志,发现 namenode clusterId datanode clusterId 不同。
2.清空数据节点目录:
rm -rvf / hadoop / hdfs / datanode / *
3. stop-all.sh
4. hdfs namenode -format
5. start-all.sh
6. jps
   27200 NodeManager
   26129 NameNode
   26595 SecondaryNameNode
   5539 ​​GradleDaemon
   2355主要
   2693 GradleDaemon
   27389 Jps
   26846 ResourceManager
   26334 DataNode
 
这对我有用。

答案 12 :(得分:-1)

也许防火墙的服务还没有停止。

答案 13 :(得分:-2)

1)首先使用命令停止所有服务 stop-all.sh

2)删除datanode中的所有文件 rm -rf / usr / local / hadoop_store / hdfs / datanode / *

3)然后使用命令启动所有服务 start-all.sh

您可以使用jps命令检查所有服务是否正在运行

希望这应该有用!!!