Mesos上的Hadoop失败,“无法找到或加载主类org.apache.hadoop.mapred.MesosExecutor”

时间:2013-11-25 18:30:42

标签: hadoop mesos

我有一个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/上的说明,我在HDFS上放置了修改后的Hadoop发行版,每个从站都可以访问。 在Hadoop发行版的lib目录中,我添加了hadoop-mesos-0.0.4.jarmesos-0.14.2.jar

我已经验证每个奴隶确实下载了这个Hadoop发行版,hadoop-mesos-0.0.4.jar包含了类org.apache.hadoop.mapred.MesosExecutor,所以我无法弄清楚为什么找不到这个类。

我正在使用CDH4.4.0中的Hadoop和mesos-0.15.0-rc4。

是否有人对可能出现的问题有任何建议?我知道我总是会遇到一个CLASSPATH问题,但是,在这种情况下,mesos-slave正在下载,解包并尝试运行Hadoop TaskTracker,所以我想任何CLASSPATH都会被设置由mesos-slave。

在从属日志的标准输出中,打印环境。有一个MESOS_HADOOP_HOME是空的。这应该是什么?如果它应该设置为下载的Hadoop发行版,我无法提前设置它,因为每次都会将Hadoop发行版下载到新位置。

如果相关(可能存在某些权限问题),尝试通过主UI浏览从属日志时,我会收到错误Error browsing path: ...。 运行mesos-slave的用户可以在我手动操作时浏览到正确的目录。

1 个答案:

答案 0 :(得分:3)

我发现了问题。已下载的Hadoop发行版的bin/hadoop尝试通过运行which $0来查找其位置。但是,如果存在(即/usr/lib/hadoop),它将找到当前的Hadoop安装,并将加载该安装的lib目录下的jar而不是下载的lib目录。

我必须修改已下载发行版的bin/hadoop,以使用dirname $0而不是which $0找到自己的位置。