H02-启动hdfs时可能遇到的几个问题
启动hdfs时,有时候可能会遇到这样几种情况:
1)在主节点上执行start-dfs.sh命令启动hdfs,无法启动datanode。
2)在主节点上行启动hdfs,启动成功了,在各个节点上使用jps命令也能查询到相应的SecondaryNameNode、NameNode和DataNode进程,但是通过5007页面上却查询不到datanode,或者执行hdfs dfsadmin -report(hadoop dfsadmin -report)命令是显示available datanode个数为0;
一、第一种情况
我没遇到过这种情况,不过我感觉第一步应该是先去看namenode的日志(日志在namenode节点的$HADOOP_HOME/logs目录下),另外也可以从以下几个方面排查问题:
1)看一下slaves文件有没有配置正确
2)检查从namenode节点到datanode节点的免密登录是否配置正确;
3)测试一下从namenode上能否ping通datanode,datanode节点的防火墙有没有关(或者如果你的本意就是不关闭防火墙,而是只给hadoop开启特定的端口的话,那就使用telnet命令检查一下从namenode节点到datanode节点的特定端口能不能连接上)
4)还有一种比较特殊的情况,就是你的namenode和datanode节点上,用于安装hadoop环境的用户不一样,比如在namenode节点上用u1用户安装hadoop环境,而在datanode节点上则是用u2用户安装的hadoop环境。这种时候就会有问题,因为当你在namenode上启动hdfs时,肯定是用u1用户执行的命令(因为你是用u1用户安装的hadoop嘛,环境变量是配在这个用户下的),那么当namenode节点要远程登录到datanode节点上去启动datanode时,namenode默认是会使用当前用户也就是u1用户去登录datanode节点的,这个时候就会出错,因为datanode节点上没有u1用户,根本无法登录上datanode,更别说去启动datanode了。对于这个问题,我在网上偶然看到有人的解决方法是在配置masters和slaves时,不单单是写IP(比如192.168.137.22),而是要写上用户名,比如“u2@192.168.137.22”。正如我所说的,这是个比较特殊的问题,最好还是将hadoop集群的所有节点的安装用户保持一致。另外我感觉如果集群中的不同节点是用不同用户来安装hadoop环境的话,根本无法安装成功,虽然我在网上看到有朋友说他这么安装也成功了……我觉得无法安装成功是因为,这么来安装hadoop集群环境的话,首先namenode节点到datanode节点的免密登录就没法配置,因为在namenode节点上是以u1用户生成的公钥,因此在namenode节点上无法以u2用户的身份免密登录datanode节点——额…至少以我目前了解的ssh免密登录设置的知识来说是不行的…………
二、第二种情况
就我遇到错误,下面记录一下,错误从datanode的日志中可以查看到(日志在datanode节点的$HADOOP_HOME/logs目录下)
1)INFO org.apache.hadoop.ipc.RPC: Server at node1/192.168.137.21:9000 not available yet, Zzzzz...

目前我在hadoop1.2.1版本中遇到过这个问题,在hadoop二点几版本中暂时没遇到过。该问题的解决可参考《org.apache.hadoop.ipc.Client: Retrying connect to server异常的解决》,不过我的解决方法跟这篇博文有些许不一样,我只将hdfs主节点的/etc/hosts文件中的“127.0.0.1 主节点主机名”这一行给注释掉(如下图),然后重启hdfs集群就可以了,不需要每个节点都做修改,并且我也没有重新格式化hdfs。因为我感觉从datanode日志上可以看出,是datanode去连接namenode节点时出现了问题,datanode节点去解析namenode的hosts文件时解析不正确了,所以才导致问题的发生,跟datanode节点的hosts文件应该是没有关系的。并且不用重新格式化是因为我感觉……不知道怎么说,总之感觉还是……没关系…………

2)java.io.IOException: Incompatible clusterIDs in /usr/local/hadoop/tmp/dfs/data: namenode clusterID = CID-8e201022-6faa-440a-b61c-290e4ccfb006; datanode clusterID = clustername
这个问题我遇到的时候没有留下截图,后面由于其他原因导致集群启动不成功之后上网找解决方法时恰好看到有人贴出来了,所以也记录一下。
出现该问题是因为hdfs格式化次数太多了出了问题,导致子节点的cluster_id跟主节点的cluster_id不一致,所以导致子节点无法向主节点发送心跳信息,那么对主节点来说,该子节点就是dead的了。
这个问题的解决方法参考《Hadoop安装遇到的各种异常及解决办法》中的第二点异常。
3)这也是个没有保留出错日志信息的问题。出错是因为我的子节点的core-site.xml文件中fs.defaultFS项配置错了。
所以如果遇到了“datanode节点启动成功,但是namenode节点却检测不到该datanode”的情况时,可以检查一下此项配置,因为core-site.xml文件中的fs.defaultFS项配置就是记录集群中namenode节点的位置,如果配置错了,datanode就无法向正确的namenode节点发送心跳信息,namenode自然感知不到该datanode的存在了。
暂时记录这么多了……
H02-启动hdfs时可能遇到的几个问题的更多相关文章
- 错误解决记录-------------验证启动HDFS时遇到的错误
主要解决验证启动HDFS时: 1) jps:bash: jps: command not found... 原因:主要是java/bin 环境变量没配置好. 解决办法: 在 ~/.bash_prof ...
- Hadoop启动HDFS时DataNode未启动
在用$HADOOP_HOME/sbin/start-dfs.sh启动HDFS时发现只有NameNode和SecondaryNameNode启动,没有DataNode. 查看logs下的DataNode ...
- 启动HDFS时datanode无法启动的坑
启动HDFS 启动hdfs,进入sbin目录,也可以执行./start-all.sh - $cd /app/hadoop/hadoop-2.2.0/sbin - $./start-dfs.sh 在此之 ...
- 格式化hdfs后,hadoop集群启动hdfs,namenode启动成功,datanode未启动
集群格式化hdfs后,在主节点运行启动hdfs后,发现namenode启动了,而datanode没有启动,在其他节点上jps后没有datanode进程!原因: 当我们使用hdfs namenode - ...
- 启动HDFS之后一直处于安全模式org.apache.hadoop.hdfs.server.namenode.SafeModeException: Log not rolled. Name node is in safe mode.
一.现象 三台机器 crxy99,crxy98,crxy97(crxy99是NameNode+DataNode,crxy98和crxy97是DataNode) 按正常命令启动HDFS之后,HDFS一直 ...
- VS2010 VS2012 VS2013 VS2015启动调试时老是提示正在下载公共符号
VS2010 VS2012 VS2013 VS2015启动调试时老是提示正在下载公共符号,下载一些.dll文件,点取消后也能继续调试,但特别慢.解决方法:工具-选项,或者调试-选项和设置,将调试下的& ...
- Eclipse启动Tomcat时发生java.lang.IllegalArgumentException: <session-config> element is limited to 1 occurrence
在学习struts 2时,为了方便,直接从下载的struts的apps目录下的struts2-blank.war压缩包下的WEB-INF\复制的web.xml,当我启动Tomcat时,发生 java. ...
- 启动mysql时显示:/tmp/mysql.sock 不存在的解决方法
启动mysql时显示:/tmp/mysql.sock 不存在的解决方法 启动mysql时报错的解决(mysql 5.0.45 redhat as 43) ====================== ...
- [转]Eclipse启动Tomcat时45秒超时解决方法
原文地址:http://it.oyksoft.com/post/6577/ Eclipse启动Tomcat时,默认配置的启动超时时长为45秒.假若项目启动超过45秒将会报错.两种解决方法:1.改XML ...
随机推荐
- 新建maven web 项目后,出现的小问题
问题一:Description Resource Path Location TypeCannot change version of project facet Dynamic Web Module ...
- MySQL性能调优与架构设计——第 14 章 可扩展性设计之数据切分
第 14 章 可扩展性设计之数据切分 前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我 ...
- (字符串处理)Fang Fang -- hdu -- 5455 (2015 ACM/ICPC Asia Regional Shenyang Online)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=5455 Fang Fang Time Limit: 1500/1000 MS (Java/Others) ...
- noip第11课作业
1. 数字比较 定义一个函数check(n,d),让它返回一个布尔值,如果数字d在正整数n的某位中出现则返回true,否则返回false. 例如:check(325719,3)==true:ch ...
- .Net socket服务器编程之为何也高效
说到Socket编程,肯定大部分人举手c,c++.可惜现在已没有机会去追随并达到写服务器的水平,所以将就下还是考虑c#版的Socket服务器吧. 经过一番查询,试用.一些数据和事实还是浮出水面,同时对 ...
- Python学习-18.Python中的错误处理(三)
在某些情况下,我们需要定义自己的异常并且抛出 先定义一个错误: class MyError(BaseException): def __init__(self): pass 上面定义了一个叫MyErr ...
- 项目笔记---事半功倍之StyleCop(一)
前言 曾几何时,你是否在看别人代码的时候总是在抱怨代码没有注释,命名不规范,代码风格不统一,代码可读性差?是否有一个适合团队开发规范的检查工具? 答案就是大名鼎鼎的StyleCop代码检查插件,有了这 ...
- Replication--查看未分发命令和预估所需时间
当复制有延迟时,我们可以使用复制监视器来查看各订阅的未分发命令书和预估所需时间,如下图: 但是当分发和订阅数比较多的时候,依次查看比较费时,我们可以使用sys.sp_replmonitorsubscr ...
- 如何连接MSSQLSERVER2014(其他版本数据库大体相同)
购买了服务器后我在上面安装了SqlServer2014,但是程序中总是远程连接不上,特此记录一下: 一.一些基本设置如下链接: 转载自:https://blog.sun0816.com/20381.h ...
- Asp.Net MVC EF之一:使用Database类在EF框架中执行Sql语句
引言 从EF6开始,增加了DateBase类,他通过从 DbContext 对象获取此类的实例.可用于管理支持数据库上下文或连接的实际数据库.这包括创建.删除和检查数据库的存在. 在6以前,我们使用E ...