我是靠谱客的博主 孤独银耳汤,最近开发中收集的这篇文章主要介绍hadoop集群报错日志整理和总结1.环境问题2.配置文件3.文件权限,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

总结:

     CentOS7firewall命令“替代”了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

问题定位:

    masterhosts文件配置或slave端环境

问题原因:

    1hosts文件配置出错

    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解析的问题,看一下namenodehosts文件:

      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了。

    2ping 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.dirdfs.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.dirdfs.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.dirdfs.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.defaultFSvalueIP或域名改成主节点的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)   多次格式化了namenodedatanode之后的结果,格式化之后从节点生成了新的ID,造成不一致

    每次namenode format会重新创建一个namenodeId,tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有晴空datanode下的数据,导致启动时失败,所要做的就是每次fotmat,清空tmp一下的所有目录

解决办法:

    1)   在格式化之前,先把所有的服务停掉(stop-dfs.shstop-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.rpmPC上使用压缩工具打开后,取出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.文件权限

     在建立hadoopname目录和data目录的时候,没有给相应的目录分配足够的权限,hadoop集群启动的时候,就会报错,需要chmod给目录赋权限。

     最终,还是要仔细看masterslave的日志文件,定位问题,具体问题具体分析,找到对应的解决方法。

最后

以上就是孤独银耳汤为你收集整理的hadoop集群报错日志整理和总结1.环境问题2.配置文件3.文件权限的全部内容,希望文章能够帮你解决hadoop集群报错日志整理和总结1.环境问题2.配置文件3.文件权限所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部