2

我有一个 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 发行版,每个从站都可以访问。在libHadoop 发行版的目录中,我添加了hadoop-mesos-0.0.4.jarmesos-0.14.2.jar.

我已经验证每个从站实际上确实下载了这个 Hadoop 发行版,并且其中hadoop-mesos-0.0.4.jar包含 class org.apache.hadoop.mapred.MesosExecutor,所以我无法弄清楚为什么找不到该类。

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

有没有人对可能是什么问题有任何建议?我知道我总是会从一个CLASSPATH问题开始,但是在这种情况下,mesos-slave 正在下载、解包并尝试运行 Hadoop TaskTracker,所以我想任何CLASSPATH会由 mesos-slave 设置。

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

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

4

1 回答 1

3

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

我不得不修改bin/hadoop下载的发行版以找到它自己的位置,dirname $0而不是which $0.

于 2013-11-25T22:39:45.233 回答