put命令上传文件出错:WARN hdfs.DFSClient: DataStreamer Exception org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /test/words.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation.
在解决好hive的连接问题后,我开始尝试通过HDFS上传文件来为hive上传数据,但在上传时报出了上述的错误,没有DataNode节点,实际上节点都已经打开。在经过网络查询后,不少是说hadoop namenode -format格式化时格式化了多次,spaceID不一致造成的。
先停止集群,删除hadoop.tmp.dir(core-site.xml)下的文件(这一步是否有用我并没有查证,如果仅是自己做实验,删删问题不大),格式化namenode,后重启。
我在停止集群格式化namenode时,多次无法成功,翻阅书本后发现(包括在开启集群时进行格式化的经验),需要先开启三个节点上的journalnode后再进行格式化,这一步相当重要,就这一小步困扰了我将近两周。然后进行格式化(hdfs namenode -format)(格式化后如果怕其他机子上的文件与01机冲突,可选择scp将文件复制过去)。
之后尝试上传文件,发现无法连接上0102机,原因是01、02机namenode掉线,开启namenode不久后三个机的datanode全部掉线,查阅后得知是$DATA_HOME(hadoop的hdfs-xite.xml中dfs.namenode.name.dir)下name/current/VERSION中clusterID与data/current/VERSION中的clusterID不一致,这会导致DataNode掉线,需要将name的clusterID复制给data的,然后将上层的文件夹复制给其他的集群计算机,重启集群,这样DataNode掉线问题就解决了。