2016-02-13 54 views
0

使用HBaseTestingUtility我會啓動一個minicluster。類路徑中的分佈式緩存Jar,但獲取ClassNotFoundException

testUtil = new HBaseTestingUtility(configuration); 
testUtil.startMiniCluster(); 

,並提供我的罐子在DistributedCache的classpath

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我使用的罐子-1.0.jar的地方。我能看到罐子在MapFn

final Path[] fus = DistributedCache.getFileClassPaths(config); 

所以我想罐子在classpath中並指向HDFS的位置,但我得到的ClassNotFoundException試圖創建一個對象。我不確定發生了什麼事,請幫忙。

回答

0

我不知道這是你的問題的原因,但在Hadoop 1.2.1中,addFileToClasspath的2參數過載是deprecated。 (事實上​​,在Hadoop 2.7.2中,看起來DistributedCache類是整體的deprecated!)javadocs不會說爲什麼該方法已被棄用,因此很難知道這是否可能是問題所在。

UPDATE

了些研究表明,你的問題可能實際上是JAR文件是not being expanded。改爲使用addArchiveToClasspath