Map在eclipse中减少2.4.1 hadoop的客户端jar

时间:2014-11-21 14:42:58

标签: java eclipse hadoop mapreduce

当我在shell中的hadoop mapreduce word count jar文件夹中运行hadoop时,它正常运行并且输出正确生成,

由于我在yarn的情况下使用hadoop 2.4.1,当我从eclipse运行MapReduce Sample program时,MAP过程完成并在reduce过程中失败。

很明显,问题在于jar配置。

请找到罐子,我已添加......

enter image description here

这是我遇到的错误

  

INFO:减少任务执行者的完成。 2014年11月21日晚上8:50:35   org.apache.hadoop.mapred.LocalJobRunner $作业运行警告:   job_local1638918104_0001 java.lang.Exception:   java.lang.NoSuchMethodError:   org.apache.hadoop.mapred.ReduceTask.setLocalMapFiles(Ljava / UTIL /地图;)V     在   org.apache.hadoop.mapred.LocalJobRunner $ Job.runTasks(LocalJobRunner.java:462)     在   org.apache.hadoop.mapred.LocalJobRunner $ Job.run(LocalJobRunner.java:529)   引起:java.lang.NoSuchMethodError:   org.apache.hadoop.mapred.ReduceTask.setLocalMapFiles(Ljava / UTIL /地图;)V     在   org.apache.hadoop.mapred.LocalJobRunner $工作$ ReduceTaskRunnable.run(LocalJobRunner.java:309)     在   java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:471)     at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:334)     在java.util.concurrent.FutureTask.run(FutureTask.java:166)at   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:722)

     

线程“Thread-12”中的异常java.lang.NoClassDefFoundError:   org / apache / commons / httpclient / HttpMethod at   org.apache.hadoop.mapred.LocalJobRunner $ Job.run(LocalJobRunner.java:562)   引起:java.lang.ClassNotFoundException:   org.apache.commons.httpclient.HttpMethod at   java.net.URLClassLoader $ 1.run(URLClassLoader.java:366)at   java.net.URLClassLoader $ 1.run(URLClassLoader.java:355)at   java.security.AccessController.doPrivileged(Native Method)at   java.net.URLClassLoader.findClass(URLClassLoader.java:354)at   java.lang.ClassLoader.loadClass(ClassLoader.java:423)at   sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)at at   java.lang.ClassLoader.loadClass(ClassLoader.java:356)... 1更多

1 个答案:

答案 0 :(得分:0)

根据屏幕截图,您将手动将所有相关的jar添加到类路径中。 强烈建议您使用maven ,这将自动执行将依赖jar添加到类路径的过程。我们只需要添加主要的依赖罐子 我在pom.xml中使用了以下依赖项,这有助于我在没有任何问题的情况下运行..

<properties>
    <hadoop.version>2.5.2</hadoop.version>
</properties>

<dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-core</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-yarn-api</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-yarn-common</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-auth</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-yarn-server-nodemanager</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-yarn-server-resourcemanager</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
    </dependencies>  

来解决您的问题, 我在类路径中检查过,确实有 82 jar 文件 找到这样的每个罐子将是一项繁琐的工作。
您可以添加功能明智的罐子HERE 其他解决方法是,将已安装的hadoop目录路径中的所有jar文件添加为<hadoop-installed>/share/hadoop/,并添加所有lib文件夹中的所有jar文件。这是你能做的最好的事情..或者 仅添加特定于avro的jar,因为avro类根据屏幕截图抛出异常。这可以解决avro jar问题。但你可能会遇到其他依赖问题。  在使用Hadoop V1时我也遇到了同样的问题。所以后来我意识到并使用Maven和Hadoop V2。因此不必担心依赖罐子。
 您的重点将放在Hadoop和业务需求上。 :)
希望它可以帮助你..