Hadoop 运行时显示映射器类未找到异常

Hadoop 运行时显示映射器类未找到异常,hadoop,mapreduce,hbase,Hadoop,Mapreduce,Hbase,映射0%减少0% 15/02/03 07:30:28信息mapreduce.作业:任务Id:尝试_1422885720829 _0097 _m_000000 _0,状态:失败 错误:java.lang.RuntimeException:java.lang.ClassNotFoundException:Class org.Cognition.pr2.TroubleMapper未找到 位于org.apache.hadoop.conf.Configuration.getClass(Configurat

映射0%减少0% 15/02/03 07:30:28信息mapreduce.作业:任务Id:尝试_1422885720829 _0097 _m_000000 _0,状态:失败 错误:java.lang.RuntimeException:java.lang.ClassNotFoundException:Class org.Cognition.pr2.TroubleMapper未找到 位于org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1720) 位于org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186) 位于org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:721) 位于org.apache.hadoop.mapred.MapTask.run(MapTask.java:339) 位于org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162) 位于java.security.AccessController.doPrivileged(本机方法) 位于javax.security.auth.Subject.doAs(Subject.java:396) 位于org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) 位于org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157) 原因:java.lang.ClassNotFoundException:Class org.Cognition.pr2.TroubleMapper未找到 位于org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1626) 位于org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1718) ... 8个以上

15/02/03 07:30:32信息mapreduce.作业:任务Id:尝试,状态:失败 错误:java.lang.RuntimeException:java.lang.ClassNotFoundException:Class org.Cognition.pr2.TroubleMapper未找到 位于org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1720) 位于org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186) 位于org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:721) 位于org.apache.hadoop.mapred.MapTask.run(MapTask.java:339) 位于org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162) 位于java.security.AccessController.doPrivileged(本机方法) 位于javax.security.auth.Subject.doAs(Subject.java:396) 位于org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) 位于org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157) 原因:java.lang.ClassNotFoundException:Class org.Cognition.pr2.TroubleMapper未找到 位于org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1626) 位于org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1718) ... 8个以上

15/02/03 07:30:35信息mapreduce.作业:任务Id:尝试_1422885720829 _0097 _m_000000 _2,状态:失败 错误:java.lang.RuntimeException:java.lang.ClassNotFoundException:Class org.Cognition.pr2.TroubleMapper未找到 位于org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1720) 位于org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186) 位于org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:721) 位于org.apache.hadoop.mapred.MapTask.run(MapTask.java:339) 位于org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162) 位于java.security.AccessController.doPrivileged(本机方法) 位于javax.security.auth.Subject.doAs(Subject.java:396) 位于org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) 位于org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157) 原因:java.lang.ClassNotFoundException:Class org.Cognition.pr2.TroubleMapper未找到 位于org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1626) 位于org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1718) ... 8个以上

15/02/03 07:30:39信息地图还原。工作:地图100%还原100% 15/02/03 07:30:39信息mapreduce.作业:作业作业\u 1422885720829\u 0097失败,状态失败,原因是:任务失败任务\u 1422885720829\u m_000000 作业失败,因为任务失败。failedMaps:1 failedReduces:0

15/02/03 07:30:39信息地图还原。作业:计数器:6 工作计数器 失败的映射任务=4 已启动的地图任务=4 其他本地地图任务=3 数据本地映射任务=1 所有地图在占用的插槽中花费的总时间(毫秒)=8357
所有reduces在已占用插槽中花费的总时间(ms)=0

重新编译java代码,并确保所有JAR都存在以运行mr作业

"su - hdfs" 

export HADOOP_CLASSPATH=`hbase classpath`

#### export HADOOP_CLASSPATH=/etc/hbase/conf:/usr/lib/hbase/*:jar

然后运行MR代码

我得到了这个问题的解决方案,就像我们可以将jar直接放在这个路径:/usr/lib/hadoop-mapreduce目录下,然后从这个路径本身运行cmd一样。现在,它将能够访问所需的。我希望这会有帮助。谢谢大家:-)

我使用下面的驱动程序类代码来解决这个问题

public int run(String[] args) throws Exception {

    Configuration conf=new Configuration();
    Job job=Job.getInstance(conf, "MavenSample");

    ***job.setJarByClass(DriverClass.class);***

    job.setMapperClass(MapperClass.class);
    job.setReducerClass(ReducerClass.class);

    job.setMapOutputKeyClass(Text.class);
    job.setMapOutputValueClass(IntWritable.class);

    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

    FileInputFormat.setInputPaths(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));         

    return job.waitForCompletion(true)?0:1;

}

我尝试运行用于将数据从hdfs textfile加载到hbase表的MR代码,但它得到的错误如上所示:“Mapper类未找到异常”。在运行MR代码时,我将jar文件、输入路径、输出路径、hbase表作为参数传递。。。请告诉我,两天来我一直被这个问题困扰着,我使用了这样的建议:“job.setJarByClass(TroubleDriver.class);”您可能错过了setJarByClass。请参阅感谢阿里对您的支持当您拥有管理员权限时,您可以尝试这种方式,但这不是合法的方式。这样,您就可以测试代码了。