我已经建立了一个多节点hadoop集群。namenode和secondary namenode在同一台计算机上运行,并且集群只有一个datanode。所有节点都配置在amazonec2机器上。
以下是主节点上的配置文件:
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
和数据节点上的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管理员日志:
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条答案
按热度按时间4zcjmb1e1#
@mustafacanturk解决方案,禁用防火墙为我工作。我以为datanodes启动是因为它们在运行jps时出现,但当尝试上载文件时,我收到消息“0 nodes running”。事实上,web界面(http://nn1:50070)正在工作,因为防火墙。我在安装hadoop时禁用了防火墙,但是由于某些原因它被打开了。不过,有时清理或重新创建临时文件夹(hadoop.tmp.dir)甚至dfs.data.dir和dfs.namenode.name.dir文件夹并重新格式化名称服务器是解决方案。
fnatzsnv2#
我得到了同样的错误,在我的情况下,这是由于一个错误的配置的主机文件,首先我修改了主机节点的主机文件添加的IP的奴隶,也在每个数据节点,我修改了主机文件,以表明IP的名称节点和其余的奴隶。
我也这么想
示例slave1的hosts文件
kqhtkvqz3#
有两件事对我有用,
步骤1:停止hadoop并从中清除临时文件
hduser
```sudo rm -R /tmp/*
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
hdfs namenode -format
hduser@prayagupd:~$ jps
19135 NameNode
20497 Jps
19477 DataNode
20447 NodeManager
19902 SecondaryNameNode
20106 ResourceManager
bsxbgnwa4#
在我的情况下,我错过了必要的财产内
hdfs-site.xml
(hadoop 3.0.0)在macos上使用自制软件安装(这个file:///
不是打字错误。)wecizke35#
我在单节点集群中也面临同样的问题。
为了解决这个问题,我采取了以下步骤:
1检查logs目录下的datanode日志,发现namenode clusterid和datanode clusterid不同。
2使datanode目录为空:
rm-rvf/hadoop/hdfs/datanode/*
三。停止所有.sh
4hdfs namenode-格式
5全部启动.sh
6日本
27200节点管理器
26129名称节点
26595次要名称节点
5539grad蒙
2355主
2693grad蒙
27389日元
26846资源管理器
26334数据节点
这对我有用。
dly7yett6#
就我的情况,防火墙服务正在运行。这是默认配置。它不允许节点之间的通信。我的hadoop集群是一个测试集群。因此,我停止了服务。如果您的服务器正在生产中,您应该允许防火墙上的hadoop端口,而不是
t1qtbnec7#
可能防火墙的服务还没有停止。
sqxo8psd8#
@学习者,
我遇到了这样一个问题:namenode的webui中没有显示datanodes。通过hadoop2.4.1中的这些步骤解决了这个问题。
对所有节点(主节点和从节点)执行此操作
1删除所有临时文件(默认情况下在/tmp中)-
sudo rm -R /tmp/*
.2现在尝试通过连接到所有节点
ssh
通过使用ssh username@host
并使用ssh-copy-id -i ~/.ssh/id_rsa.pub username@host
允许从机不受限制地访问主机(不这样做可能是拒绝连接的问题)。三。使用格式化namenode
hadoop namenode -format
尝试重新启动守护进程。ny6fqffe9#
我有同样的问题后,不当关闭节点。在ui中也选中了datanode,但没有列出。
现在它在从datanode文件夹中删除文件并重新启动服务后工作。
停止所有.sh
rm-rf/usr/local/hadoop\存储/hdfs/datanode/*
全部启动.sh
pbpqsu0x10#
1) 首先使用stop-all.sh命令停止所有服务
2) 删除datanode rm-rf/usr/local/hadoop\u store/hdfs/datanode中的所有文件/*
3) 然后使用start-all.sh命令启动所有服务
您可以使用jps命令检查是否所有服务都在运行
希望这能奏效!!!
rsl1atfo11#
我也犯了同样的错误。我没有hdfs文件系统的权限。因此,我将权限授予我的用户:
pqwbnv8z12#
您是否尝试过清除/tmp文件夹。
在清理之前,没有出现数据节点
清理后
它对我有用
ix0qys7i13#
这可能是因为datanodes的集群id和namenodes或节点管理器不匹配。集群id可以在namenode和datanodes中找到的版本文件中看到。
当格式化namenode,然后重新启动集群,但datanodes仍尝试使用以前的clusterid进行连接时,就会发生这种情况。要成功连接,您需要正确的ip地址以及节点上匹配的群集id。
因此,请尝试重新格式化namenode和datanodes,或者在新创建的文件夹上配置datanodes和namenode。
那应该能解决你的问题。
从当前datanodes文件夹中删除文件也将删除旧版本文件,并在重新连接namenode时请求新版本文件。
配置中的datanode目录是/hadoop2/datanode
然后重新启动服务,如果您重新格式化您的namenode,请在此步骤之前执行此操作。每次重新格式化namenode时,它都会获得一个新的id,并且该id是随机生成的,不会与datanodes中的旧id匹配
所以每次都按照这个顺序
如果格式化namenode,则删除datanode目录的内容或在新创建的目录上配置datanode,然后启动namenode和datanode
ff29svar14#
主计算机和从计算机上core-site.xml中属性{fs.default.name}的值必须指向主计算机。所以是这样的:
其中master是/etc/hosts文件中指向主节点的主机名。