【问题标题】:Map Reduce client jars for 2.4.1 hadoop in eclipse在 Eclipse 中为 2.4.1 hadoop 映射 Reduce 客户端 jar
【发布时间】:2015-01-19 17:57:06
【问题描述】:
当我在 shell 的 hadoop 文件夹中运行我的 hadoop mapreduce word count jar 时,它运行正常并且输出正确生成,
由于我在hadoop 2.4.1 的情况下使用yarn,所以当我从eclipse 运行MapReduce Sample program 时,MAP 进程完成并且在reduce 进程中失败。
很明显问题出在 jar 配置上。
请找到罐子,我已添加...
这是我遇到的错误
INFO:减少任务执行器完成。 2014 年 11 月 21 日晚上 8:50:35
org.apache.hadoop.mapred.LocalJobRunner$Job 运行警告:
job_local1638918104_0001 java.lang.Exception:
java.lang.NoSuchMethodError:
org.apache.hadoop.mapred.ReduceTask.setLocalMapFiles(Ljava/util/Map;)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/Map;)V
在
org.apache.hadoop.mapred.LocalJobRunner$Job$ReduceTaskRunnable.run(LocalJobRunner.java:309)
在
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
在 java.util.concurrent.FutureTask.run(FutureTask.java:166) 在
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 在
org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:562)
引起:java.lang.ClassNotFoundException:
org.apache.commons.httpclient.HttpMethod 在
java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在
java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在
java.security.AccessController.doPrivileged(Native Method) 在
java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在
java.lang.ClassLoader.loadClass(ClassLoader.java:423) 在
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在
java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 1 更多
【问题讨论】:
标签:
java
eclipse
hadoop
mapreduce
【解决方案1】:
根据屏幕截图,您手动将所有依赖的 jar 添加到类路径中。
强烈建议使用 maven,它会自动执行将依赖 jar 添加到类路径的过程。我们只需要添加主要的依赖 jars。
我在 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 一起使用。所以不用担心依赖 jars。
您的重点将放在 Hadoop 和业务需求上。 :)
希望对你有帮助。。