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



核心内容:

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



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

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

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

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

[root@hadoop11 ~]# service iptables status
iptables: Firewall is not running.

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

[[email protected] ~]# more /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
10.187.84.50  hadoop11
10.187.84.51  hadoop22
10.187.84.52  hadoop33
10.187.84.53  hadoop44
10.187.84.54  hadoop55
10.187.84.55  hadoop66

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

[[email protected] ~]# hadoop dfsadmin -safemode get
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

Safe mode is OFF

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

<property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop/tmp</value>
</property>

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

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

[[email protected] current]# pwd
/usr/local/hadoop/tmp/dfs/name/current
[[email protected] current]# more VERSION
#Wed Nov 02 21:27:01 CST 2016
namespaceID=1890187682
clusterID=CID-6a82f5f4-a705-4a20-bfda-ee5e9a69c3de
cTime=0
storageType=NAME_NODE
blockpoolID=BP-574118934-10.187.84.50-1478093221696
layoutVersion=-56

[[email protected] current]# pwd
/usr/local/hadoop/tmp/dfs/data/current/BP-574118934-10.187.84.50-1478093221696/current
[[email protected] current]# more VERSION
#Sun Nov 27 09:37:03 CST 2016
namespaceID=1890187682
cTime=0
blockpoolID=BP-574118934-10.187.84.50-1478093221696
layoutVersion=-55

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

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

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

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

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

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

<property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop/tmp</value>
</property>
</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。

<property>
  <name>dfs.safemode.threshold.pct</name>
  <value>0.999f</value>
  <description>
    Specifies the percentage of blocks that should satisfy
    the minimal replication requirement defined by dfs.replication.min.
    Values less than or equal to 0 mean not to wait for any particular
    percentage of blocks before exiting safemode.
    Values greater than 1 will make safe mode permanent.
  </description>
 </property>

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

[[email protected] hadoop]# hadoop dfsadmin -safemode leave
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

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 查看磁盘空间的使用情况,如果是磁盘空间不足的话,则调整磁盘空间。

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

[[email protected] local]# cd /
[[email protected] /]# ls
bin   dev  home  lib64       media  mnt  opt   root  selinux  sys  usr
boot  etc  lib   lost+found  misc   net  proc  sbin  srv      tmp  var
[[email protected] /]# du -sh *   (这个命令很重要)
7.6M    bin
27M     boot
264K    dev
36M     etc
5.4G    home
142M    lib
26M     lib64
16K     lost+found
4.0K    media
0       misc
4.0K    mnt
0       net
8.0K    opt
du: cannot access `proc/14788/task/14788/fd/4‘: No such file or directory
du: cannot access `proc/14788/task/14788/fdinfo/4‘: No such file or directory
du: cannot access `proc/14788/fd/4‘: No such file or directory
du: cannot access `proc/14788/fdinfo/4‘: No such file or directory
0       proc
2.6G    root
15M     sbin
0       selinux
4.0K    srv
0       sys
252K    tmp
31G     usr
256M    var

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

先删除hadoop.tmp.dir所对应的目录,然后对NameNode重新进行格式化处理。(6个检查以包括)

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

原因:集群中的主机名没有映射到相应的IP地址(6个检查以包括)

解决方法:在/etc/hosts文件中添加所有节点的主机名与IP地址的映射关系。

[[email protected] ~]# more /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
10.187.84.50  hadoop11
10.187.84.51  hadoop22
10.187.84.52  hadoop33
10.187.84.53  hadoop44
10.187.84.54  hadoop55
10.187.84.55  hadoop66
5、TaskTracker进程启动了,但是DataNode进程没有启动

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

<property>
  <name>hadoop.tmp.dir</name>
  <value>/tmp/hadoop-${user.name}</value>
  <description>A base for other temporary directories.</description>
</property>
6、java.lang.OutOfMemoryError

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

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

<property>
  <name>mapred.child.java.opts</name>
  <value>-Xmx200m</value>
</property>

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

-Xms 表示内存初始化的大小,-Xmx表示能够使用的最大内存。

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

[root@hadoop11 ~]# cat /proc/meminfo |grep MemTotal
MemTotal:        3871080 kB
7、Incompatible namespaceIDs in

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

解决方法:

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

2、先删除hadoop.tmp.dir所对应的目录,然后对NameNode重新进行格式化处理。(6个检查以包括)

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

时间: 2024-08-05 11:22:42

Hadoop开发过程中所遇到的那些坑的相关文章

hadoop实战---Hadoop开发过程中遇到的问题和解决方法

先上正确运行的显示: 错误1:变量为IntWritable,接收的是LongWritable,如下图: 原因,多写了参数reporter,如下图: 错误2:数组超出边界,如下图: 原因:设置了combine类,如下图: 错误3:nullpointerexception异常,如下图: 原因:静态变量为null,赋值即可,如下图: 错误4:进入了map,但是无法进入reduce,且直接把map的数据输出了,并且无错误提示 原因:Hadoop新老版本问题,实际是实例化异常,如下图: 错误5:进入主函数

vue03----生命周期、nextTick()、ref、filter、computed、vue中异步请求渲染问题(swiper不轮播)(在开发过程中遇到什么问题、踩过的坑)

### 1.vue的组件和实例都有生命周期,而且是一样的 生命周期:(组件从创建到销毁的过程) 创建 挂载 更新 销毁 组件到达某一个阶段就会自动触发某一些函数,这个函数就叫生命周期的钩子函数. 创建:组件创建的时候触发 beforeCreate created     组件刚创建的数据请求 挂载:创建完成挂载前后触发 beforeMount mounted     DOM的初始化操作 更新:数据发生改变的时候触发 beforeUpdate updated     数据的变化监听,尽量不要在这里

android开发过程中遇到的坑

在android的学习过程中,会有很多坑,我会把我遇到的,一一列下来,方便后来者查阅! 1:android-support-v4.jar and android-support-v7-appcompat.jar 的问题,在新建项目是因新手选择 targart sdk,compile sdk的时候,选择高版本的时候,会有找不到这两个包的问题, 解决方法:appcompat_v7 源码作为新建项目的lib,导入 2:经常性的R文件无法自动产生,导致,在代码中引用资源是,提示无法找到: 常见的原因是,

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

写在开头:本次项目采用的是vue2.0+iview3.0,最近公司没啥事,来总结一下开发过程中遇到的问题. 1.Modal关闭问题 需求背景:modal框里面是个form表单,点击确定之后,先验证form表单,验证通过则关闭modal框,验证不成功则提示用户,不关闭. 问题描述:本来刚开始想通过modal框v-model绑定的值(true或false)来进行控制,手动改之后,报错. 解决办法: 官方iview的modal组件的api里面有个loading属性,可通过控制loading的值来进行控

程序开发过程中常见的Maven包

maven可以自动解决java类之间的依赖关系,并且可以从网上自动下载这些jar包,同时可以将自己的工程发布给其他人使用,极大的方便了开发者的使用,被开发界广泛的使用着. 本文将介绍开发过程中,一些常用的maven包 PB 常用的序列化反序列化包,速度比xml快,在google等公司广泛地使用着. <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java<

iOS项目中Json转Model的坑

Json转Model json转model,是个开发都会遇到过.都已经9102年了,谁还不会用个第三方框架搞.拿起键盘就是干!打开podfile,把大名顶顶的YYModel写上,pod install一下.再用上ESJsonFormat,直接根据json,都能把model生成好. 特殊处理 啥?返回的字段值不是我们所需的在日常开发中,经常会遇到一些接口字段返回的值,并不是我所需要的类型的情况,这个时候,我们都会对这个字段进行处理.举个栗子: 123456 /** 错误代码 */@property

软件开发过程中的审查 (Review)

http://blog.csdn.net/horkychen/article/details/5035769 软件开发过程中的审查 (Review) 希望别人做些什么->定义出流程 希望别人做出正确的结果->定义出审查制度 软件开发项目中包括很多的审查动作,贯穿于整个开发过程.个人认为审查主要有以下目的: 1.尽早排查出潜在的问题(Potential Risk/Issue) 经过其他人的参与,以不同的视角提出不同的看法,会有类似头脑风暴的效果,集思广议来查找工程师未能注意的问题. 2.保持良好

比较Apache Hadoop生态系统中不同的文件格式和存储引擎的性能

这篇文章提出了在Apache Hadoop生态系统中对比一些当前流行的数据格式和可用的存储引擎的性能:Apache Avro,Apache Parquet,Apache HBase和Apache Kudu空间效率,提取性能,分析扫描以及随机数据查找等领域.这有助于理解它们中的每一个如何(何时)改善你的大数据工作负载的处理能力. 引言 最初把Hadoop文件格式和存储引擎做比较的想法是在初始系统修订版之一的驱动下完成的 --这个系统是在CERN中大规模调节Hadoop-ATLAS EventInd

软件开发过程中如何避免争吵?

软件开发过程中,对一个问题有不同意见是很正常的,不同思想的碰撞可以带来进步,但是如果沟通不当,引发争吵,从而延误项目开发进度,就会得不偿失了. 要做到避免争吵,首先得自我反思,自己是不是哪里做得不对,问题没考虑清楚.问题还没明白就去和别人争,就是你的不对了. 其次,要站在别人的角度先想一想问题.是不是PM有难言之隐,公司的压力过大,不能采纳我的建议? 设计师看问题的角度是不是和我不一样?我的代码编写是否规范,有没有给复审测试人员带来麻烦?项目有没有充分考虑并达到用户的需求?在和别人争论前,必须充