初接触hadoop,遇到的问题真很多。在执行bin/hadoop fs -mkdir input时,出错了。测试发现,bin/hadoop fs -ls也不行。排查了一会才发现是版本的缘由:java
2.x之前的版本这个命令,2.x以后的版本命令改为了:node
bin/hdfs dfs -mkdir -p ..apache
input目录建立完成以后,开始上传本地目录:oop
bin/hdfs dfs -put /root/data /input
发现报错,试试拷贝本地文件:测试
bin/hdfs dfs -copyFromLocal /root/data/person.txt /input
发现也报错:ui
看提示应该是datanode没启动。经过jps查看,果真是。而后开始重启hadoop,重启了以后,发现datanode依然没成功启来。没办法了,去查启动日志,发现如下异常:spa
FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to spark1/192.168.122.113:9000. Exiting.3d
java.io.IOException: Incompatible clusterIDs in /usr/local/programs/hadoop/tmp/dfs/data: namenode clusterID = CID-19f887ba-2e8d-4c7e-ae01-e38a30581693; datanode clusterID = CID-14aac0b3-3c32-45db-adb8-b5fc494eaa3d日志
这提示应该是指两个clusterID不一致。开始检查dfs下文件,data 和 name文件夹下有一部分文件。本想试试能不能经过文件覆盖解决不一致问题,后来以为麻烦,就直接把文件name 和 data下的文件删了。而后重启hadoop...code
本觉得应该很顺利,没想问题又来了:
2016-05-13 15:28:28,952 INFO org.apache.hadoop.hdfs.server.common.Storage: Lock on /usr/local/programs/hadoop/dfs/name/in_use.lock acquired by nodename 25041@spark1 2016-05-13 15:28:28,954 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimage java.io.IOException: NameNode is not formatted. at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:212) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1022) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:741) at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:538) at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:597) at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:764) at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:748) at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1441) at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1507)
接着去格式化namenode..而后,
bin/hdfs dfs -mkdir -p /input
bin/hdfs dfs -put /root/data /input
OK.
接下来,终于能够开始经过spark读取分析hdfs的文件了。。。