我已经 Build 了一个多节点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日志:
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%
I have also disabled 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
为什么我仍然在犯这个错误?
11 回答
两件事对我有用,
STEP 1 : stop hadoop and clean temp files from hduser
also, you may need to delete and recreate
/app/hadoop/tmp
(主要是当我将hadoop版本从2.2.0
更改为2.7.0
时)STEP 2: format namenode
现在,我可以看到DataNode
在节点不正确关闭后我遇到了同样的问题 . 同样在UI中检查未列出datanode .
现在它正在删除datanode文件夹中的文件并重新启动服务 .
@学习者,
我有这个没有在Namenode的Web UI中显示的datanode问题 . 通过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并尝试重新启动守护进程 .在我的情况下,firewalld服务正在运行 . 它是默认配置 . 它不允许节点之间的通信 . 我的hadoop集群是一个测试集群 . 因此,我停止了服务 . 如果您的服务器正在 生产环境 中,您应该在firewalld上允许hadoop端口,而不是
我有同样的错误 . 我没有权限hdfs文件系统 . 所以我给了我的用户许可:
在我的情况下,我错过了在MacOS上使用HomeBrew安装的
hdfs-site.xml
(Hadoop 3.0.0)中的必要属性 . (file:///
不是拼写错误 . )可能是因为数据节点的集群ID与名称节点或节点管理器不匹配 . 可以在namenode和datanode中找到的VERSION文件中看到群集ID .
当您格式化namenode然后重新启动集群但是数据节点仍然尝试使用以前的clusterID进行连接时,会发生这种情况 . 要成功连接,您需要正确的IP地址以及节点上匹配的群集ID .
因此,请尝试重新格式化namenode和datanode,或者只在新创建的文件夹上配置datanode和namenode .
这应该可以解决你的问题 .
从当前datanodes文件夹中删除文件也将删除旧的VERSION文件,并在重新连接namenode时请求新的VERSION文件 .
配置中的datanode目录示例是/ hadoop2 / datanode
然后重新启动服务如果您重新格式化namenode,请在此步骤之前执行此操作 . 每次重新格式化namenode时,它都会获得一个新ID,该ID是随机生成的,与datanode中的旧ID不匹配
所以每次都遵循这个顺序
主机和从机上的core-site.xml中的属性的值必须指向主机 . 所以它会是这样的:
其中master是指向主节点的/ etc / hosts文件中的主机名 .
您是否尝试清除/ tmp文件夹 .
在清理之前,没有出现datanode
清理完毕后
它对我有用
@mustafacanturk解决方案,禁用防火墙为我工作 . 我认为datanode启动是因为它们在运行jps时出现但在尝试上传文件时我收到了消息"0 nodes running" . 事实上,由于防火墙,(http://nn1:50070)的Web界面都没有工作 . 我在安装hadoop时禁用了防火墙但由于某种原因它已经启动了 . Neverthelsess有时清理或重新创建临时文件夹(hadoop.tmp.dir)甚至dfs.data.dir和dfs.namenode.name.dir文件夹并重新格式化名称服务器是解决方案 .
1)首先使用命令stop-all.sh停止所有服务
2)删除datanode中的所有文件rm -rf / usr / local / hadoop_store / hdfs / datanode / *
3)然后使用命令start-all.sh启动所有服务
您可以使用jps命令检查是否所有服务都在运行
希望这应该工作!