启动hadoop集群的时候jobtracker日志里报这个异常,求高手指导是啥原因导致的,怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了启动hadoop集群的时候jobtracker日志里报这个异常,求高手指导是啥原因导致的,怎么解决相关的知识,希望对你有一定的参考价值。

org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /root/program/hadoop_temp/mapred/system. Name node is in safe mode.

这个应该是因为节点版本不同的原因,你格式化节点次数多了,从机上的节点版本就会混乱,我也遇到这个问题了,,,根本没法改,改了这个会有那个错误,,,
所以我的解决办法是:删除所有机器上的hadoop环境,从新搭,按步骤走就ok了,,
参考技术A Name node is in safe mode.那么在hadoop的bin目录下执行./hadoop dfsadmin -safemode leave.即可退出安全模式。追问

不好意思,我没有表达清楚。
就是每次启动集群,会直接报这个异常,我是想知道怎么解决启动就报这个异常。

追答

这个只要执行一遍,就会退出安全模式的,如果你是测试用的,建议你重新format,重新启动hadoop。

追问

我的问题就是format之后启动Hadoop报这个异常,format重启,手动关闭安全模式都不能解决。

文件 jobtracker.info 只能复制到 0 个节点,而不是 1 个

【中文标题】文件 jobtracker.info 只能复制到 0 个节点,而不是 1 个【英文标题】:File jobtracker.info could only be replicated to 0 nodes, instead of 1 【发布时间】:2013-03-13 05:05:21 【问题描述】:

我正在尝试在Fedora 17 上设置Hadoop 集群。 当我给/bin/star-all.sh 命令时,守护进程正在主节点和从节点上启动。 但是当我在主节点上查看数据节点的日志文件时,我得到以下 EROOR

ERROR org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:hadoop1 cause:java.io.IOException: 文件 /home/hadoop1/mapred/system/jobtracker.info 只能复制到 0 个节点,而不是 1

2013-03-23 15:37:08,205 INFO org.apache.hadoop.ipc.Server: IPC Server handler 5 on 9100, call addBlock(/home/hadoop1/mapred/system/jobtracker.info, DFSClient_-838454688 , null) from 127.0.0.1:40173: error: java.io.IOException: File /home/hadoop1/mapred/system/jobtracker.info 只能复制到 0 个节点,而不是 1 java.io.IOException:文件 /home/hadoop1/mapred/system/jobtracker.info 只能复制到 0 个节点,而不是 1 个 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1558) 在 org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:696) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 org.apache.hadoop.ipc.RPC$Server.call(RPC.java:563) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1388) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1384) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:415) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) 在 org.apache.hadoop.ipc.Server$Handler.run(Server.java:1382)

我也在尝试运行 wordcound 程序。使用命令将数据复制到 HDFS 时

$bin/hadoop dfs -copyFromLocal /home/hadoop1/Documents/wordcount/ /home/hadoop1/hdfs/data 我收到以下错误

WARN hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /home/hadoop1/hdfs/data/wordcount/pg20417.txt 只能复制到 0 个节点,而不是 1 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1558) 在 org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:696) 在 sun.reflect.GeneratedMethodAccessor5.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 org.apache.hadoop.ipc.RPC$Server.call(RPC.java:563) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1388) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1384) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:415) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) 在 org.apache.hadoop.ipc.Server$Handler.run(Server.java:1382)

at org.apache.hadoop.ipc.Client.call(Client.java:1070)
at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:225)
at $Proxy1.addBlock(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59)
at $Proxy1.addBlock(Unknown Source)
at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:3510)
at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:3373)
at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2600(DFSClient.java:2589)
at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2829)

13/03/23 15:41:05 WARN hdfs.DFSClient: 块空错误数据节点 [0] 节点的错误恢复 == null 13/03/23 15:41:05 警告 hdfs.DFSClient: 无法获取块位置。源文件“/home/hadoop1/hdfs/data/wordcount/pg20417.txt” - 正在中止... copyFromLocal: java.io.IOException: 文件 /home/hadoop1/hdfs/data/wordcount/pg20417.txt 只能复制到 0 个节点,而不是 1 个 13/03/23 15:41:05 错误 hdfs.DFSClient: 异常关闭文件 /home/hadoop1/hdfs/data/wordcount/pg20417.txt : org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /home/hadoop1/hdfs/data/wordcount/pg20417.txt 只能复制到0个节点,而不是1个 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1558) 在 org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:696) 在 sun.reflect.GeneratedMethodAccessor5.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 org.apache.hadoop.ipc.RPC$Server.call(RPC.java:563) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1388) 在 org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1384) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:415) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) 在 org.apache.hadoop.ipc.Server$Handler.run(Server.java:1382)

感谢您在这方面的帮助..

【问题讨论】:

检查您的名称节点的日志 - 您是否连接了任何数据节点?如果没有,则检查数据节点的日志。这个问题已经问过很多次了,通常是数据节点没有运行,或者tmp目录下配置了dfs.data.dir,重启机器后清除 我检查了 datanode 日志。它显示 Retrying connect to server:localhost/127.0.0.1:9100: 已经尝试了 9 次...日志文件的最后一行是 localhost/127.0.0.1 的服务器: 9100 还没有。我是 Hadoop 的新手..这个错误的原因可能是什么.. 我尝试修改一些配置文件..现在我在 Datanode 机器上收到 NORouteToHostException..是防火墙阻塞端口的问题吗?我们在大学校园内安装了 SonicWall 防火墙... 您是要在伪集群中运行(都在同一台机器上?)还是在具有 2 台以上机器的真实集群中运行? 【参考方案1】:

我出现此错误的原因是磁盘空间不足(约 200MB 不够)。

【讨论】:

【参考方案2】:

这个错误的另一个原因(我遇到过)是一个混乱的 /etc/hosts 文件导致 namenode 只在环回接口上监听。

这导致 datanodes 无法连接到 namenode 并且没有达到复制级别作为副作用。有关更多详细信息,请参阅namenode rejecting connections bug。

【讨论】:

【参考方案3】:

我删除了 HDFS 上的 jobtracker.info,然后它就可以工作了。 Hadoop 似乎对其进行了改造

【讨论】:

【参考方案4】:

我设法解决了这个问题...

步骤 I) 主节点和从节点计算机上的防火墙处于活动状态.. 我通过以下命令禁用它“systemctl disable iptables.service”

第二步)我在 slave 的 core-sites.xml 配置文件中错误地将“hdfs://localhost:9100”分配给了“fs.default.name”。我把它改成了“hdfs://master:9100”

现在我的 Hadoop 集群已启动..

感谢克里斯的热心帮助...

【讨论】:

以上是关于启动hadoop集群的时候jobtracker日志里报这个异常,求高手指导是啥原因导致的,怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

文件 jobtracker.info 只能复制到 0 个节点,而不是 1 个

Hadoop JobTracker 内存使用量增加v

Hadoop 2.6集群mapred-site.xml jobtracker端口未监听

hadoop(两台win7+cygwin+hadoop)启动后日志都没有错,运行一个程序出错了:

如何查看Hadoop运行过程中产生日志

Hadoop namenode无法启动问题解决