折腾了我几天,郁闷啊
跑hive过程中出现
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /tmp/hadoop-yarn/staging/mqq/.staging/job_1539959886874_0003/libjars/commons-logging-1.1.1.jar could only be replicated to 0 nodes instead of minReplication (=2). There are 0 datanode(s) running and no node(s) are excluded in this operation.
意思是说没有 datanodes running。
登录机器输入jps查看,三个数据节点都查到了datanode,
但是输出hdfs dfsadmin -report显示所有的datanodes都是dead
原因,
可能是datanode和namenode对应的目录中的current文件夹里的VERSION的clusterID不匹配,导致datanode和namenode无法通信。
Hadoop的namenode元数据目录(即hdfs-site.xml配置文件中的dfs.namenode.name.dir属性,默认值是${hadoop.tmp.dir}/dfs/name),同样如果没有配置该属性,那么hadoop在格式化时将自行创建。必须注意的是在格式化前必须清楚所有子节点(即DataNode节点)dfs/name下的内容,否则在启动hadoop时子节点的守护进程会启动失败。这是由于,每一次format主节点namenode,dfs/name/current目录下的VERSION文件会产生新的clusterID、namespaceID。但是如果子节点的dfs/name/current仍存在,hadoop格式化时就不会重建该目录,因此形成子节点的clusterID、namespaceID与主节点(即namenode节点)的clusterID、namespaceID不一致。最终导致hadoop启动失败。
解决方法:
1、在$HADOOP_HOME目录下,执行./sbin/stop-all.all 停止hadoop (只在其中一台机器执行就行)
2、删除datanode.dir和namenode.dir对应的各机器文件夹下的历史文件,几台机器都要删,我的命令如下
rm -rvf /data/hadoop_data/*
rm -rvf /data1/hadoop_data/*
rm -rvf /data2/hadoop_data/*
rm -rvf /data/home/hadoop_name/*
3、执行hadoop namenode -format,只有一台机器上执行,输入Y
4、重启服务: ./sbin/start-all.sh
最后输入hdfs dfsadmin -report,显示正常