MaxTemperature程序Mapper ClassNotFoundException

错误: 执行hadoop权威指南上MaxTemperature程序出现Mapper类ClassNotFoundException异常:

解决: 将书上的

JobConf job = new JobConf(MaxTemperature.class) ;改为:
JobConf job = new JobConf() ;

job.setJar("/root/hadoop-resources/code/maxtemperature.jar");

下面是我解决过程:

郁闷一天了,明明照着书(hadoop权威指南)上写的,但是在执行hadoop MaxTemperature 时总是出现Mapper类找不到。

发现可能是环境变量的问题。于是在/etc/profile中配置hadoop环境变量:

export hadoop_HOME="/usr/hadoop"
for f in $hadoop_HOME/hadoop-*.jar; do
HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:$f
done
for f in $hadoop_HOME/lib/*.jar;do
HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:$f
done
export HADOOP_CLASSPATH=".$HADOOP_CLASSPATH"

执行,错误仍然存在。

然后发现网上说是需要打包,我认为应该不需要打包的,书上都没有到打包,我用的hadoop版本和他用的是一样的。但是首先解决问题吧,于是退而求其次。

将生成的class文件打包为jar:

jar -cvf classes/*.class

然后使用:

hadoop jar maxtemperature.jar Maxtemperature input/sample.txt output

执行命令,发现错误依旧。

然后发现网上别人的程序执行就正常了,发现他的jar是放在hadoop安装目录的bin下的。于是我充满疑问的将我的jar复制到bin下,然后执行,好了~~~!!!!

所以这是一种解决方案,将jar复制到hadoop下就可以正常运行了。

但这种方案实在太死板了,最后又在stackoverflow上找到一种方法,书上的示例代码写的是

JobConf job = new JobConf(MaxTemperature.class) ;

改为:

JobConf job = new JobConf() ;

job.setJar("/root/hadoop-resources/code/maxtemperature.jar");

然后打包,运行,不算完美的解决~~~~

时间: 2024-08-26 16:46:12

MaxTemperature程序Mapper ClassNotFoundException的相关文章

在本地文件系统上测试MapReduce程序

在开发MapReduce程序的过程中,可以首先在本地文件系统上对程序进行测试,而不是一开始就在HDFS上,这样调试起来更加方便. 以<Hadoop权威指南>上的MaxTemperature程序为例,整个项目中包括如下3个源文件,依次为Mapper程序.Reducer程序和job启动程序: MaxTemperatureMapper.java,MaxTemperatureReducer.java,MaxTemperatureDriver.java MaxTemperatureMapper.java

ClassNotFoundException和NoClassDefFoundError的差别

正如它们的名字所说明的:NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常,在Java中错误和异常是有差别的,我们能够从异常中恢复程序但却不应该尝试从错误中恢复程序. ClassNotFoundException的产生原因: Java支持使用Class.forName方法来动态地载入类.随意一个类的类名假设被作为參数传递给这种方法都将导致该类被载入到JVM内存中.假设这个类在类路径中没有被找到,那么此时就会在执行时抛出Cla

ClassNotFoundException和NoClassDefFoundError的区别

jvm加载类过程:             加载:加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口.注意这里不一定                              非得要从一个Class文件获取,这里既可以从ZIP包中读取(比如从jar包和war包中读取),也可以在运行时计算生成(动态代理),也可以由其它文件生成                            (比如将JSP文件转换成对应的C

MRUnit的安装和使用

MRUnit是对MapReduce程序进行单元测试的工具,可以对Mapper和Reducer程序分别进行测试.但是它没有集成在Hadoop安装环境中,如果想在开发MapReduce程序时使用这个工具,就需要自己安装. MRUnit的安装 安装环境: Eclipse版本为3.6.0 Hadoop版本为1.0.4 安装步骤: (1)下载MRUnit,网址为http://mrunit.apache.org/,我下载的是 apache-mrunit-1.0.0-hadoop1-bin.tar.gz (2

python 实现Hadoop的partitioner和二次排序

我们知道,一个典型的Map-Reduce过程包 括:Input->Map->Patition->Reduce->Output.Pation负责把Map任务输出的中间结果 按key分发给不同的Reduce任务进行处理.Hadoop 提供了一个非常实用的partitioner类KeyFieldBasedPartitioner,通过配置相应的参数就可以使用.通过 KeyFieldBasedPartitioner可以方便地实现二次排序. 使用方法:       -partitioner o

使用python+hadoop-streaming编写hadoop处理程序

Hadoop Streaming提供了一个便于进行MapReduce编程的工具包,使用它可以基于一些可执行命令.脚本语言或其他编程语言来实现Mapper和 Reducer,从而充分利用Hadoop并行计算框架的优势和能力,来处理大数据 好吧我承认以上这句是抄的以下是原创干货 首先部署hadoop环境,这点可以参考 http://www.powerxing.com/install-hadoop-in-centos/ 好吧原创从下一行开始 部署hadoop完成后,需要下载hadoop-streami

hadoop mapreduce开发实践之HDFS文件分发by streaming

1.分发HDFS文件(-cacheFile) 需求:wordcount(只统计指定的单词),但是该文件非常大,可以先将该文件上传到hdfs,通过-cacheFile的方式进行分发: -cachefile hdfs://host:port/path/to/file#linkname #选项在计算节点上缓存文件,streaming程序通过./linkname的方式访问文件. 思路:mapper和reducer程序都不需要修改,只是在运行streaming的时候需要使用-cacheFile 指定hdf

MapReduce 程序运行报错 java.lang.ClassNotFoundException解决方法

在创建自定义的Mapper时候,编译正确,但上传到集群执行时出现错误: 11/16/05 22:53:16 INFO mapred.JobClient: Task Id : attempt_201111301626_0015_m_000000_0, Status : FAILED java.lang.RuntimeException: java.lang.ClassNotFoundException: actiondemo.MyJob$MapClass at org.apache.Hadoop.

hadoop程序MapReduce之MaxTemperature

需求:求每年当中最高的温度 样本:temp.log 2016080623 2016072330 2015030420 输出结果:2016 30 2015 20 MapReduce分析设计: Mapper分析设计: 1.将文件分割成键值队<k1,v1>,k1代表:行位置,v1代表:一行数据. 2.将这行数据进行分割成<k2,v2>,k2代表:年份,v1代表:温度. Reduce分析设计: 3.将一些列合并后的相同key的一系列温度<k3,v3>,k3代表:年份,v1代表: