【Hadoop】Hadoop/Yarn中hdfs与mapreduce相关问题汇总

原创 2013年06月24日 18:39:00

在hadoop启动的时候,会出现各种各样的问题,NameNode,JobTracker等各个模块都会有莫名奇妙的问题出现,在这里对hdfs的问题进行一下简单的记录。

注:问题无先后次序,可能这次没遇到下次又遇到,所以统一记录在次

一:HDFS问题

1:HDFS initialized but not 'healthy' yet, waiting...

这个日志会在启动hadoop的时候在JobTracker的log日志文件中出现,在这里就是hdfs出现问题,导致DataNode无法启动,这里唯一的解决方式就是把所有的NameNode管理的路径下的文件删除然后重新执行namenode -format,而删除的地方主要有存放临时数据的tmp路径,存放数据的data路径还有name路径,全部删除之后重新format次问题就解决了

2:在执行hadoop程序的时候出现Name node is in safe mode

这个异常一般就直接会在IDE的控制台输出,这个错误的主要导致原因是,datanode不停在丢失数据,所以此时namenode就强制本身进入safe mode模式,在该模式下对数据只可以进行读操作而不能进行写操作。解决此异常很简单,直接执行命令让namenode离开次模式就可以了。./hadoop dfsadmin-safemode leave


3:原来hadoop一直可以正常启动,有天在启动之后查看namenode的log发现如下in_use.lock (Permission denied)错误日志:

INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
>> 1INFO metrics.FSNamesystemMetrics: Initializing
>> FSNamesystemMetrics using context
>> object:org.apache.hadoop.metrics.spi.NoEmitMetricsContext
ERROR namenode.FSNamesystem: FSNamesystem initialization failed. java.io.FileNotFoundException:  /var/lib/hadoop-0.20/cache/hadoop/dfs/name/in_use.lock (Permission denied)
>> at java.io.RandomAccessFile.open(Native Method)
>> at java.io.RandomAccessFile.<init>(RandomAccessFile.java:216)
>> at
>> org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.tryLock(Storage.java:614)
>> at
>> org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.lock(Storage.java:591)
>> at
>> org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:449)
>> at
>> org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:304)
>> at
>> org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:110)
>> at
>> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:372)
>> at
>> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:335)
>> at
>> org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:271)
>> at
>> org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:467)
>> at
>> org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1330)
>> at
>> org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1339)
这有两种场景出现,

  1):在原来正常的时候,有一次突然使用了原来不同的用户启动了一次hadoop。这种场景会产生一个in_use.lock 文件夹在你设置的目录中,这时候可以删除这个文件夹直接,然后重新启动

  2):在格式化hadoop的时候和当期启动的用户不是同一个,也会导致该问题。这个时候可以使用格式化hadoop的那个用户重新启动hadoop。也可以解决此错误。

该问题的参考地址:打开链接

4:namenode 异常

2013-08-20 14:10:08,946 INFO org.apache.hadoop.hdfs.server.common.Storage: Cannot access storage directory /var/lib/hadoop/cache/hadoop/dfs/name
2013-08-20 14:10:08,947 ERROR org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem initialization failed.
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /var/lib/hadoop/cache/hadoop/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
	at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:316)
	at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:104)
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:427)
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:388)
	at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:277)
	at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:497)
	at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1298)
	at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1307)
2013-08-20 14:10:08,948 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /var/lib/hadoop/cache/hadoop/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
	at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:316)
	at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:104)
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:427)
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:388)
	at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:277)
	at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:497)
	at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1298)
	at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1307)
5:格式化HDFS,NameNode时候遇到不能创建文件的问题
 FATAL namenode.NameNode: Exception in namenode join
java.io.IOException: Cannot create directory /home/hadoop/YarnRun/name1/current
           at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.clearDirectory(Storage.java:301)
           at org.apache.hadoop.hdfs.server.namenode.NNStorage.format(NNStorage.java:523)
          at org.apache.hadoop.hdfs.server.namenode.NNStorage.format(NNStorage.java:544)
          at org.apache.hadoop.hdfs.server.namenode.FSImage.format(FSImage.java:147)
          at org.apache.hadoop.hdfs.server.namenode.NameNode.format(NameNode.java:837)
          at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1213)
          at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1320)
这是因为权限不够,有两种权限。一个是用户的问题,启动hadoop的用户与文件归属的用户不是同一个用户,这时候需要设定为同一个用户才可以;
第二种是虽然启动hadoop的用户与文件归属的用户是同一个,但是文件的读写权限不够,这时候通过chmod修改文件的权限。

6:格式化HDFS,NameNode时候遇到文件不能重命名的问题
ERROR namenode.FSImage: Unable to save image for /home/hadoop/YarnRun/name1
java.io.IOException: Could not rename temporary file /home/hadoop/YarnRun/name1/current/fsimage_0000000000000000000.md5.tmp to /home/hadoop/YarnRun/name1/current/fsimage_0000000000000000000.md5
at org.apache.hadoop.hdfs.util.AtomicFileOutputStream.close(AtomicFileOutputStream.java:77)
at org.apache.hadoop.hdfs.util.MD5FileUtils.saveMD5File(MD5FileUtils.java:145)
at org.apache.hadoop.hdfs.server.namenode.FSImage.saveFSImage(FSImage.java:855)
at org.apache.hadoop.hdfs.server.namenode.FSImage$FSImageSaver.run(FSImage.java:882)
at java.lang.Thread.run(Thread.java:662)
14/02/19 17:16:53 ERROR common.Storage: Error reported on storage directory Storage Directory /home/hadoop/YarnRun/name1
14/02/19 17:16:53 WARN common.Stordfs.namenode.name.dirage: About to remove corresponding storage: /home/hadoop/YarnRun/name1
这是一个低级错误,在定义dfs.namenode.name.dir属性中的value的时候定义了两个文件夹,但是都命名成为了name1,导致格式化的时候错误。解决方法很简单把其中的一个修改为name2就解决了。

7:在部署集群YARN的时候,遇到问题namenode Incompatible clusterIDs
这是因为你在运行YARN集群的时候,再次格式化了NameNode导致。在格式化NameNode的时候会生成一个集群的唯一ID,在所有的DataNode节点上你设置的数据文件记录中会有个VERSION文件记录了当期的集群ID,当启动DataNode的时候会以当前的VERSION与NameNode中的集群ID做比较如果不同那么就会报出错误,启动DataNode失败。
解决办法也有两个,第一个就是当你格式化NameNode的时候,把所有数据节点上的文件都删除,这样DataNode启动的时候会重现到NameNode拉取所需要的数据;
第二种是修改你数据节点上数据文件存放位置中的VERSION文件,让该文件中的clusterIDs与NameNode中的ID是一致的。VERSION文件内容示例:

  1 #Tue Mar 18 14:25:10 CST 2014
  2 storageID=DS-1603563053-192.168.100.5-50011-1392963732616
  3 clusterID=CID-8ac29142-6997-4ec2-b518-8ba90e3fd9eb
  4 cTime=0
  5 storageType=DATA_NODE
  6 layoutVersion=-47
~                      


二:MapReduce问题

1:hadoop /tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1

启动了集群之后发现namenode起来了,但是各个slave节点的datanode却都没起起来。去看namenode日志发现错误日志:

  1. INFO org.apache.hadoop.ipc.Server: IPC Server handler 1 on 9000, call addBlock(/opt/hadoop/tmp/mapred/system/jobtracker.info, DFSClient_502181644) from 127.0.0.1:2278: error: java.io.IOException: File /opt/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1  
  2. java.io.IOException: File /opt/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1  
  3.     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1271)   
  4.     at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:422)   
  5.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)   
  6.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)   
  7.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)   
  8.     at java.lang.reflect.Method.invoke(Method.java:597)   
  9.     at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:508)   
  10. at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:959)   
  11. at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:955)   
  12. at java.security.AccessController.doPrivileged(Native Method)   
  13. at javax.security.auth.Subject.doAs(Subject.java:396)   
  14. at org.apache.hadoop.ipc.Server$Handler.run(Server.java:953)  
具体原因还不是很清楚,当防火墙不关闭的时候可能出现,但是当异常宕掉整个系统再重启的时候也会出现。解决办法是master和slave同时重新格式化

2:ERROR mapred.JvmManager: Caught Throwable in JVMRunner. Aborting TaskTracker. 

java.lang.OutOfMemoryError: unable to create new native thread

在运行任务的过程中,计算突然停止,去计算节点查看TaskTracker日志,发现在计算的过程中抛出以上错误,经查证是因为你的作业打开的文件个数超过系统设置一个进程可以打开的文件的个数的上限。更改/etc/security/limits.conf的配置加入如下配置

hadoop soft nproc 10000
hadoop hard nproc 64000


版权声明:本文为博主原创文章,转载请注明来源。

CDH5.3配置Kerberos+LDAP+Sentry记录

系统环境说明 操作系统:Centos6.5 CDH版本:5.3 JDK版本:1.7 操作用户:root Kerberos版本:1.10.3 LDAP版本:2.4.40 Sentry版本:1...
  • qq1010885678
  • qq1010885678
  • 2016年09月06日 11:35
  • 7055

hadoop常见错误及处理方法

如果大家在安装的时候遇到问题,或者按步骤安装完后却不能运行Hadoop,那么建议仔细查看日志信息,Hadoop记录了详尽的日志信息,日志文件保存在logs文件夹内。 无论是启动,还是以后会经常用到...
  • yonghutwo
  • yonghutwo
  • 2013年06月30日 09:48
  • 36432

iOS 将http%3A%2F%2F解析为URL

NSString *str = @"http%3A%2F%2Fmyimg.ifeng.com%2F200%2F22%2F8a941d71c4df48a5%2F1418632228%2F8a941d71...
  • worldzhy
  • worldzhy
  • 2014年12月15日 17:37
  • 9455

http://blog.csdn.net/account/register.html?from=http%3a%2f%2fwrite.blog.csdn.net%2f%3fticket%3dST-93

org.xml.sax.SAXParseException; lineNumber: 174; columnNumber: 10; 元素类型为 "mapper" 的内容必须匹配 "(cache-ref...
  • qq_35034912
  • qq_35034912
  • 2016年12月09日 16:20
  • 203

hadoop: unable to create new native thread

1.系统环境
  • zhousongyue
  • zhousongyue
  • 2014年05月22日 16:40
  • 889

mysql安装笔记0822

1.下载mysql的源码安装包废了不少周折,最后直接在Google上搜mysql-5.5.tar.gz才在台湾的一个edu资源库中找到 2.rz -yeb到ubuntu上(之前装了SecureCRT)...
  • lzy340623339
  • lzy340623339
  • 2013年08月22日 22:58
  • 961

<一>Flex(Flex+j2EE)

步骤:1、新建一个Web Project工程,工程名为:flexDemo2、解压blazeds.war的文件,此时就有两个文件夹 META-INF和WEB-INF, 用解压后的WEB-INF直接覆盖项...
  • ProgramerBird
  • ProgramerBird
  • 2015年04月10日 17:13
  • 11877

de/encodeURI(Component)--"http%3A%2F%2Fwww.baidu.com%2Fasd%3Fa%3D123"

对于”http%3A%2F%2Fwww.baidu.com%2Fasd%3Fa%3D123”这种特殊字符被转义成16进制的字符串, 虽然知道”%3A”表示冒号(百分号”%”是转义符, 相当于正则当中的...
  • gong_zhe_511
  • gong_zhe_511
  • 2017年04月25日 11:28
  • 2053

ldap 网络账号

ldap网络帐号 1.ldap是什么 ldap目录服务认证,和windows活动目录类似,就是记录数据的一种方式 2.ldap客户端所须软件 [root@server37 ~]# vi...
  • bittersweet0324
  • bittersweet0324
  • 2017年04月13日 20:15
  • 318

在hadoop启动的时候,会出现各种各样的问题

在hadoop启动的时候,会出现各种各样的问题,NameNode,JobTracker等各个模块都会有莫名奇妙的问题出现,在这里对hdfs的问题进行一下简单的记录 1:HDFS initialize...
  • caoshichaocaoshichao
  • caoshichaocaoshichao
  • 2013年10月20日 01:10
  • 10182
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Hadoop】Hadoop/Yarn中hdfs与mapreduce相关问题汇总
举报原因:
原因补充:

(最多只允许输入30个字)