概述
用CentOS7.0做集群,发现了许多问题,主要总结如下:
1.配置文件的配置参数有错误。
2.操作系统的环境没有设置好。
3.文件的权限没有分配好。
常见的错误如下:
1.环境问题
centos7关闭防火墙
当时一直认为关闭防火墙的命令是:systemctl iptables stop
直接命令:service firewalld stop
CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙
firewall:
systemctl start firewalld.service#启动firewall
systemctl stop firewalld.service#停止firewall
systemctl disable firewalld.service#禁止firewall开机启动
可以替换为iptables
firewall:
systemctl start iptables.service
总结:
CentOS7用firewall命令“替代”了iptables。在这里我们需要区分“iptables服务”和“iptables命令”。虽然firewalld是替代提供的防火墙管理iptables服务,但是它仍然使用iptables对内核命令动态通信包过滤。所以它只是iptables服务代替,而不是iptables命令。
1. Disable Firewalld Service.
[root@rhel-centos7-linux ~]# systemctl mask firewalld
2. Stop Firewalld Service.
[root@rhel-centos7-linux ~]# systemctl stop firewalld
3. Install iptables service related packages.
[root@rhel-centos7-linux ~]# yum -y install iptables-services
4. Make sure service starts at boot:
[root@rhel-centos7-linux ~]# systemctl enable iptables
# If you do not want ip6tables, You can skip following command.
[root@rhel-centos7-linux ~]# systemctl enable ip6tables
5. Now, Finally Let’s start the iptables services.
[root@rhel-centos7-linux ~]# systemctl start iptables
# If you do not want ip6tables, You can skip following command.
[root@rhel-centos7-linux ~]# systemctl start ip6tables
Firewalld Service is now disabled and stop, You can use iptables.
检查防火墙状态
firewall-cmd --stat
临时开放ftp服务
firewall-cmd --add-service=ftp
永久开放ftp服务
firewall-cmd --add-service=ftp --permanent
关闭ftp服务
firewall-cmd --remove-service=ftp --permanent
配置防火墙在public区域永久开放http服务
firewall-cmd --permanent --zone=public --add-service=http
加入指定开放端口
firewall-cmd --add-port=1324/tcp
为了让之前的设定生效当然要重启服务咯
systemctl restart firewalld
或者使用下面的命令免去重启服务(防火墙策略配置后重新载入)
firewall-cmd --complete-reload
firewall-cmd --reload (这两句功能相同)
检查ftp服务的21端口是否开放
iptables -L -n | grep 21
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 ctstate NEW
查询ftp服务启用状态
firewall-cmd --query-service ftp
查看当前规则
firewall-cmd --list-all
仅允许部分IP访问本机服务配置
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4"
source address="192.168.0.4/24" service name="http" accept"
仅允许部分IP访问本机端口配置
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4"
source address="192.168.0.4/24"
port protocol="tcp" port="8080" accept"
异常
RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
2014-03-13 11:10:32,676 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: Linux-hadoop-38/10.10.208.38:9000. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
2014-03-13 11:10:32,677 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: Linux-hadoop/10.10.208.38:9000
问题定位:
master端hosts文件配置或slave端环境
问题原因:
1)hosts文件配置出错
2)开启了防火墙
解决办法:
1)如果你已经检查了datanode以及namenode的连通性,ip都正确,但是仍然没法解决问题, 其实根本原因可能是无法连接到192.168.1.2:9000相应ip的相应端口。
查看一下namenode的端口坚挺情况:
[root@hadoop 桌面]$ netstat -an | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:37072 127.0.0.1:9000 TIME_WAIT
其实问题就在这里,hadoop启动的时候只监听了127.0.0.1一个端口,而不是192.168.1.2:9000。这种情况下,也就只有本机才能连通127.0.0.1:9000。
看来是ip解析的问题,看一下namenode的hosts文件:
127.0.0.1 master localhost.localdomain
::1 localhost6.localdomain6 localhost6
其实主要问题就在标红的部分,只要将master去掉即可。
重启dfs后检查一下端口监听情况:
[root@hadoop 桌面]# netstat -an | grep 9000
tcp 0 0 192.168.1.2:9000 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.2:9000 192.168.1.3:52465 ESTABLISHED
tcp 0 0 192.168.1.2:56294 192.168.1.2:9000 TIME_WAIT
修改后datanode就可以正常连接namenode了。
2)ping hadoop能通,telnet Linux-hadoop 9000不能通,说明开启了防火墙。
关闭防火墙。
2.配置文件
Master节点Log篇
1.WARN org.apache.hadoop.hdfs.server.common.Util: Path /usr/hadoop/name should be specified as a URI in configuration files. Please update hdfs configuration.
问题定位:hdfs-site.xml
问题原因:
1) 不合规范的URI格式
解决办法:
2) 把dfs.namenode.name.dir、dfs.datanode.data.dir的原路径格式如/usr/hadoop/name改成file:/usr/hadoop/name,即使用完全路径。
2.INFO org.apache.hadoop.ipc.Server: IPC Server handler 2 on 9000, call org.apache.hadoop.hdfs.protocol.ClientProtocol.addBlock from 192.168.8.184:39050 Call#6 Retry#0 java.io.IOException: File /hbase/.tmp/hbase.version 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
问题原因:
1) datanode没有启动
解决办法:
2) 去Slave节点查看Log,排除错误,确保datanode正确启动起来(可通过jps命令查看启动状态)。
3. WARN org.apache.hadoop.hdfs.server.common.Storage: Storage directory /hadoop/name does not exist 2014-11-24 08:19:02,555 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimage org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /hadoop/name is in an inconsistent state: storage directory does not exist or is not accessible.
问题定位:hdfs-site.xml
问题原因:
1) 错误的URI格式
解决办法:
2) 把dfs.namenode.name.dir、dfs.datanode.data.dir的原路径格式如file://usr/hadoop/name改成file:/usr/hadoop/name,即使用完全路径。
Slave节点Log篇
1. WARN org.apache.hadoop.hdfs.server.common.Util: Path /usr/hadoop/data should be specified as a URI in configuration files. Please update hdfs configuration.
问题定位:hdfs-site.xml
问题原因:
1) 不合规范的URI格式
解决办法:
2) 把dfs.namenode.name.dir、dfs.datanode.data.dir的原路径格式如/usr/hadoop/name改成file:/usr/hadoop/name,即使用完全路径。
2. WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: slave1.hadoop.com.cn/192.168.1.2:9000
问题定位:core-site.xml
问题原因:
1) 不正确的HDFS地址
2) Master节点或者Slave节点防火墙没有关闭
解决办法:
1) 把core-site.xml中的fs.defaultFS的value的IP或域名改成主节点的IP地址或域名。
2) 使用telnet master 9000命令测试一下主节点的端口是否可以连接,如果不可以连接,则可能是主节点或者从节点的防火墙启用了,需要把它关闭。
3) 要是没有telnet命令,需要用yum install telnet命令下载安装包
3. FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool (Datanode Uuid unassigned) service to master/192.168.8.184:9000. Exiting. java.io.IOException: Incompatible clusterIDs in /usr/hadoop/data: namenode clusterID = CID-e6addb58-7fe2-47ea-9592-0033053a90f9; datanode clusterID = CID-d5961300-954e-4860-96b5-95b2b9634b77
问题定位:
所有namenode目录、所有datanode目录、从节点临时目录
问题原因:
1) 主节点的namenode clusterID与从节点的datanode clusterID不一致
2) 多次格式化了namenode跟datanode之后的结果,格式化之后从节点生成了新的ID,造成不一致。
每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有晴空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp一下的所有目录。
解决办法:
1) 在格式化之前,先把所有的服务停掉(stop-dfs.sh、stop-yarn.sh或者stop-all.sh),确保都停掉了。
2) 在hdfs-site.xml配置文件中,配置了dfs.namenode.name.dir,在master中,该配置的目录下有个current文件夹,里面有个VERSION文件。
3) 在core-site.xml配置文件中,配置了hadoop.tmp.dir,在slave中,该配置的目录下有个dfs/data/current目录,里面也有一个VERSION文件。
4) 两个内容不一样,删除slave中的错误内容,重启。
5) 要是还不行,分别到所有节点的namenode目录、datanode目录、临时目录,把以上目录里面的所有内容都删除掉。然后再重新启动就可以了。
4. 2014-03-1312:34:46,828FATALorg.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServices: Failed to initialize mapreduce_shuffle
java.lang.RuntimeException: No class defiend for mapreduce_shuffle
atorg.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServices.init(AuxServices.java:94)at org.apache.hadoop.yarn.service.CompositeService.init(CompositeService.java:58)
2014-03-13 12:34:46,830 FATAL org.apache.hadoop.yarn.server.nodemanager.NodeManager: Error starting NodeManagerjava.lang.RuntimeException: No class defiend for mapreduce_shuffleatorg.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServices.init(AuxServices.java:94)atorg.apache.hadoop.yarn.service.CompositeService.init(CompositeService.java:58)
问题定位:
yarn-site.xml
问题原因:
yarn-site.xml文件里的属性配置,在hadoop2.x有改动
解决办法:
1、yarn-site.xml配置错误:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
2、修改为:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce.shuffle</value>
</property>
3、重启服务
5.WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
问题定位:
hadoop目录下的lib里的native没有库文件
问题原因:
native里没有库文件
解决方法:
将hadoop-2.0.0+1518-1.cdh4.5.0.p0.24.el6.x86_64.rpm在PC上使用压缩工具打开后,取出usrlibhadooplibnative 下面的代码,上传到主机 ${HADOOP_HOME}/lib/native 下面
cd ${HADOOP_HOME}/lib/native
rm libhadoop.so
rm libsnappy.so
rm libsnappy.so.1
ln -s libhadoop.so.1.0.0 libhadoop.so
ln -s libsnappy.so.1.1.3 libsnappy.so.1
ln -s libsnappy.so.1.1.3 libsnappy.so
cd ..
tar -zcf native.tar.gz native
scp native.tar.gz 用户@IP地址:${HADOOP_HOME}/lib
cd ${HADOOP_HOME}/lib;
tar -zxf native.tar.gz;"
重启hadoop即可。
3.文件权限
在建立hadoop的name目录和data目录的时候,没有给相应的目录分配足够的权限,hadoop集群启动的时候,就会报错,需要chmod给目录赋权限。
最终,还是要仔细看master和slave的日志文件,定位问题,具体问题具体分析,找到对应的解决方法。
最后
以上就是孤独银耳汤为你收集整理的hadoop集群报错日志整理和总结1.环境问题2.配置文件3.文件权限的全部内容,希望文章能够帮你解决hadoop集群报错日志整理和总结1.环境问题2.配置文件3.文件权限所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复