hadoop集群启动时DataNode节点启动失败

本文记录了Hadoop集群中DataNode初始化失败的问题及其解决办法。主要错误为DataNode与NameNode的clusterID不匹配,通过修改特定文件中的clusterID或直接清理相关目录解决了该问题。

这一批博文是博主由博客园搬移过来的,所以时间上可能存在混乱,希望大家见谅!


错误日志如下:

************************************************************/
2018-03-07 18:57:35,121 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: registered UNIX signal handlers for [TERM, HUP, INT]
2018-03-07 18:57:35,296 WARN org.apache.hadoop.hdfs.server.common.Util: Path /usr/java/data/dfs/data should be specified as a URI in configuration files. Please update hdfs configuration.
2018-03-07 18:57:36,059 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2018-03-07 18:57:36,153 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2018-03-07 18:57:36,153 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode metrics system started
2018-03-07 18:57:36,155 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Configured hostname is Centpy
2018-03-07 18:57:36,208 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Opened streaming server at /0.0.0.0:50010
2018-03-07 18:57:36,213 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Balancing bandwith is 1048576 bytes/s
2018-03-07 18:57:36,264 INFO org.mortbay.log: Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
2018-03-07 18:57:36,296 INFO org.apache.hadoop.http.HttpServer: Added global filter 'safety' (class=org.apache.hadoop.http.HttpServer$QuotingInputFilter)
2018-03-07 18:57:36,298 INFO org.apache.hadoop.http.HttpServer: Added filter static_user_filter (class=org.apache.hadoop.http.lib.StaticUserWebFilter$StaticUserFilter) to context datanode
2018-03-07 18:57:36,298 INFO org.apache.hadoop.http.HttpServer: Added filter static_user_filter (class=org.apache.hadoop.http.lib.StaticUserWebFilter$StaticUserFilter) to context static
2018-03-07 18:57:36,298 INFO org.apache.hadoop.http.HttpServer: Added filter static_user_filter (class=org.apache.hadoop.http.lib.StaticUserWebFilter$StaticUserFilter) to context logs
2018-03-07 18:57:36,300 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Opened info server at 0.0.0.0:50075
2018-03-07 18:57:36,302 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: dfs.webhdfs.enabled = false
2018-03-07 18:57:36,302 INFO org.apache.hadoop.http.HttpServer: Jetty bound to port 50075
2018-03-07 18:57:36,302 INFO org.mortbay.log: jetty-6.1.26
2018-03-07 18:57:36,592 INFO org.mortbay.log: Started SelectChannelConnector@0.0.0.0:50075
2018-03-07 18:57:36,942 INFO org.apache.hadoop.ipc.Server: Starting Socket Reader #1 for port 50020
2018-03-07 18:57:36,962 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Opened IPC server at /0.0.0.0:50020
2018-03-07 18:57:36,971 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Refresh request received for nameservices: null
2018-03-07 18:57:36,985 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Starting BPOfferServices for nameservices: <default>
2018-03-07 18:57:36,988 WARN org.apache.hadoop.hdfs.server.common.Util: Path /usr/java/data/dfs/data should be specified as a URI in configuration files. Please update hdfs configuration.
2018-03-07 18:57:36,996 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Block pool <registering> (storage id unknown) service to Centpy/192.168.86.127:9000 starting to offer service
2018-03-07 18:57:37,000 INFO org.apache.hadoop.ipc.Server: IPC Server Responder: starting
2018-03-07 18:57:37,003 INFO org.apache.hadoop.ipc.Server: IPC Server listener on 50020: starting
2018-03-07 18:57:37,305 INFO org.apache.hadoop.hdfs.server.common.Storage: Lock on /usr/java/data/dfs/data/in_use.lock acquired by nodename 7541@Centpy
2018-03-07 18:57:37,306 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for block pool Block pool BP-7509759-192.168.86.127-1520419708605 (storage id ) service to Centpy/192.168.86.127:9000
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /usr/java/data/dfs/data is in an inconsistent state: node type is incompatible with others.
    at org.apache.hadoop.hdfs.server.common.Storage.setStorageType(Storage.java:1051)
    at org.apache.hadoop.hdfs.server.datanode.DataStorage.setFieldsFromProperties(DataStorage.java:304)
    at org.apache.hadoop.hdfs.server.common.Storage.readProperties(Storage.java:921)
    at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:372)
    at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:191)
    at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:219)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:837)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:808)
    at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:280)
    at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:222)
    at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:664)
    at java.lang.Thread.run(Thread.java:745)
2018-03-07 18:57:37,307 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Ending block pool service for: Block pool BP-7509759-192.168.86.127-1520419708605 (storage id ) service to Centpy/192.168.86.127:9000
2018-03-07 18:57:37,313 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Removed Block pool BP-7509759-192.168.86.127-1520419708605 (storage id )
2018-03-07 18:57:39,313 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Exiting Datanode
2018-03-07 18:57:39,315 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 0
2018-03-07 18:57:39,322 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at Centpy/192.168.86.127
************************************************************/

日志说明了datanode的clusterID 和 namenode的clusterID 不匹配。

解决方法:根据日志进入路径(/usr/java/data/dfs/data)。此时,我们应该能看见其下有/data和/name两个目录。将name/current下的VERSION中的clusterID复制到data/current下的VERSION中,覆盖掉原来的clusterID,让两个保持一致;或者,直接删除掉data和name两个目录下的内容,然后重启

注意:在重启之前,一定要结束掉hadoop所有进程(sbin/stop-all.sh),否则会出现其他错误。

现在,我们重启之后输入jps就可以看到以下进程了:

8862 NameNode
8982 DataNode
9131 SecondaryNameNode
9506 Jps
9374 NodeManager
9269 ResourceManager

 

 以上就是博主为大家介绍的这一板块的主要内容,这都是博主自己的学习过程,希望能给大家带来一定的指导作用,有用的还望大家点个支持,如果对你没用也望包涵,有错误烦请指出。如有期待可关注博主以第一时间获取更新哦,谢谢!

 

 版权声明:本文为博主原创文章,未经博主允许不得转载。

Hadoop集群搭建过程中,DataNode节点丢失是一个常见问题。通常情况下,DataNode节点丢失可能是由于配置错误、多次格式化NameNode、网络问题或存储路径异常导致的。以下是恢复或重新配置DataNode的方法。 ### 1. 检查并修复DataNode ID不一致的问题 当Hadoop集群启动时,NameNode和DataNode之间需要通过唯一标识符(ID)进行通信。如果多次执行`hdfs namenode -format`命令,会导致DataNode的ID发生变化,从而与NameNode不匹配,最终导致DataNode无法注册到NameNode。 **解决方法:** - 进入DataNode所在节点,找到`hadoop.tmp.dir`指定的目录(通常在`core-site.xml`中定义)。 - 删除`data`文件夹下的内容,该文件夹用于存储DataNode的数据。 - 重新启动DataNode服务,系统会自动生成新的ID并与NameNode同步 [^4]。 ### 2. 检查Hadoop配置文件 确保所有节点的配置文件保持一致性,尤其是以下关键配置文件: - `core-site.xml` - `hdfs-site.xml` 确认以下参数正确设置: - `fs.defaultFS` 在`core-site.xml`中指向正确的NameNode地址。 - `dfs.datanode.data.dir` 在`hdfs-site.xml`中指定的DataNode数据存储路径是否有效且具有读写权限。 ### 3. 确保SSH免密登录正常 在集群环境中,NameNode需要通过SSH连接到各个DataNode节点以执行相关操作。如果SSH免密登录配置不正确,可能导致DataNode无法正常启动。 **验证步骤:** - 使用`ssh datanode-hostname`命令测试从NameNode到DataNode的连接。 - 如果提示输入密码,则说明SSH免密配置未生效,需重新配置 [^3]。 ### 4. 更新`slaves`文件 确保NameNode上的`slaves`文件(位于Hadoop安装目录下的`etc/hadoop/slaves`)中包含所有DataNode节点的主机名或IP地址。遗漏此步骤将导致NameNode无法识别新加入的DataNode节点 [^3]。 ### 5. 检查防火墙与端口开放情况 DataNode与NameNode之间的通信依赖于特定端口(如8020、9000等)。如果防火墙阻止了这些端口的通信,DataNode将无法连接到NameNode。 **解决方法:** - 执行`systemctl stop firewalld`临时关闭防火墙进行测试。 - 若确认是防火墙问题,可使用`firewall-cmd`命令开放相应端口 [^2]。 ### 6. 查看日志文件定位具体错误 DataNode启动失败的具体原因可以通过查看日志文件来定位。日志文件通常位于`logs/`目录下,重点关注`hadoop-datanode-<hostname>.log`文件。 常见的错误包括: - 存储路径不存在或权限不足。 - 磁盘空间不足。 - 网络连接超时。 ### 示例代码:检查DataNode状态 ```bash # 登录到DataNode节点后执行以下命令 jps # 正常情况下应看到 DataNode 进程 ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值