问题:

搭建伪Hadoop集群的时候,运行命令:

hdfs namenode -format

格式化或者说初始化namenode。

然后用命令:

start-dfs.sh

来启动hdfs时,jps发现datanode先是启动了一下,然后就挂掉了,在http://192.168.195.128:50070 (HDFS管理界面)也看不到datanode的信息。

然后去datanode的日志上面看,看到这样的报错:

出错原因:(来自博客https://blog.csdn.net/qq_30136589/article/details/51638069)

hadoop的升级功能需要data-node在它的版本文件里存储一个永久性的clusterID,当datanode启动时会检查并匹配namenode的版本文件里的clusterID,如果两者不匹配,就会出现"Incompatible clusterIDs"的异常。
  每次格式化namenode都会生成一个新的clusterID, 如果只格式化了namenode,没有格式化此datanode, 就会出现”java.io.IOException: Incompatible namespaceIDs“异常。
  参见官方CCR[HDFS-107]

这就解释了,为什么我第一次是成功的,后面一直都datanode挂掉的情况。

因为第一次成功后,每次再跑hdfs之前我都格式化或者说初始化了hdfs的配置。然后,namenode的clusterId就会清空,在你跑start-dfs.sh的时候,就会重新生成一个clusterId。但你datanode没有初始化噢,就是说datanode里面的那个clusterId还是之前那个,于是就出现了两者不匹配,报错了。

解决方法:

1.在namenode机器上:   找到${dfs.namenode.name.dir}/current/VERSION 里找到clusterID。这个dfs.namenode,name.dir在hdfs-site.xml可以找到你这个路径的真正路径。:

这里的话就是在/home/hadoop/data/name/current下找到VERSION文件,然后里面有个clusterId,找到它复制了:

2.在出问题的datanode上:    找到$dfs.datanode.data.dir,这个也是在hdfs-site.xml配置文件可以找到这个路径具体的位置:

像我的机器,就是在/home/hadoop/data/data/current下找到VERSION文件,然后里面也有个clusterId:

然后你要做的就是把(1)中复制的namenode的clusterId覆盖了出问题的datanode的clusterId。

3.在问题节点重新重启你的datanode,也就是重新跑命令:

start-dfs.sh

然后datanode就重新跑起来了。在浏览器上访问那个管理界面也看到datanode了:

注意:

1.配置完clusterId后不要再hdfs namenode -format格式化或者说初始化namenode了。

2.记得把所有机器的防火墙给关了,不然可能通信上会有所拦截。(反正我一开始没关,然后配好了clusterId在浏览器的Hadoop管理界面上没能看到datanode,一关掉所有机器的防火墙就好了~)

Hadoop启动datanode失败,clusterId有问题的更多相关文章

  1. Hadoop启动dataNode失败,却没有任何报错

    问题描述: centos7,伪分布模式下,启动datanode后,通过JPS查看发现没有相关进程,在日志文件里也没有任何提示.通过百度,网上一堆说什么vesion 的ID不一致,不能解决我的问题. 经 ...

  2. hadoop启动 datanode的live node为0

    hadoop启动 datanode的live node为0 浏览器访问主节点50070端口,发现 Data Node 的 Live Node 为 0 查看子节点的日志 看到 可能是无法访问到主节点的9 ...

  3. hadoop启动name失败

    namenode失败十分的常见, 1.java.io.EOFException; Host Details : local host is: "hadoop1/192.168.41.134& ...

  4. 当Hadoop 启动节点Datanode失败解决

    Hadoop 启动节点Datanode失败解决 [日期:2014-11-01] 来源:Linux社区  作者:shuideyidi [字体:大 中 小] 当我动态添加一个Hadoop从节点的之后,出现 ...

  5. Hadoop在linux下无法启动DataNode解决方法

    最近重新捡起了Hadoop,所以博客重新开张- 首先描述一下我的问题:这次我使用eclipse在Ubuntu上运行hadoop程序.首先,按照厦门大学数据库实验室的eclipse下运行hadoop程序 ...

  6. Hadoop重新格式namenode后无法启动datanode的问题

    这个很简单的哇~ 格式化namenode之后就会给namenode的ClusterId重新生成,导致与datanode中的ClusterId不一致而无法启动datanode 解决方法: 进入hadoo ...

  7. 解决Hadoop集群hdfs无法启动DataNode的问题

    问题描述: 在hadoop启动hdfs的之后,使用jps命令查看运行情况时发现hdfs的DataNode并没有打开. 笔者出现此情况前曾使用hdfs namenode -format格式化了hdfs ...

  8. ssh IP打通,hadoop启动失败

    ssh ip 无密码打通,hadoop启动失败 报错为:host'主机名' can't be established. 纠结了接近一个多小时 之后必须ssh 主机名 , yes一下,发现hadoop能 ...

  9. Hadoop的datanode无法启动

    Hadoop的datanode无法启动 hdfs-site中配置的dfs.data.dir为/usr/local/hadoop/hdfs/data 用bin/hadoop start-all.sh启动 ...

随机推荐

  1. .PHP生成静态html文件的方法

    1. [代码][PHP]代码     1,下面使用模版的一个方法!   <?php $fp = fopen ("templets.html","a");  ...

  2. 字符编码乱码问题(servlet底层 编码大揭秘)

    好多初学者会遇到,请求过去的信息内包含中文(一般会是get方式提交过去的请求会出现).好郁闷,这是为什么呢.有下面分析下,说的不好可以吐槽 话说我们能遇到这种编码的问题,归根结底就是这  这 web开 ...

  3. legend2---开发日志12(vue如何进一步学习)

    legend2---开发日志12(vue如何进一步学习) 一.总结 一句话总结:还是得找教程(比如视频),自己摸索太浪费时间,也容易踩坑和抓不住重点 还是得找教程(比如视频),自己摸索太浪费时间,也容 ...

  4. !function(){}()和function(){}()区别

    控制台打印结果如下所示,接下来看一下具体运行,参考https://swordair.com/function-and-exclamation-mark/: 让一个函数声明语句变成了一个表达式

  5. C语言教学杂记——字母排序

    一个人在被告诉一个问题应该怎么被解决后,而且亲身试验效果OK后,一旦遇到类似的问题,就会条件反射般直接拿这个方法来用了.很少会去想为什么要用这个方法,会不会有什么隐患,还有没有别的方法呢,等等这些问题 ...

  6. Multipath TCP on iOS11 : A closer look at the TCP Options(转)

    Multipath TCP uses a variety of TCP options to use different paths simultaneously. Several Multipath ...

  7. Ubuntu16.04 安装Python3.6 报错

    问题: 在安装Python 3.6,执行make install 时出现以下错误: zipimport.ZipImportError: can't decompress data; zlib not ...

  8. visual editor ve1.5下载

    eclipse官网的ve下载不了,下面这个能下 http://sourceforge.net/projects/visualeditor/files/latest/download

  9. Lightoj1014【基础题】

    题意: 有C个人,安排了P个吃的,每个人会吃Q个吃的,最后留下L个吃的:求所有可能的Q,从小到大输出,要保证Q>L; 思路: 其实就是求出P-L的所有数的约数,然后这个约数>L的话就满足: ...

  10. __str__,__repr__

    目录 __str__ __repr__ __str__ 打印时触发 class Foo: pass obj = Foo() print(obj) <__main__.Foo object at ...