我已经设置了一个多节点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>
芯-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
为什么我仍然在犯这个错误?
答案 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命令检查所有服务是否正在运行
希望这应该有用!!!