我正在尝试使用Hadoop HDFS Java API列出HDFS中的所有文件。 我可以通过运行本地日食中的代码来列出远程HDFS上的文件。
但我得到了例外
java.lang.ClassNotFoundException: Class org.apache.hadoop.hdfs.DistributedFileSystem
org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2290)
org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2303)
org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:87)
org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2342)
org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2324)
org.apache.hadoop.fs.FileSystem.get(FileSystem.java:351)
org.apache.hadoop.fs.FileSystem.get(FileSystem.java:163)
当我从网络服务器执行代码时。
我添加了以下maven依赖项。
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.0.0-cdh4.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-auth</artifactId>
<version>2.0.0-cdh4.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.0.0-cdh4.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>2.0.0-mr1-cdh4.5.0</version>
</dependency>
此外,我已将所需的jar嵌入到导出的jar中,并且maven在构建路径中添加了相同的内容。
如果有人遇到此问题,请先与您分享解决方案。
答案 0 :(得分:0)
我面临着与Apache hadoop 2.2.0发布类似的问题,我通过将其作为一个单独的进程运行来做了一个解决方法,
final Process p = Runtime.getRuntime ().exec ("java -jar {jarfile} {classfile}";
final Scanner output = new Scanner (p.getErrorStream ());
while (output.hasNext ()) {
try {
System.err.println (output.nextLine ());
} catch (final Exception e) {
}
}
jar文件包含使用apache hadoop 2.2.0 jars的实现。
尽管如此,我仍然在寻找一个确切的解决方案。
答案 1 :(得分:0)
对我来说,zeppelin服务器的lib目录中缺少hadoop-hdfs-2.6.0.jar。我复制了zeppelin lib forder,我的问题得到了解决。 :) 并在pom.xml中为hadoop-hdfs-2.6.0.jar添加依赖项。