2013-11-25 2 views
2

У меня есть установка кластера Mesos - я проверил, что мастер может видеть подчиненные устройства - но когда я пытаюсь для запуска работы Hadoop, все задачи заканчиваются статусом LOST. Та же ошибка присутствует во всех журналах Stderr ведомых:Hadoop на Mesos не удается: «Не удалось найти или загрузить основной класс org.apache.hadoop.mapred.MesosExecutor»

Error: Could not find or load main class org.apache.hadoop.mapred.MesosExecutor 

и это единственная линия в журналах Stderr.

Следуя инструкциям на http://mesosphere.io/learn/run-hadoop-on-mesos/, я поместил модифицированный дистрибутив Hadoop на HDFS, доступ к которому может получить каждый подчиненный. В каталоге lib распределения Hadoop я добавил hadoop-mesos-0.0.4.jar и mesos-0.14.2.jar.

Я проверил, что каждое подчиненное устройство действительно загружает этот дистрибутив Hadoop и что hadoop-mesos-0.0.4.jar содержит класс org.apache.hadoop.mapred.MesosExecutor, поэтому я не могу понять, почему класс не найден.

Я использую Hadoop от CDH4.4.0 и mesos-0.15.0-rc4.

Есть ли какие-либо предложения относительно того, что может быть проблемой? Я знаю, что всегда начинал с проблемы CLASSPATH, но в этом случае mesos-slave загружает, распаковывает и пытается запустить Hadoop TaskTracker, поэтому я бы предположил, что любой CLASSPATH будет настроен на mesos-slave.

В режиме ведомых журналов среда печатается. Существует MESOS_HADOOP_HOME, который пуст. Должно ли это быть настроено на что-то? Если предполагается, что он настроен на загруженный дистрибутив Hadoop, я не могу установить его заранее, потому что дистрибутив Hadoop загружается в новое место каждый раз.

В случае, если это связано (возможно, с некоторыми разрешениями), при попытке просмотреть ведомые журналы через главный пользовательский интерфейс, я получаю ошибку Error browsing path: .... Пользователь, запускающий mesos-slave, может перейти к правильному каталогу, когда я делаю это вручную.

ответ

3

Я нашел проблему. bin/hadoop загруженного дистрибутива Hadoop пытается найти его местоположение, запустив which $0. Тем не менее, он найдет текущую установку Hadoop, если таковой существует (то есть /usr/lib/hadoop), и загрузит банки в каталоге lib этой установки, а не в загруженный каталог lib.

Мне пришлось изменить bin/hadoop загруженного дистрибутива, чтобы найти его собственное местоположение с dirname $0 вместо which $0.