具体:
java.io.IOException: HADOOP_HOME or hadoop.home.dir are not set.
at org.apache.hadoop.util.Shell.checkHadoopHome(Shell.java:302)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:327)
at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:79)
at org.apache.hadoop.security.Groups.parseStaticMapping(Groups.java:104)
at org.apache.hadoop.security.Groups.<init>(Groups.java:86)
at org.apache.hadoop.security.Groups.<init>(Groups.java:66)
at org.apache.hadoop.security.Groups.getUserToGroupsMappingService(Groups.java:280)
at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:271)
at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:248)
at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:763)
at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:748)
at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:621)
at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2753)
at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2745)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2611)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:169)
at edu.mypackage.HDFSFileSystemFactory.getMyDefaultHdfs(HDFSFileSystemFactory.java:27)
at edu.mypackage.Test.main(Main.java:22)
获取 FileSystem 时指定了:
conf.set("fs.default.name", "hdfs://192.168.1.200:9000"); // “ hdfs://192.168.1.200:9000 ” 是 hdfs master 地址
conf.set("hadoop.tmp.dir", "/home/hadoop/tmp");
因为 hdfs 的 master 机器不是本机,所以在本机上并没有添加 %HADOOP_HOME% 这个变量,也没有 hadoop.home.dir ,但是在初始化 FileSystem 的时候,在 conf 中给了 hadoop.home.dir 的配置。但还是报以上错误了。
已经尝试了:
1 、 java 中添加 System.setProperty("hadoop.home.dir", "/usr/local/etc/hadoop"); // "/usr/local/etc/hadoop" 是 hadoop 的 home 目录。运行结果不出所料是说本地没有 hadoop 的相关 binary 文件 2 、在本机添加 HADOOP_HOME 环境变量,毫无疑问,没用
注: master主机上也已经有 HADOOP_HOME这个变量了。 已经是可以访问 dfs ,且能成功创建文件等,但就是有以上的报错信息。我想请问一下这个报错怎么去除。
1
ylxb23 OP ok , 已明了 =_=
|
2
nicktogo 2016-03-28 00:30:03 +08:00 via Android
楼主可以分享下解决方案
|
3
ylxb23 OP @nicktogo 其实也并不是真正的解决了这个问题,主要是跟踪了一下异常,明白了一个问题。这里的 Exception 在“ at org.apache.hadoop.util.Shell.checkHadoopHome(Shell.java:302)”这里可以看出,获取的 HADOOP_HOME 是从本地的环境中获取的,也就是“ System.getProperty("hadoop.home.dir");”,但很明显,我们的 hadoop 环境并不是在本机,所以访问不到。同时我开的是 DEBUG 模式,也就是这个异常并不是真正意义上的异常(参考: http://mail-archives.apache.org/mod_mbox/flink-user/201509.mbox/%3CCAGr9p8CRW-av0-d4ZJJy+=cP7GCHoGvivwjFdKv=uBctbGUOYg@mail.gmail.com%3E )。
不过既然有问题,还是有真正的解决办法的。既然是在本地调试不能访问 HADOOP_HOME 环境变量,那就开启远程调试吧,这样应该就能解决这种调试的报错了。 |