Hadoop运行报错,进入安全模式

本文详细解析了Hadoop运行中出现的错误信息,包括ResourceManager连接、作业清理失败及名称节点安全模式问题。深入分析了错误原因,如数据节点丢失、系统断电等,并提供了解决步骤,如退出安全模式和执行健康检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Hadoop运行时报如下错误:

18/10/24 03:16:30 INFO client.RMProxy: Connecting to ResourceManager at hdp-node-01/192.168.186.101:8032
18/10/24 03:16:32 INFO mapreduce.JobSubmitter: Cleaning up the staging area /tmp/hadoop-yarn/staging/root/.staging/job_1540365141499_0001
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Cannot delete /tmp/hadoop-yarn/staging/root/.staging/job_1540365141499_0001. Name node is in safe mode.
The reported blocks 62 needs additional 3 blocks to reach the threshold 0.9990 of total blocks 65.
The number of live datanodes 2 has reached the minimum number 0. Safe mode will be turned off automatically once the thresholds have been reached.
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkNameNodeSafeMode(FSNamesystem.java:1335)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.delete(FSNamesystem.java:3681)
        at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.delete(NameNodeRpcServer.java:953)
        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.delete(ClientNamenodeProtocolServerSideTranslatorPB.java:623)
        at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2217)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2213)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1754)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2213)

        at org.apache.hadoop.ipc.Client.call(Client.java:1476)
        at org.apache.hadoop.ipc.Client.call(Client.java:1413)
        at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:229)
        at com.sun.proxy.$Proxy10.delete(Unknown Source)
        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.delete(ClientNamenodeProtocolTranslatorPB.java:545)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:191)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
        at com.sun.proxy.$Proxy11.delete(Unknown Source)
        at org.apache.hadoop.hdfs.DFSClient.delete(DFSClient.java:2053)
        at org.apache.hadoop.hdfs.DistributedFileSystem$14.doCall(DistributedFileSystem.java:707)
        at org.apache.hadoop.hdfs.DistributedFileSystem$14.doCall(DistributedFileSystem.java:703)
        at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
        at org.apache.hadoop.hdfs.DistributedFileSystem.delete(DistributedFileSystem.java:714)
        at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:251)
        at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)
        at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1754)
        at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287)
        at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1308)
        at org.apache.hadoop.examples.WordCount.main(WordCount.java:87)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:71)
        at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:144)
        at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:74)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

原因分析

由于系统断电,主动中止进程,内存不足等原因导致dataNode丢失超过设置的丢失百分比,系统自动进入安全模式。

 

解决办法(Solution)*

安装HDFS客户端,并执行如下命令:

    1) 执行命令退出安全模式

hadoop dfsadmin -safemode leave

    2) 执行健康检查,删除损坏掉的block

hdfs fsck  /  -delete

注意: 这种方式会出现数据丢失,损坏的block会被删掉

### 解决 YARN 启动时遇到的权限被拒绝问题 当遇到 `Permission denied (publickey,password)` 的错误提示,在 Hadoop 集群环境中通常意味着 SSH 免密登录未正确配置。为了使 YARN 或其他 Hadoop 组件能够顺利启动并管理节点间的通信,确保集群内各节点间已成功建立 SSH 免密码认证至关重要。 #### 生成SSH密钥对 如果尚未创建过 SSH 密钥,则需先通过如下命令来生成一对新的 RSA 类型的密钥: ```bash ssh-keygen -t rsa -C "your_email@example.com" ``` 此操作会在用户的 `.ssh` 文件夹下自动生成名为 `id_rsa` 和 `id_rsa.pub` 的私钥与公钥文件[^4]。 #### 复制公钥至目标主机 对于单机环境或是需要实现本地回环连接的情况来说,同样要将当前机器上的公钥添加到授权列表中去。具体做法可以是在同一台计算机的不同终端窗口执行下面这条指令完成本机免密登录设置;而对于分布式部署模式下的多台服务器之间互信关系的确立,则要把每台工作节点的公钥都追加进所有其他成员对应的 `~/.ssh/authorized_keys` 文件里: ```bash cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys # 修改权限以增强安全性 ``` 针对跨设备互联的情形,推荐利用专门设计用于简化这一过程的工具——`ssh-copy-id` 来辅助操作: ```bash ssh-copy-id user@hostname_or_ip_address ``` 这里假设 `user` 是远程系统的用户名而 `hostname_or_ip_address` 则代表对方地址信息[^1]。 #### 测试连通性 做完上述调整之后,建议立即测试能否无需输入密码就能顺利完成从一台机器向另一台发起的安全 Shell 连接请求。比如尝试运行这样的命令看看是否可以直接进入远端 shell 而不弹出任何询问框: ```bash ssh user@localhost # 对于集群中的其它节点也应如此验证 ssh user@remote_node_hostname_or_IP ``` 一旦确认无误后就可以继续按照常规流程启动 Yarn 及其余关联服务了。不过在此之前还有一点需要注意的是,请务必保证 `/etc/hosts` 中有关联节点名称解析记录的存在以便让整个网络内的资源定位更加顺畅[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值