Java org.apache.hadoop.fs.FileSystem:Provider org.apache.hadoop.hdfs.DistributedFileSystem不是子类型

Java org.apache.hadoop.fs.FileSystem:Provider org.apache.hadoop.hdfs.DistributedFileSystem不是子类型,java,hadoop,Java,Hadoop,在HTTP servlet中使用Hadoop 2.5.1时获得此异常 java.util.ServiceConfigurationError: org.apache.hadoop.fs.FileSystem: Provider org.apache.hadoop.hdfs.DistributedFileSystem not a subtype DistributedFileSystem类可以在这些JAR中找到 hadoop-core-1.2.1.jar hadoop-hdfs-2.5.1.ja

在HTTP servlet中使用Hadoop 2.5.1时获得此异常

java.util.ServiceConfigurationError: org.apache.hadoop.fs.FileSystem: Provider org.apache.hadoop.hdfs.DistributedFileSystem not a subtype
DistributedFileSystem类可以在这些JAR中找到

hadoop-core-1.2.1.jar
hadoop-hdfs-2.5.1.jar
当我单独使用hadoop-core-1.2.1.jar时,我得到的编译器错误是找不到hdfs模式

java.io.IOException: No FileSystem for scheme: hdfs
当我使用这两个罐子时,我得到了前面提到的错误

servlet中的代码:

        Configuration conf = new Configuration();

    try {
        System.out.println("keyword=" + keyWord);
        conf.set("keyword", keyWord);
        conf.set("fs.hdfs.impl", 
                org.apache.hadoop.fs.hdfs.DistributedFileSystem.class.getName()
            );

        Job job = Job.getInstance();
        job.setJarByClass(HadoopServlet.class);

        job.setJobName("Tomcat Log Error");
        FileInputFormat.addInputPath(job, new Path("hdfs://master:54310/keyword/pg20417.txt"));
        FileOutputFormat.setOutputPath(job, new Path("hdfs://master:54310/tmp/output" + uuid));
        job.setMapperClass(TomcatLogErrorMapper.class);
        job.setReducerClass(TomcatLogErrorReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
    catch (Exception e) {
            System.out.println("Error");
            e.printStackTrace();
    }
感谢您的帮助

找到这根线了吗


看起来无法使用servlet来运行hadoop作业

因为hdfs模式是在hadoop-hdfs.jar中注册的,所以不能只使用hadoop-core.jar

看起来您正在运行的servlet线程的上下文类加载器无法加载org.apache.hadoop.hdfs.DistributedFileSystem,您可以尝试以下方法:

Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());

您是否设法解决了此问题??我也面临同样的问题。