problems_hadoop
problems_hadoop
1 启动Hadoop集群sbin/start-dfs.sh,DataNode没有启动
RCA
多次格式化namenode导致的namenode与datanode之间的不一致(多次格式化,版本不一致)
solution
HADOOP_HOME=/develop/hadoop-2.7.5
- 先关闭dfs:$HADOOP_HOME/sbin/stop-dfs.sh
- 删除HADOOP_HOME下的hadoopDatas, logs和temp文件夹
rm -rf $HADOOP_HOME/hadoopDatas/ $HADOOP_HOME/logs/ $HADOOP_HOME/temp/ - 格式化集群:$HADOOP_HOME/bin/hdfs namenode -format
- 重启集群:$HADOOP_HOME/sbin/start-dfs.sh
- 查看进程:jps
note
本solution仅针对数据不重要的环境,如果数据重要,则不能格式化,需要其他方法。
2 执行"hdfs dfs ls /"报错
desc: 执行如下命令报错:
[root@node1 customShells]# hdfs dfs -ls /
Warning: fs.defaultFS is not set when running "ls" command.
RCA: /usr/bin/ 下存在 hadoop和hdfs可执行文件,usr/bin 是优先查找的路径,所以先找到了 、usr/bin 下面的hdfs,直接执行了。 执行的不是你安装目录下的文件,所以读取不到你hadoop的配置。
可以执行 which hadoop和which hdfs来查找这2个命令所在位置。
solution: 重命名或删除/usr/bin/下的这2个命令。
note: 最后,一定记得执行 source /etc/profile 命令,否则系统会找不到hdfs命令。
3 hdfs管理界面:Summary部分,Configured Capacity: 0 B
desc:
hdfs管理界面:Summary部分,Configured Capacity: 0 B。正常应该不是0,而是显示系统分配给hdfs的剩余容量。
RCA:
NameNode的clusterID和DataNode的不一致,所以未能启动。之所以会这样,是因为我们执行了多次bin/hdfs namenode -format命令,导致NameNode的clusterID改变而DataNode却没变。有时也可能是因为data和name文件夹的权限问题。
网上解决步骤:
- 停止所有进程:sbin/stop-all.sh
- 将namenode的clusterID(在/develop/hadoop-2.7.5/hadoopDatas/namenodeDatas/current/VERSION文档中)复制到datanode的clusterID(在/develop/hadoop-2.7.5/hadoopDatas/datanodeDatas/current/VERSION文档中)
- 启动所有进程 /sbin/start-all.sh
- 检验
实际操作发现还是不行;于是删除整个hadoopDatas,重新创建hadoopDatas文件夹以及下面的子文件夹,然后重新格式化bin/hdfs namenode -format,再启动各项服务,解决。 - 小结:
bin/hdfs namenode -format该命令仅执行一次,以后尽量不要执行,因为一执行,则所有数据都丢失!并且,导致NameNode的clusterID和DataNode的不一致,从而系统出错!
4 执行[root@node01 hadoop-2.6.0-cdh5.14.0]# sbin/start-dfs.sh 后,namenode未启动
desc:
执行[root@node01 hadoop-2.6.0-cdh5.14.0]# sbin/start-dfs.sh 后,namenode未启动。
解决步骤:
查看/develop/hadoop-2.6.0-cdh5.14.0/logs/hadoop-root-namenode-node01.hadoop.com.log日志文件,发现报错信息:
2019-05-22 00:52:44,132 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimage
java.io.IOException: NameNode is not formatted.
2019-05-22 00:52:44,251 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
java.io.IOException: NameNode is not formatted.
RCA:
namenode未格式化。
solution:
三台机器上,递归删除以下目录删除:
rm -rf /develop/hadoop-2.6.0-cdh5.14.0/hadoopDatas/
三台机器上,重新创建以下目录:
mkdir -p /develop/hadoop-2.6.0-cdh5.14.0/hadoopDatas/tempDatas
mkdir -p /develop/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas
mkdir -p /develop/hadoop-2.6.0-cdh5.14.0/hadoopDatas/datanodeDatas
mkdir -p /develop/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits
mkdir -p /develop/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/snn/name
mkdir -p /develop/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/snn/edits
node01上,执行:
bin/hdfs namenode -format
node01上,执行:
cd /develop/hadoop-2.6.0-cdh5.14.0/
sbin/start-dfs.sh
sbin/start-yarn.sh
sbin/mr-jobhistory-daemon.sh start historyserver
5 删除hdfs上的内容报错:rm: Cannot delete /wxcm/ Name node is in safe mode.
desc: 在执行删除hdfs上的内容时(hdfs dfs -rm -f -r -skipTrash /wxcm)报错:rm: Cannot delete /wxcm/ Name node is in safe mode.
RCA: 这是因为在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。
solution:
(1)只需要等待一会儿即可;
(2)可以通过以下命令来手动离开安全模式:hdfs dfsadmin -safemode leave
用户可以通过hdfs dfsadmin -safemode value 来操作安全模式,参数value的说明如下:
hdfs dfsadmin -safemode enter - 进入安全模式
hdfs dfsadmin -safemode leave - 强制NameNode离开安全模式
hdfs dfsadmin -safemode get - 返回安全模式是否开启的信息
hdfs dfsadmin -safemode wait - 等待,一直到安全模式结束。
但是这次即使执行了hdfs dfsadmin -safemode leave也无法退出安全模式。
运行df -lh 发现三个节点的磁盘几乎都满了,于是清理不必要的文件释放磁盘空间。再次运行 hdfs dfsadmin -safemode leave
,成功退出。
然后可以成功的执行hdfs的删除操作了:hdfs dfs -rm -f -r -skipTrash /wxcm。
但是,删除hdfs上的目录/wxcm,并清空垃圾桶(hdfs dfs -expunge) 之后,检查vmwareMachines文件夹,就是存放虚拟机的文件夹,发现占用的空间还是没有减少。
原来vmware的虚拟机磁盘只会越来越大,而不会随着文件的删除而自动减少。需要手动压缩磁盘。具体是右击某个虚拟机,选择“设置”,选中硬盘,到右侧找到“压缩”,点击压缩按钮,还可以点击“碎片整理”。不过这个方法效果一般。vmware的虚拟机的物理磁盘文件增大后,没法减小,不过打开虚拟机后,里面显示的已使用磁盘空间确实减少了。