分类缓存Jar在类路径中但获取ClassNotFoundException

时间:2016-02-13 00:16:14

标签: java hadoop jar classpath distributed-cache

使用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试图创建一个对象。我不知道有什么事情请帮忙。

1 个答案:

答案 0 :(得分:0)

我不知道这是否是您问题的原因,但Hadoop 1.2.1中addFileToClasspath的2参数重载是deprecated。 (实际上在Hadoop 2.7.2中,似乎DistributedCache类完全是deprecated!)javadocs并没有说为什么该方法已被弃用,所以很难知道这是不是问题。

<强>更新

更多的研究表明,您的问题可能实际上是JAR文件是not being expanded。请尝试使用addArchiveToClasspath