当我在shell中的hadoop mapreduce word count jar
文件夹中运行hadoop
时,它正常运行并且输出正确生成,
由于我在yarn
的情况下使用hadoop 2.4.1
,当我从eclipse运行MapReduce Sample program
时,MAP过程完成并在reduce过程中失败。
很明显,问题在于jar配置。
请找到罐子,我已添加......
这是我遇到的错误
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更多
答案 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和业务需求上。 :)
希望它可以帮助你..