我们使用的是cdh3u4,hadoop和hbase。我正在尝试运行一个单元测试,在启动hbasetestingutility提供的minimapreducecluster之后启动mapreduce作业。
作业在map和reducer任务stderr日志中失败:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/mapred/Child
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.mapred.Child
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)
Could not find the main class: org.apache.hadoop.mapred.Child. Program will exit.
java.lang.Throwable: Child Error
我已经想了好几天了。我猜这是一个错误的配置,而且由于配置错误的fs/hdfs配置值,集群找不到任何jar。我的测试设置代码如下所示(请原谅输入错误,因为这是scala的翻译):
HBaseTestingUtility htest = new HBaseTestingUtility();
Configuration c = htest.getConfiguration();
c.set("hadoop.log.dir", "/tmp/hadoop-test-logs"); // required or else can't start the miniMapReduceCluster
htest.startMiniCluster();
htest.startMiniMapReduceCluster();
// create and run a MapReduce job that works in production but not in test
如果这是重要的,我们正在使用游戏!framework2.0(使用sbt)和specs2测试框架和scala。我认为这不重要(我们没有使用java+junit)。
有人见过这个吗?有没有关于去哪里找的建议?
提前谢谢,
作记号
2条答案
按热度按时间t3irkdon1#
原来我们必须在minicuster上手动设置类路径。这可能是一个sbt/ivy的东西——因为我看到的所有示例都不必这样做,它们大概都在使用maven(和java)。
下面是我如何解决类路径问题(在scala中):
khbbv19g2#
我写了一篇博客:http://mevivs.wordpress.com/2012/05/03/perform-crud-over-hbase-using-hbasetestingutilityembeddedhbase/
看看这个。
希望有帮助。
-维韦克