【发布时间】:2015-09-15 11:16:41
【问题描述】:
使用以前版本的 Hadoop 时,我通常为整个作业(映射器和化简器)构建 junit 测试,并通过调用 maven 或直接从 IDE 本身运行测试。系统上的任何地方都没有安装 hadoop。我使用以下属性来确保使用本地进程内运行器:
config.set("mapred.job.tracker", "local");
config.set("fs.default.name", "file:///test-fs");
这些测试运行成功。
我升级到更新版本的 Hadoop (2.4.0) 以利用新的 API。我希望能够像以前一样对我的单位做同样的事情。我现在使用的属性是:
config.set("fs.default.name", "file:///test-fs");
config.set("mapreduce.jobtracker.address", "local");
config.set("mapreduce.framework.name", "local");
我在测试中构造配置对象并将其传递给创建 Job 对象的实际代码。
但是,这不起作用,我收到以下错误:
java.io.IOException:无法初始化集群。请检查您的配置以获取 mapreduce.framework.name 和相应的服务器地址。 在 org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:120) 在 org.apache.hadoop.mapreduce.Cluster.(Cluster.java:82) 在 org.apache.hadoop.mapreduce.Cluster.(Cluster.java:75) 在 org.apache.hadoop.mapreduce.Job$9.run(Job.java:1255) 在 org.apache.hadoop.mapreduce.Job$9.run(Job.java:1251) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:415) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548) 在 org.apache.hadoop.mapreduce.Job.connect(Job.java:1250) 在 org.apache.hadoop.mapreduce.Job.submit(Job.java:1279) 在 org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1303) 在 com.roblox.games.retention.W1ReturnFromNewPlayersThePreviousWeekCalculatorJob1.calculateW1ReturnJob1(W1ReturnFromNewPlayersThePreviousWeekCalculatorJob1.java:68) 在 com.roblox.games.retention.W1ReturnFromNewPlayersThePreviousWeekCalculatorDriver.calculateW1Return(W1ReturnFromNewPlayersThePreviousWeekCalculatorDriver.java:74) 在 com.roblox.games.retention.W1ReturnFromNewPlayersThePreviousWeekCalculatorDriverTest.testCase(W1ReturnFromNewPlayersThePreviousWeekCalculatorDriverTest.java:89) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 junit.framework.TestCase.runTest(TestCase.java:154) 在 junit.framework.TestCase.runBare(TestCase.java:127) 在 junit.framework.TestResult$1.protect(TestResult.java:106) 在 junit.framework.TestResult.runProtected(TestResult.java:124) 在 junit.framework.TestResult.run(TestResult.java:109) 在 junit.framework.TestCase.run(TestCase.java:118) 在 junit.framework.TestSuite.runTest(TestSuite.java:208) 在 junit.framework.TestSuite.run(TestSuite.java:203) 在 org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:131) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
谁能指出我做错了什么?重申一下,我在运行这些测试的主机上没有任何 hadoop 安装或二进制文件。
【问题讨论】:
标签: maven unit-testing hadoop junit