联系方式 | 付款方式 | 关于我们
工单提交
安全退出
用户区

    Hadoop开发过程中常见问题即解决方案
 

核心内容:
1、Hadoop开发过程中常见问题即解决方案


在Hadoop开发的过程中,我们总是遇到各种各样的问题,今天就整理总结一下:

万能的解决方案:6个检查+具体日志

在Hadoop开发的过程中如果遇到各种异常,首先使用jps命令查看节点的启动是否正常,然后在去查看相关的日志文件,但是在查看相关日志之前,你可以先检查一下面几点:
1、防火墙原因:检查各个节点的防火墙是否关闭成功。(重点是检查NameNode)




view source

print

?



1.


[root@hadoop11 ~]# service iptables status


2.


iptables: Firewall is not running.

2、检查IP地址与主机名的映射关系是否绑定成功




view source

print

?



1.


[root@hadoop11 ~]# more /etc/hosts


2.


127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4


3.


10.187.84.50 hadoop11


4.


10.187.84.51 hadoop22


5.


10.187.84.52 hadoop33


6.


10.187.84.53 hadoop44


7.


10.187.84.54 hadoop55


8.


10.187.84.55 hadoop66

3、检查NameNode是否处于安全模式




view source

print

?



1.


[root@hadoop11 ~]# hadoop dfsadmin -safemode get


2.


DEPRECATED: Use of this script to execute hdfs command is deprecated.


3.


Instead use the hdfs command for it.


4.




5.


Safe mode is OFF

4、检查NameNode是否已经进行了格式化处理




view source

print

?



1.


<property>


2.


<name>hadoop.tmp.dir</name>


3.


<value>/usr/local/hadoop/tmp</value>


4.


</property>

5、检查配置文件的配置是否成功
6、检查NameNode节点和DataNode节点中存放的namespaceID的版本号是否相同




view source

print

?



01.


[root@hadoop11 current]# pwd


02.


/usr/local/hadoop/tmp/dfs/name/current


03.


[root@hadoop11 current]# more VERSION


04.


#Wed Nov 02 21:27:01 CST 2016


05.


namespaceID=1890187682


06.


clusterID=CID-6a82f5f4-a705-4a20-bfda-ee5e9a69c3de


07.


cTime=0


08.


storageType=NAME_NODE


09.


blockpoolID=BP-574118934-10.187.84.50-1478093221696


10.


layoutVersion=-56


11.




12.




13.


[root@hadoop44 current]# pwd


14.


/usr/local/hadoop/tmp/dfs/data/current/BP-574118934-10.187.84.50-1478093221696/current


15.


[root@hadoop44 current]# more VERSION


16.


#Sun Nov 27 09:37:03 CST 2016


17.


namespaceID=1890187682


18.


cTime=0


19.


blockpoolID=BP-574118934-10.187.84.50-1478093221696


20.


layoutVersion=-55

好的,当我们查看完上述6点之后如果还没有解决问题,那我们再去查看相关的日志文件即可。
OK,到现在为止我在给大家介绍一下在开发过程中经常遇到的几个异常问题:

1、启动hadoop时没有NameNode的可能原因

这个问题对于Hadoop的初学者是经常遇到的,之所以出现这个问题,可能有3点原因:
1、NameNode没有进行格式化处理(6个检查以包括)
先删除hadoop.tmp.dir所对应的目录(即logs和tmp),然后对NameNode进行格式化处理




view source

print

?



1.


<property>


2.


<name>hadoop.tmp.dir</name>


3.


<value>/usr/local/hadoop/tmp</value>


4.


</property>


5.


</configuration>

2、检查IP地址与主机名的映射关系是否绑定成功(6个检查以包括)
3、检查配置文件的配置是否成功(6个检查以包括),重点是hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml和slaves。

2、Name node is in safe mode.

例如:
这里写图片描述
原因:NameNode在刚开始启动的时候会进入到安全模式,倒计时30s后退出,在安全模式下会不能进行增、删、改操作,只能进行查看操作。但是如果数据节点DataNode丢失的block块达到一定比例的话则系统一直处于安全模式,即只读状态。
解决方法:
1、在HDFS的配置文件hdfs-site.xml中,修改dfs.safemode.threshold.pct所对应的数值,将其数值改成一个较小的数值,默认的数值是0.999f。




view source

print

?



01.


<property>


02.


<name>dfs.safemode.threshold.pct</name>


03.


<value>0.999f</value>


04.


<description>


05.


Specifies the percentage of blocks that should satisfy


06.


the minimal replication requirement defined by dfs.replication.min.


07.


Values less than or equal to 0 mean not to wait for any particular


08.


percentage of blocks before exiting safemode.


09.


Values greater than 1 will make safe mode permanent.


10.


</description>


11.


</property>

2、执行命令 hadoop dfsadmin -safemode leave 强制NameNode离开安全模式。(6个检查以包括)




view source

print

?



1.


[root@hadoop11 hadoop]# hadoop dfsadmin -safemode leave


2.


DEPRECATED: Use of this script to execute hdfs command is deprecated.


3.


Instead use the hdfs command for it.


4.




5.


Safe mode is OFF

3、could only be replicatied to 0 nodes, instead of 1.

例如:
这里写图片描述
这里写图片描述
这个异常可能出现的现象:执行命令jps显示的进程都很正常,但是用web界面查看的话,显示的live nodes为0,这说明数据节点DataNode没有正常启动,但是数据节点DataNode又正常启动了。
这个问题可能出现的原因:
1、防火墙原因,检查所有节点的防火墙是否关闭成功。(6个检查以包括)
2、磁盘空间原因:执行命令df -al 查看磁盘空间的使用情况,如果是磁盘空间不足的话,则调整磁盘空间。
这里写图片描述
如果是磁盘空间不足的话,具体进行下面的步骤在进行查看:




view source

print

?



01.


[root@hadoop66 local]# cd /


02.


[root@hadoop66 /]# ls


03.


bin dev home lib64 media mnt opt root selinux sys usr


04.


boot etc lib lost+found misc net proc sbin srv tmp var


05.


[root@hadoop66 /]# du -sh * (这个命令很重要)


06.


7.6M bin


07.


27M boot


08.


264K dev


09.


36M etc


10.


5.4G home


11.


142M lib


12.


26M lib64


13.


16K lost+found


14.


4.0K media


15.


0 misc


16.


4.0K mnt


17.


0 net


18.


8.0K opt


19.


du: cannot access `proc/14788/task/14788/fd/4': No such file or directory


20.


du: cannot access `proc/14788/task/14788/fdinfo/4': No such file or directory


21.


du: cannot access `proc/14788/fd/4': No such file or directory


22.


du: cannot access `proc/14788/fdinfo/4': No such file or directory


23.


0 proc


24.


2.6G root


25.


15M sbin


26.


0 selinux


27.


4.0K srv


28.


0 sys


29.


252K tmp


30.


31G usr


31.


256M var

3、如果上述方法都不行的话,可用以下方法进行处理(但是该方法会造成数据的丢失,所以慎用!)
先删除hadoop.tmp.dir所对应的目录,然后对NameNode重新进行格式化处理。(6个检查以包括)

4、启动时报错 java.net.UnknownHostException

原因:集群中的主机名没有映射到相应的IP地址(6个检查以包括)
解决方法:在/etc/hosts文件中添加所有节点的主机名与IP地址的映射关系。




view source

print

?



1.


[root@hadoop11 ~]# more /etc/hosts


2.


127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4


3.


10.187.84.50 hadoop11


4.


10.187.84.51 hadoop22


5.


10.187.84.52 hadoop33


6.


10.187.84.53 hadoop44


7.


10.187.84.54 hadoop55


8.


10.187.84.55 hadoop66

5、TaskTracker进程启动了,但是DataNode进程没有启动

解决方法:先删除hadoop.tmp.dir所对应的文件夹,然后对NameNode重新进行格式化处理。




view source

print

?



1.


<property>


2.


<name>hadoop.tmp.dir</name>


3.


<value>/tmp/hadoop-${user.name}</value>


4.


<description>A base for other temporary directories.</description>


5.


</property>

6、java.lang.OutOfMemoryError

原因分析:出现这个异常,明显是JVM内存不足的原因,要修改所有数据节点DataNode所对应的JVM内存大小。
方法:在MapReduce的配置文件mapred-site.xml中,修改mapred.child.java.opts所对应的数值。




view source

print

?



1.


<property>


2.


<name>mapred.child.java.opts</name>


3.


<value>-Xmx200m</value>


4.


</property>

注意:一般JVM的最大内存使用应该为总内存大小的一半,例如我们的服务器的内存大小为4G,则设置为2048m,但是这个值可能依旧不是最优的数值。其中
-Xms 表示内存初始化的大小,-Xmx表示能够使用的最大内存。
在linux 下查看服务器内存的硬件信息:




view source

print

?



1.


[root@hadoop11 ~]# cat /proc/meminfo |grep MemTotal


2.


MemTotal: 3871080 kB

7、Incompatible namespaceIDs in

原因分析:每次对NameNode格式化之后都会产生一个新的namespaceID,如果多次对NameNode格式化的话可能导致NameNode节点和DataNode节点中存放的版本号不一致。
解决方法:
1、在NameNode节点和DataNode节点中检查namespaceID的版本号是否相同,如果不相同的话,修改为相同的值后然后重新启动该节点。(6个检查以包括)
2、先删除hadoop.tmp.dir所对应的目录,然后对NameNode重新进行格式化处理。(6个检查以包括)
上面这些就是我在开发过程中经常遇到的一些问题,希望对大家有所帮助。





 


关于我们 - 付款方式 - 价格总览 - 服务中心 - 诚聘英才 - 网站地图 - 联系我们
总部电话: 400-679-9994
传真:400-679-9994
大客户咨询热线:400-679-9994客户服务中心(7×24): 400-679-9994
机房联系(7×24支持): 400-679-9994
售后服务 7×14 小时支持: 400-679-9994
版权所有:山东三二科技有限公司 2006-2011
网址: www.222.cc 
企业法人营业执照注册号: 400105000123815
网址:美国VPS www.222.cc
鲁ICP备12009357号-2