写在前面
主要是记录一下在安装hadoop全分布式环境中遇到的一些错误。
错误1:http://mirrors.ustc.edu.cn/centos/7.9.2009/os/x86_64/repodata/repomd.xml: [Errno 14] curl#6 - "Could not resolve host: mirrors.ustc.edu.cn; Unknown error"Trying other mirror.
情景:在使用yum命令卸载jdk的时候遇到的。
解决方法:网络断了,修复网络即可。好像是yum命令卸载的时候是需要联网的,因为它需要解决依赖关系,不然就会一直尝试连接,直到连上为止。如果修复网络后,不同的yum进程之间发生了阻塞,用系统监视器杀死前一个yum进程即可。
查看当前的进程可以用ps a
。
错误2:bash: jps: command not found…
原因:jps命令是java所带的bash命令,出现该错误通常是由于java版本未正确安装或者java路径配置错误。奇怪的是,我安装好java后,使用java和javac命令都是可以的,就是用不了jps,不过后面修改的路径之后确实可以用了。
解决方法:
- 首先确认一下jps是不是真的有。进入java安装目录,打开bin文件夹,看是否有jps文件。如果有,在bin目录下输入“./jps”应该是可以调用该命令的了。
- 然后修改配置文件。打开“/etc/profile”,修改或者增加一行“
export PATH=$JAVA_HOME/bin:$PATH
”即可。注意,“JAVA_HOME”变量是java的安装路径。奇怪的是,我之前的路径是配置成“export PATH=$PATH:$JAVA_HOME/bin
”,然后jps就无法调用,调换一下$PATH
所在的位置就可以了。
- 最后,“source /etc/profile”使配置文件生效。
错误3:192.168.18.130: /usr/local/hadoop-2.10.1/sbin/hadoop-daemon.sh: line 165: /pids/pids/hadoop-user1-namenode.pid: Permission denied
情景:在master上启动dfs(使用start-dfs.sh)的时候出现的拒绝访问。此时登录的是user1普通账号,不是root账号。
原因:因为当前不是root用户,因此对hadoop需要访问的某些路径没有权限,造成了拒绝访问。可以看到上图中,master(192.168.18.130)和slave(192.168.18.131)均拒绝访问了,因为master和slave均在普通用户下进行集群的访问。
解决方法:为普通用户分配权限。
- 从上图中可以看出,由于拒绝访问的是 /pids文件夹,该文件夹是在配置hadoop-env.sh文件时修改的自定义临时文件存储路径(默认应该是在 /tmp文件夹中的),因此为普通用户分配该文件夹的访问权限即可。
- 该操作需要在master和所有的slave中执行。
su root
chown -R user1 /pids # 为user1用户分配/pids文件夹的权限
su user1
- 随后,关闭stop-dfs.sh后,再次启动即可。
错误4:jps无法显示java进程名。
场景:是在删除了hsperfdata_user1中的无效进程文件后,再使用jps就任何内容都显示不出来了。正常来说,就算hadoop没有启动,也应该会有jps进程在的。
原因:hsperfdata_root和hsperfdata_user1的权限出错。可能是因为删除的操作,导致了这两个文件的权限都变成了777(即任何用户均拥有全部的操作权限),因而jps进程无法访问。参考博客:linux下使用jps命令无效不显示内容。
解决方法:
- 到/tmp文件夹下,键入下列命令可以查看文件的权限:
ls -l
- 如上图,hsperfdata_root和hsperfdata_user1的权限变为了777。具体含义参考Linux 查看文件权限命令ls -l 输出信息每列所代表的含义。
- 输入下面的命令修改文件权限:
chmod 755 hsperfdata_*
- 现在jps命令就可以正常使用了。
错误5:192.168.18.130:8088网址打不开
情景:在master节点上尝试打开8088,8088是yarn的网页管理界面,但是打开失败。其他的页面,如50070端口可以打开。
原因:yarn-site.xml配置文件配错了。
解决方法:
- 首先排查防火墙是否处于关闭状态,master和slave都要检查。
systemctl status firewalld.service # 查看防火墙状态
systemctl stop firewalld.service # 暂时关闭防火墙(重启失效)
systemctl disable firewalld.service #永久关闭防火墙
systemctl start firewalld.service # 暂时打开防火墙(重启失效)
systemctl enable firewalld.service # 永久打开防火墙
- 测试能否ping通slave节点。
- 如果都可以,估计是配置文件错了。使用
netstat -tpnl|grep java
查看目前的端口情况。
- 从上图可以看到,并没有8088端口。
- 重新检查yarn-site.xml,发现是yarn.resourcemanager.hostname属性的值写错了,应该是master的ip地址,如192.168.18.130。默认值是0.0.0.0。
- 修改之后,重启yarn进程,即键入
start-yarn.sh
即可。此时的端口号中就有8088了,而且网页也可以打开。
错误6:slave节点上没有DataNode进程。
场景:在master节点上启动了dfs后,slave节点上用jps
命令查看并没有DataNode进程。这导致了无法将文件传输到hdfs上面(因为没有DataNode)。
解决方法:
- 在所有的slave节点上,进入安装目录,找到hdfsdata文件夹,进入dfs文件夹,删除其中的data文件夹。
- 在master节点上,格式化文件系统,输入:
hdfs namenode -format
- 重启dfs后,可以在slave节点上看到DataNode节点。
错误7:WARN hdfs.DataStreamer: DataStreamer Exception. org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /InputDataTest.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.
场景:在使用hdfs命令将文件传送到hdfs文件系统时出现的。此时在hdfs上创建文件夹是可以的,但是无法将文件传送到DataNode上。用hadoop dfsadmin -report
查看hdfs的状态,如下图。可以看到,hdfs中一点可用空间都没有。
原因:原因主要出现在NameNode和DataNode的通信上。首先检查slave上是否有DataNode进程。然后检查master和slave之间的防火墙有没有关闭,能否相互ping通。如果都不行,可以查看在master上的log日志信息,路径是hadoop安装目录->logs,如下图。可以看到,日志中表明了是DataNode拒绝和NameNode进行通信,导致了注册失败。
解决方法:参考hadoop 使用ip配置导致hdfs启动失败
- 在master的hdfs-site.xml配置文件中加入以下配置信息后重启dfs即可。
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
- 此时再使用
hadoop dfsadmin -report
或者用web网页(输入主机ip:50070)就可以看到可用空间不为0了。