问题描述

刚格式化完Hadoop,使用start-dfs.sh启动,中途命令行没有打印错误,但jps后发现没有datanode:

hadoop中data文件夹里面有什么 hadoop文件下没有data文件夹_大数据

排查过程

看到网上有人说可能是重复使用hadoop的命令格式化的时候,namenode的clusterID会重新生成,而datanode的clusterID会保持不变

我的hdfs-site.xml配置如下:

hadoop中data文件夹里面有什么 hadoop文件下没有data文件夹_分布式_02

打开usr/hadoop/hdfs/name,发现里面有current文件夹,但usr/hadoop/hdfs/data下空空如也。

还好也有人碰到了类似的问题\但当我在命令行中输入

vim hadoop-hadoop-datanode-ubuntu.log

 却出现了以下场景:

hadoop中data文件夹里面有什么 hadoop文件下没有data文件夹_大数据_03

意思是我的datanode根本没有生成日志。

我换成网上搜到的另一个命令

cat hadoop-root-datanode-localhost.localdomain.log

继续打印日志,结果告诉我No such file or directory: 

hadoop中data文件夹里面有什么 hadoop文件下没有data文件夹_hadoop中data文件夹里面有什么_04

我又不死心地切换到Hadoop安装目录下,使用

bin/hadoop logs -loglevel WARN

尝试打印warn级别以上的日志,居然告诉我找不到或无法加载主类log:

hadoop中data文件夹里面有什么 hadoop文件下没有data文件夹_分布式_05

我又想到是不是SSH的问题,我使用的是免密登录,检查一番之后发现也并无异常。

于是我打算把Hadoop数据都删了重新格式化。首先输入stop-dfs.sh关闭Hadoop服务,然后打开core-site.xml,找到临时文件夹 :

hadoop中data文件夹里面有什么 hadoop文件下没有data文件夹_hadoop_06

把usr/hadoop/tmp整个文件夹删除,再把usr/hadoop/hdfs/name下的文件也全部删除,再次运行

hadoop namenode -format

期间并无报错,然后用start-dfs.sh再次启动Hadoop,也没有报错,但用jps一看,datanode还是没启动起来。

再尝试在Linux系统内的浏览器中输入http://localhost:9000/,居然打不开:

解决方法

我觉得再这么跟无头苍蝇似的乱转也不是个事,还是得找到错误日志。打印不出来就到文件系统里面找,在安装目录里还真找到了一个log文件夹,点进去看看:

hadoop中data文件夹里面有什么 hadoop文件下没有data文件夹_大数据_07

终于找到了datanode的log文件,里面的报错信息如下:

hadoop中data文件夹里面有什么 hadoop文件下没有data文件夹_大数据_08

原来是权限不够,猜想是由于建立文件夹时是在文件系统中而非命令行中,把我的身份默认为root用户了。于是修改权限,将usr/hadoop/hdfs/data的所有者改为我运行Hadoop的用户calvin:

sudo chown -R calvin /usr/hadoop/hdfs/data

 而后再度格式化并启动Hadoop,大功告成:

hadoop中data文件夹里面有什么 hadoop文件下没有data文件夹_分布式_09

对了,打不开localhost:9000那个事,改成主机名:50070就打开了:

hadoop中data文件夹里面有什么 hadoop文件下没有data文件夹_hadoop_10