使用HBaseTestingUtility我会启动一个minicluster。
testUtil = new HBaseTestingUtility(configuration);
testUtil.startMiniCluster();
并将我的jar放在DistributedCache的类路径中
final String aJarResourcePath = Thread.currentThread().getContextClassLoader()
.getResource("abc/a-1.0.jar").getPath();
final FileSystem fs = FileSystem.get(configuration);
final Path pathToArtifacts = new Path("/Runtime/a-artifacts");
fs.mkdirs(pathToArtifacts);
fs.copyFromLocalFile(new Path(aJarResourcePath), pathToArtifacts));
DistributedCache.addFileToClassPath(disqualified, configuration);
在我的MapFn上我使用jar a-1.0.jar。我能够在MapFn中看到jar。
final Path[] fus = DistributedCache.getFileClassPaths(config);
所以我认为jar在classpath中并且指向HDFS位置但是我得到了classnotfoundexception试图创建一个对象。我不知道有什么事情请帮忙。
答案 0 :(得分:0)
我不知道这是否是您问题的原因,但Hadoop 1.2.1中addFileToClasspath
的2参数重载是deprecated。 (实际上在Hadoop 2.7.2中,似乎DistributedCache
类完全是deprecated!)javadocs并没有说为什么该方法已被弃用,所以很难知道这是不是问题。
<强>更新强>
更多的研究表明,您的问题可能实际上是JAR文件是not being expanded。请尝试使用addArchiveToClasspath
。