Jar распределенного кэша в classpath, но получает ClassNotFoundException
Используя HBaseTestingUtility, я бы запустил мини-кластер.
testUtil = new HBaseTestingUtility(configuration);
testUtil.startMiniCluster();
и предоставить мою банку для размещения в classpath 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
final Path[] fus = DistributedCache.getFileClassPaths(config);
Поэтому я думаю, что jar находится в classpath и указывает на расположение HDFS, но я получаю исключение classnotfoundexception при попытке создать объект. Я не уверен, что происходит, пожалуйста, помогите.
1 ответ
Я не знаю, является ли это причиной вашей проблемы, но перегрузка 2 аргумента addFileToClasspath
устарела в Hadoop 1.2.1. (Действительно, в Hadoop 2.7.2 кажется, что DistributedCache
класс полностью устарел!) Javadocs не говорит, почему метод устарел, поэтому трудно понять, может ли это быть проблемой.
ОБНОВИТЬ
Немного больше исследований показывают, что ваша проблема может заключаться в том, что файл JAR не расширяется. Попробуйте использовать addArchiveToClasspath
вместо.