问题描述
今天使用 hadoop 时,发现无法通过下面命令上传文件到 hadoop 文件系统,会报错。
bin/hadoop fs -put input .
运行 jps 后,输出如下:
2979 ResourceManager 2644 NameNode 3078 NodeManager 3113 Jps 2858 SecondaryNameNode
可见 datanode 挂掉了。
用下面的命令重启 hadoop ,重启后仍然没有 datanode 的进程。
sbin/stop-all.sh sbin/start-all.sh
原因思考
近期同时安装了多个版本的 hadoop ,并且安装后重新格式化过 hdfs ,这个可能是引起问题的原因。
解决方法
本人使用的是 hadoop 2.7.2 版本。
1. 关闭集群
sbin/stop-all.sh
2. 在配置文件 etc/hadoop/hdfs-site.xml 中找到 dfs.name.dir / dfs.data.dir 的路径。我的配置如下
<configuration> <property> <name>dfs.name.dir</name> <value>file:///Users/grs/hadoopinfra/hdfs/namenode </value> </property> <property> <name>dfs.data.dir</name> <value>file:///Users/grs/hadoopinfra/hdfs/datanode </value> </property> </configuration>
3. 将上述路径的的目录重命名,如将 Users/grs/hadoopinfra 重命名为 Users/grs/hadoopinfra.bak_20160410 ,或者全部删掉(rm -R)
4. 格式化 namenode
bin/hadoop namenode -format
5. 最后,重启
sbin/start-all.sh
运行效果
运行 jps 能看到 datanode 的进程。
2738 DataNode 2979 ResourceManager 3203 Jps 2644 NameNode 3078 NodeManager 2858 SecondaryNameNode
也能成功上传文件
grs:hadoop grs$ hadoop dfs -put input ./ DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command for it. 16/04/10 15:17:07 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable grs:hadoop grs$
参考资料 :