当我使用自己的TableInputFormat时,TableMapper上的ClassNotFoundException

时间:2013-08-02 12:14:34

标签: hadoop mapreduce hbase cloudera

我试图以下列方式使用我自己的TableInputFormat作为MapReduceJob

TableMapReduceUtil.initTableMapperJob("mytable", MyScan, MyMapper.class, MyKey.class, MyValue.class, myJob,true, MyTableInputFormat.class);

当我运行这个作业时,我得到一个ClassNotFoundException:org.apache.hadoop.hbase.mapreduce.TableMapper - 任何想法为什么?

如果我不使用initTableMapperJob的最后两个参数,那么就没有ClassNotFoundException(但显然会失败)

我现在正在为此奋斗几天。 这是某人做同样事情的地方Extending Hadoop's TableInputFormat to scan with a prefix used for distribution of timestamp keys,但我无法在那个帖子上提问。

我正在使用Hadoop 2

开发Cloudera Cluster 4.3.0

添加stacktrace错误:

java.lang.ClassNotFoundException: org.apache.hadoop.hbase.mapreduce.TableMapper 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:306) at 
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at 
java.lang.ClassLoader.loadClass(ClassLoader.java:247) at 
java.lang.ClassLoader.defineClass1(Native Method) ....

非常感谢您的帮助

此致

1 个答案:

答案 0 :(得分:1)

请参阅Overriding TableMapper splits。所以我重写了TableMapReduceUtil并将TableMapper.class添加到了addDependencyJars方法中。然后我以同样的方式继续前进 MyTableMapReduceUtil.initTableMapperJob("MyTable", // input table myScan, MyMapper.class, MyKey.class, MyValue.class, myJob, true,CustomSplitTableInputFormat.class); CustomSplitTableInputFormat扩展TableInputFormat

的位置