文档章节

运行mapreduce程序时map class not foun出现异常java.lang.RuntimeException: java.lang.ClassNotFoundException的原因

writeademo
 writeademo
发布于 2017/03/17 17:52
字数 705
阅读 44
收藏 0

运行mapreduce程序时出现异常java.lang.RuntimeException: java.lang.ClassNotFoundException的原因

标签: mapreducejareclipsedeprecated作业hadoop

2010-08-16 19:34 14653人阅读 评论(11) 收藏 举报

版权声明:本文为博主原创文章,未经博主允许不得转载。

运行mapreduce程序时出现异常Java.lang.RuntimeException: java.lang.ClassNotFoundException的原因

 

    Hadoop分布式配置完毕后,我将主节点的下的hadoop-0.20.1直接导入eclipse,想直接在eclipse中书写程序并直接编译运行于hadoop集群上。今天才发现,这是不可能成功的。因为我忽略了mapreduce程序在hadoop中的运行机理:mapreduce框架在运行Job时,为了使得各个从节点上能执行task任务(即map和reduce函数),会在作业提交时将运行作业所需的资源,包括作业jar文件、配置文件和计算所得的输入划分,复制到HDFS上一个以作业ID命名的目录中,并且作业jar的副本较多,以保证tasktracker运行task时可以访问副本,执行程序。

 

    现象:

0/08/16 15:25:48 WARN conf.Configuration: DEPRECATED: hadoop-site.xml found in the classpath. Usage of hadoop-site.xml is deprecated. Instead use core-site.xml, mapred-site.xml and hdfs-site.xml to override properties of core-default.xml, mapred-default.xml and hdfs-default.xml respectively
Output directory wcout already exists,firstly delete it
10/08/16 15:25:49 WARN mapred.JobClient: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
10/08/16 15:25:49 INFO input.FileInputFormat: Total input paths to process : 4
10/08/16 15:25:50 INFO mapred.JobClient: Running job: job_201008161439_0004
10/08/16 15:25:51 INFO mapred.JobClient:  map 0% reduce 0%
10/08/16 15:26:00 INFO mapred.JobClient: Task Id : attempt_201008161439_0004_m_000000_0, Status : FAILED
java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.hadoop.examples.WordCount2$WordCountMapper
 at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:808)
 at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:157)
 at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:532)
 at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
 at org.apache.hadoop.mapred.Child.main(Child.java:170)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.examples.WordCount2$WordCountMapper
 at java.NET.URLClassLoader$1.run(URLClassLoader.java:202)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.Net.URLClassLoader.findClass(URLClassLoader.java:190)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:247)
 at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:761)
 at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:806)
 ... 4 more

 

原因分析:

     程序不是以jar的形式运行的,所以不会上传jar到HDFS中,以致节点外的所有节点在执行task任务时上不能找到map和reduce类,所以在运行task时会出现错误。实际上程序中对没有上传jar的运行方式可能会导致错误有提示信息:No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String)。

     至于原来的Wordcount程序能运行是因为每个节点都有这个类存在,而我现在确只有主节点上有该类。
解决办法:
      (1)所有节点的examples包中加上该类,

      (2)打包成jar,再运行。

 

 

注意事项:

      即时是伪分布式下(一个节点既是主节点又是从节点)下直接在eclipse中也不能运行成功,也需要打包成jar

本文转载自:

writeademo
粉丝 26
博文 670
码字总数 250499
作品 0
东城
私信 提问
如何分布式运行mapreduce程序

如何分布式运行mapreduce程序 一、 首先要知道此前提 若在windows的Eclipse工程中直接启动mapreduc程序,需要先把hadoop集群的配置目录下的xml都拷贝到src目录下,让程序自动读取集群的地址后...

Zero零_度
2015/09/06
248
0
eclipse下提交job时报错mapred.JobClient: No job jar file set. User classes may not be found.

windows下,连接远程集群,直接在eclipse里运行mapreduce作业时, 错误信息: 11/10/14 13:52:07 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Application......

落花非有意
2018/06/26
0
0
0010-Hive多分隔符支持示例

1.问题描述 如何将多个字符作为字段分割符的数据文件加载到Hive表中,事例数据如下: 字段分隔符为“@#$” 如何将上述事例数据加载到Hive表(multi_delimiter_test)中,表结构如下: | 字段名...

Hadoop实操
2018/11/17
12
0
【Hadoop】- MapReduce 代码工作过程

Hadoop MapReduce基础案例 MapReduce:Hadoop分布式并行计算框架 思想:分治法 通俗解释 工厂给客户交付货物1000吨,卡车A运量50吨,需要顺序20次,如果平时客户不忙20次运输所需的时间客户能...

ZeroneLove
02/24
8
0
[转]MapReduce:超大机群上的简单数据处理

MapReduce:超大机群上的简单数据处理 摘要 MapReduce是一个编程模型,和处理,产生大数据集的相关实现.用户指定一个 map函数处理一个key/value对,从而产生中间的key/value对集.然后再指定一个r...

穿越星辰
2011/04/22
174
0

没有更多内容

加载失败,请刷新页面

加载更多

爬虫可以采集哪些数据?爬虫借用什么代理可以提高效率

学习爬虫的门槛非常低,特别是通过Python学习爬虫,即使是网上也能找到许多学习爬虫的方法,而且爬虫在数据采集方面效果比较好,比如可以采集几万、上百万网页数据进行分析,带来极有价值的数...

xiaotaomi
24分钟前
4
0
redis自建笔记

自建redis笔记 最近在linux安装了一下redis,特做一些笔记! 本文先单节点启动redis,然后再进行持久化配置,在次基础上,再分享搭建主从模式的配置以及Sentinel 哨兵模式及集群的搭建 单节点...

北极之北
26分钟前
4
0
没想到Spring Boot居然这么耗内存,有点惊讶

Spring Boot总体来说,搭建还是比较容易的,特别是Spring Cloud全家桶,简称亲民微服务,但在发展趋势中,容器化技术已经成熟,面对巨耗内存的Spring Boot,小公司表示用不起。如今,很多刚诞...

程序员修BUG
30分钟前
4
0
Spring Security 实战干货:Spring Boot 中的 Spring Security 自动配置初探

1. 前言 我们在前几篇对 Spring Security 的用户信息管理机制,密码机制进行了探讨。我们发现 Spring Security Starter相关的 Servlet 自动配置都在spring-boot-autoconfigure-2.1.9.RELEASE...

码农小胖哥
31分钟前
4
0
Docker 容器时区时间不一致 问题解决

解决方案: 1,最傻瓜也最方便的处理方式,运行新的容器前设置本机时区和时间文件与容器的映射 docker run -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime ...1 -v /etc/...

突突突酱
33分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部