本文的是在Windows10系统中运行的情况,其他版本的系统需自己尝试以下解决办法;
Hadoop版本:hadoop-2.7.3
Windows系统中Hadoop的具体配置方法在此就不赘述了,请自行查阅相关文档,下面直接开始上问题解决方法:
错误一:
Error: JAVA_HOME is incorrectly set.
Please update D:\hadoop\hadoop-2.7.3\conf\hadoop-env.cmd
该错误代码是Hadoop中java环境变量配置错误导致的,修改Hadoop配置文件即可解决
我的Hadoop安装目录在: D:\hadoop\hadoop-2.7.3,下面就以此为例,
配置文件存放在hadoop中的etc目录下,我们打开D:\hadoop\hadoop-2.7.3\etc\hadoop\hadoop-env.cmd文件,
找到如下代码:
set JAVA_HOME=%JAVA_HOME%
将%JAVA_HOME%用具体的jdk安装路径替代,
比如说Java的安装路径为C:\Program Files\Java,jdk版本为:jdk1.8.0_181
则将上面的代码替换成如下代码:
set JAVA_HOME=C:\PROGRA~1\Java\jdk1.8.0_181
PS:
此处的路径C:\Program Files中带有空格,直接写该路径系统无法正常识别,故在此用软链代替,将C:\Program Files写成
C:\PROGRA~1;
此处也可以用引号包围,即将C:\Program Files写成
C:"\Program Files"
错误二:
启动hadoop进程时,namenode,nodemanager,datanode进程报如下错误代码:
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method)
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:609)
at org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:977)
at org.apache.hadoop.util.DiskChecker.checkAccessByFileMethods(DiskChecker.java:187)
at org.apache.hadoop.util.DiskChecker.checkDirAccess(DiskChecker.java:174)
at org.apache.hadoop.util.DiskChecker.checkDir(DiskChecker.java:157)
at org.apache.hadoop.hdfs.server.datanode.DataNode$DataNodeDiskChecker.checkDir(DataNode.java:2345)
at org.apache.hadoop.hdfs.server.datanode.DataNode.checkStorageLocations(DataNode.java:2387)
at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2369)
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2261)
at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2308)
at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2485)
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2509)
该错误是电脑java版本导致的错误,部分电脑安装的是32位java环境.
本机使用如下版本java(32位)测试时,会报上面所述错误代码,
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) Client VM (build 25.161-b12, mixed mode)
具体解决方案如下:
1.先用控制面板卸载计算机上的java;
2.重新下载安装一个新的64位java;
本文使用的是:jdk-8u181-windows-x64.exe
版本信息如下:
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
3.删除hadoop生成的namenode,datanode数据文件(文件路径在自己的hdfs-site.xml配置文件内有);
比如hdfs-site.xml配置如下:
dfs.replication
1
dfs.namenode.name.dir
file:/D:/hadoopdata/namenode
dfs.datanode.data.dir
file:/D:/hadoopdata/datanode
那么就删除D:\hadoopdata文件夹
4.重新格式化HDFS
hdfs namenode -format
5.再次启动hadoop进程即可成功启动.
PS:一般情况3,4步省略也可以成功启动hadoop的4个进程,如果有报错就操作一下3,4步,下面再添加一种数据文件导致错误的解决方法
错误三:
hdaoop启动时datanode进程开启失败,系统错误代码如下:
java.io.IOException: Incompatible clusterIDs in D:\hadoopdata\datanode: namenode clusterID = CID-6f4dc54c-ee55-465a-b484-7a917fa1af74; datanode clusterID = CID-15453d83-8724-4e54-a770-f3a96712f52d
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:775)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadStorageDirectory(DataStorage.java:300)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadDataStorage(DataStorage.java:416)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:395)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:573)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1362)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1327)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:223)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:802)
at java.lang.Thread.run(Thread.java:748)
18/08/26 13:04:39 FATAL datanode.DataNode: Initialization failed for Block pool (Datanode Uuid unassigned) service to localhost/127.0.0.1:9000. Exiting.
java.io.IOException: All specified directories are failed to load.
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:574)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1362)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1327)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:223)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:802)
at java.lang.Thread.run(Thread.java:748)
首先,我们还是先讨论一下出现该错误的原因吧,
我们在安装hadoop的过程中多少会有些问题,也常常会多次格式化HDFS文件系统,也正是因为这种多次格式化的操作才容易导致此错误,不仅仅是在Windows系统,在Linux系统中也很常见.
为什么会出现这种情况呢?
可以回想一下,我们在操作HDFS格式化时,并没有将datanode的数据文件删掉.从而因为namenode clusterID和datanode clusterID不同而datanode进程无法开启,那要怎么解决呢?
解决方案如下:
1.停掉hadoop所有进程;
2.删除datanode文件夹,datanode文件夹具体路径在上述"错误二"中有提到过,在此就不赘述了
3.重新启动hadoop即可解决问题
Hadoop安装方法
在Windows中安装Hadoop(非虚拟机安装)