Hadoop开发过程中所遇到的那些坑

Posted 大象大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop开发过程中所遇到的那些坑相关的知识,希望对你有一定的参考价值。

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

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

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

在Hadoop开发的过程中如果遇到各种异常,首先使用jps命令查看节点的启动是否正常,然后在亲查看相关的日志文件,但是在查看相关日志之前,你可以先检查一下以下几点:

1、防火墙原因:检查各个节点的防火墙是否关闭成功。【重点是检查NameNode】

Hadoop开发过程中所遇到的那些坑

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

Hadoop开发过程中所遇到的那些坑

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

Hadoop开发过程中所遇到的那些坑

5、检查配置文件的配置是否成功

6、检查NameNode节点和DataNode节点中存放的namespaceID的版本号是否相同

Hadoop开发过程中所遇到的那些坑

好的,当我们查看完上述6点之后如果还没有解决问题,那我们再去查看相关的日志文件即可。

OK,到现在为止我在给大家介绍一下开发过程中经常遇到的几个异常问题:

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

这个问题对于Hadoop的初学者是经常遇到的,之所以出现这个问题,可能有3点原因:

1)、NameNode 没有进行格式化处理(6个检查已包括)

先删除hadoop.tmp.dir所对应的目录(即logs和tmp),然后对NameNode进行格式化处理

Hadoop开发过程中所遇到的那些坑

3)、检查配置文件的配置是否成功,重点是hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、slaves和masters。

2、Name node is in safe mode    

例如:

    

Hadoop开发过程中所遇到的那些坑

原因:NameNode在刚开始启动的时候会进入到安全模式,倒计时30s后退出,在安全模式下不能进行增、删、改 操作,只能进行查看操作。但是如果数据节点DataNode丢失的block块达到一定比例的话则系统一直处于安全模式,即只读状态。

解决方法:

1)、在HDFS的配置文件hdfs-site.xml中,修改dfs.safemode.threshold.pct所对应的数值,将其数值改成一个较小的数值,默认的数值是0.999f

Hadoop开发过程中所遇到的那些坑

2)、执行命令hadoop dfsadmin -safemode leave 强制NameNode离开安全模式。

Hadoop开发过程中所遇到的那些坑

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

例如:

Hadoop开发过程中所遇到的那些坑

Hadoop开发过程中所遇到的那些坑

这个异常可能出现的现象:执行命令jps显示的进程都很正常,但是用web界面查看的话,显示的live nodes 为零,这说明数据节点DataNode没有正常启动,但是数据节点DataNode又正常启动了。

这个问题可能出现的原因:

1)、防火墙原因,检查所有节点的防火墙是否关闭成功。

2)、磁盘空间原因:执行命令df-al查看磁盘空间的使用情况,如果是磁盘空间不足的话,则调整磁盘空间。

Hadoop开发过程中所遇到的那些坑

如果是磁盘空间不足的话,具体进行下面的步骤查看:

Hadoop开发过程中所遇到的那些坑

3)、如果上述方法都不行的话,可以用以下方法进行处理(但是该方法会造成数据的丢失,所以慎用!)

先删除hadoop.tmp.dir所对应的目录,然后对NameNode重新进行格式化处理。

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

Hadoop开发过程中所遇到的那些坑

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

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

Hadoop开发过程中所遇到的那些坑

6、java.lang.OutOfMemoryError

原因分析:出现这个异常,明显是JVM内存不足的原因,要修改所有数据节点DataNode所对应的JVM内存大小。

方法:在MapReduce的配置文件mapred-site.xml中,修改mapred.child.java.opts所对应的数值。

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

在linux下查看服务器内存的硬件信息:

7、Incompatible namespaceIDs in

原因分析:每次对NameNode格式化之后都会产生一个新的namespaceID,如果多次对NameNode格式化的话可能导致NameNode节点和DataNode节点中存放的版本号不一致。

解决方法:

1)、在NameNode节点和 DataNode节点中检查namespaceID的版本号是否相同,如果不相同的话,修改为相同的值然后重新启动该节点。

2)、先删除hadoop.tmp.dir所对应的目录,然后对NameNode重新进行格式化处理。



上面这些就是在开发过程中经常遇到的一些问题,希望对大家有所帮助。

以上是关于Hadoop开发过程中所遇到的那些坑的主要内容,如果未能解决你的问题,请参考以下文章

开发过程遇到的坑汇总

Unity游戏开发之路上的那些坑——NullReferenceException

在安装开发Hadoop过程中遇到的问题

记一次开发过程中,iview遇到的一些坑以及解决办法

React Native在开发过程中遇到的一些问题(俗称:坑)

人月神话读后感