Hadoop на Mesos завершается с ошибкой Не удалось найти или загрузить основной класс org.apache.hadoop.mapred.MesosExecutor

У меня есть настройка кластера Mesos — я проверил, что мастер может видеть подчиненные — но когда я пытаюсь запустить задание Hadoop, все задачи заканчиваются со статусом LOST. Одна и та же ошибка присутствует во всех журналах ведомого stderr:

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, так что я полагаю, что mesos-slave настроит любую CLASSPATH.

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

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


person Aaron    schedule 25.11.2013    source источник


Ответы (1)


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

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

person Aaron    schedule 25.11.2013