Hadoop客户端不断从本地文件系统读取

2020年7月15日 28点热度 0条评论

我正在尝试通过Hadoop客户端从Windows上的Java程序读取文件。我有一个有效的kerberos keytab,但似乎无法从HDFS中读取。

我使用的是this页面中的示例,hadoop客户端不断从本地文件系统读取数据。我三重检查了我使用的URL及其正确的URL,我缺少了什么?

Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://test.hdp:8020");
conf.set("hadoop.security.authentication", "kerberos");

UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab("hdfs-user@MYCORP.NET", 
   "c:/temp/hdfs-user.keytab");

FileSystem fs = FileSystem.get(conf);
FileStatus[] fsStatus = fs.listStatus(new Path("/"));
for(int i = 0; i < fsStatus.length; i++){
  System.out.println(fsStatus[i].getPath().toString());
}

解决方案如下:

我发现了问题。 Hadoop客户端从本地FS读取的项目也试图将Hadoop与Apache&Active MQ集成。我使用的activemq-camel版本带来了一个导致问题的较旧Hadoop库。我更新到了最新版本的Camel和Active MQ,问题就消失了。我验证了较新的版本不会带来任何hadoop缺陷。

activemq-camel 5.6 Dependencies ( partial list)
[INFO] \- org.apache.activemq:activemq-camel:jar:5.6.0:compile
[INFO]    +- org.apache.camel:camel-jms:jar:2.9.2:compile
[INFO]    \- org.apache.activemq:activemq-core:jar:5.6.0:compile
[INFO]       +- org.fusesource.fuse-extra:fusemq-leveldb:jar:1.1:compile
[INFO]       |  +- org.apache.hadoop:hadoop-core:jar:1.0.0:compile