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 вместо.

Другие вопросы по тегам