zoukankan      html  css  js  c++  java
  • Hadoop常见错误问题及解决方法总结二

    问题导读:
    1.遇到问题该如何排除错误?
    2.看不到namenode的可能原因是什么?
    3.地址占用该如何解决?
    4.could only be replicatied to 0 nodes, instead of 1的可能原因是什么,该如何解决?
    5.通过localhost.localdomain根本无法映射到一个IP地址,会报什么错误?






    遇到问题以后先查看日志,以下是常见的错误情况及解决方法,希望对大家有所帮助。

    1、启动hadoop时没有NameNode的可能原因:
    (1) NameNode没有格式化
    (2) 环境变量配置错误
    (3) Ip和hostname绑定失败
    (4)hostname含有特殊符号如何.(符号点),会被误解析

    2、地址占用
    报错:org.apache.hadoop.hdfs.server.namenode.NameNode: Address already in use
    解决方法:查找被占用的端口号对应的PID:netstat –tunl
      Pkill -9 PID
      实在不行就killall -9 java

    3、safeMode
    报错:

    bin/hadoop fs -put ./input input
    put: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/root/input. Name node is in safe mode.
    hadoop dfsadmin -safemode leave


    解决方法:
    NameNode在启动的时候首先进入安全模式,如果dataNode丢失的block达到一定的比例(1-dfs.safemode.threshold.pct),则系统一直处于安全模式状态,即只读状态。
    dfs.safemode.threshold.pct(缺省值0.999f)表示HDFS启动的时候,如果DataNode上报的block个数达到了元数据记录的block个数的0999倍才可以离开安全模式,否则一直是这种只读模式。如果设置为1,则HDFS一直处于安全模式。

    下面这行摘录自NameNode启动时的日志(block上报比例1达到了阈值0.999)

    The ratio of reported blocks 1.0000 has reached the threshold 0.9990. Safe mode will be turned off automatically in 14 seconds.

    有两种方法离开这种安全模式:
    (1) 修改dfs.safeMode.threshold.pct为一个比较小的值,缺省是0.999;
    (2) hadoop dfsadmin –safemode leave命令强制离开

    用户可通过dfsadmin –safemode value来操作安全模式,参数value说明如下:
    Enter : 进入安全模式
    Leave :强制NameNode离开安全模式
    Get : 返回安全模式是否开启的信息
    Wait:等待,一直到安全模式结束。

    4、could only be replicatied to 0 nodes, instead of 1
    报错:
    hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop
    .ipc.RemoteException: java.io.IOException: ... could only be replicated to 0 nodes, instead of 1 ...
    可能出现的现象:用jps查看进程都正常。但是用web查看的话,live nodes 为0,这说明datanode没有正常启动,可是datanode进程又启动了。

    解决方法1:
    (1) 防火墙原因:
               永久关闭防火墙命令:chkconfig iptables stop
    (2)namespaceid不一致
    (3) 磁盘空间原因:
               df –ah      #查看磁盘空间
    如果是磁盘空间不够,则调整磁盘空间(像下图就是磁盘空间不够)
    <ignore_js_op> 

    如果上述方法不行,可用以下方法(只不过会丢失数据,慎用)
    A. 先运行stop-all.sh
    B. 格式化namenode,不过在这之前先删除原目录,
    即core-site.xml下配置的<name>hadoop.tmp.dir</name>指向的目录,
    删除后切记重新建立配置的空目录,然后运行命令hadoop namenode-format。




    解决方法2:

    • 删除所有节点dfs.data.dir和dfs.tmp.dir目录(默认为tmp/dfs/data和tmp/dfs/tmp)下的数据文件;然后重新hadoop namenode -format 格式化节点;然后启动。
    • 如果是端口访问的问题,你应该确保所用的端口都打开,比如hdfs://machine1:9000/、50030、50070之类的。执行#iptables -I INPUT -p tcp --dport 9000 -j ACCEPT 命令。如果还有报错:hdfs.DFSClient: Exception in createBlockOutputStream java.net.ConnectException: Connection refused;应该是datanode上的端口不能访问,到datanode上修改iptables:#iptables -I INPUT -s machine1 -p tcp -j ACCEPT
    • 还有可能是防火墙的限制集群间的互相通信。尝试关闭防火墙。/etc/init.d/iptables stop
    • 最后还有可能磁盘空间不够了,请查看 df -al
    • 我在解决这个问题的时候还有人说:先后启动namenode、datanode可以解决这个问题(本人尝试发现没用,大家可以试试)$hadoop-daemon.sh start namenode ; $hadoop-daemon.sh start datanode


    5、启动时报错java.net. UnknownHostException
    原因分析:通过localhost.localdomain根本无法映射到一个IP地址。
    解决方法:查看/etc/hosts,将主机名hostname添加到hosts文件中。

    6、启动时报错: java.io.IOException: File jobtracker.info could only be replicated to 0 nodes, instead of 1。
    解决方法:
    首先,检查防火墙是否关闭,是否对各节点的通信产生了影响;
    其次,可以检查namenode和datanode中的namespaceID的值是否相同,在不同的情况下,会造成该问题,修改为相同的值后,重启该节点;
    然后,将safemode设置为off状态
    Hadoop dfsadmin –safemode leave
    此外,还需检查/etc/hosts文件中主机名的映射是否正确,不要使用127.0.0.1或localhost。
    将safemode设置为off状态可以有两种方法:
    执行上面的命令可以强制设置为off状态,或者在hdfs-site.xml文件中添加如下代码,将safemode的threshold.pct设置为较小的值,这种方法避免了在执行hadoop过程中经常性遇到错误Name node is in safe mode而导致需强制将safemode置为off。

    1. <property>    
    2.       <name>dfs.safemode.threshold.pct</name>    
    3.   
    4.       <value>0.95f</value>    
    5.   
    6. </property>   
    复制代码


    7、ip和域名解析问题
    也会造成File jobtracker.info could only be replicated to 0 nodes, instead of 1的问题,此时要检查/etc/hosts文件中主机名的映射是否正确,不要使用127.0.0.1或localhost。



    8、报错:Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
    结果:执行任务时,任务卡死在reduce上,不执行。
    原因:任务会在最后将所有的reduce task 复制到一台机器上,做最后总的reduce,此时需要ip和主机域名的配置正确。
    解决方法:将个节点的ip和主机名配置正确,不能使用127.0.0.1或localhost,使用内网ip可加快通信速度。

    9、hive执行报错: java.lang.OutOfMemoryError: GC overhead limit exceeded
    原因:
    这个是jdk6新增的错误类型,是发生在GC占用大量时间为释放很小空间的时候发生的,是一种保护机制。
    解决方法:
    关闭该功能,可以添加JVM的启动参数来限制使用内存:
    在mapred-site.xml里新增项:mapred.child.java.opts,
    内容:-XX:-UseGCOverheadLimit

    10、datanode节点TaskTracker任务启动,但是DataNode任务为启动

    这一般是由于对hadoop进行升级后导致的,需要删除hadoop.tmp.dir所对应的文件夹,然后对namenode重新格式化,删除之前先将数据导出,否则数据就over了。


    上一篇:
    hadoop常见错误汇总及解决办法一


    下一篇:

    hadoop常见错误总结三

  • 相关阅读:
    已解决:No 'Access-Control-Allow-Origin'跨域问题
    (转 )聊聊GIS中的坐标系|再版
    CentOs如何挂载硬盘(手把手教你 )
    CentOS如何挂载硬盘
    CentOS7 复制文件夹和移动文件夹
    centos中怎么查看一个文件的创建时间
    vue项目报错Trailing spaces not allowed.
    (转)Vue框架Element UI教程-安装环境搭建(一)
    windows 根据端口查看进行PID 并杀掉进程
    完美解决CentOS8 yum安装AppStream报错,更新yum后无法makecache的问题
  • 原文地址:https://www.cnblogs.com/snowbook/p/5684714.html
Copyright © 2011-2022 走看看