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

Posted

技术标签:

【中文标题】Mesos 上的 Hadoop 因“无法找到或加载主类 org.apache.hadoop.mapred.MesosExecutor”而失败【英文标题】:Hadoop on Mesos fails with "Could not find or load main class org.apache.hadoop.mapred.MesosExecutor" 【发布时间】:2013-11-25 18:30:41 【问题描述】:

我有一个 Mesos 集群设置——我已验证主服务器可以看到从服务器——但是当我尝试运行 Hadoop 作业时,所有任务都以 LOST 状态结束。所有从 stderr 日志中都存在相同的错误:

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

这是标准错误日志中唯一的一行。

按照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 和 mesos-0.15.0-rc4 的 Hadoop。

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于Mesos 上的 Hadoop 因“无法找到或加载主类 org.apache.hadoop.mapred.MesosExecutor”而失败的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 sqoop 命令会抛出异常?无法找到或加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster

Mesos 上的独立 Spark 集群访问不同 Hadoop 集群中的 HDFS 数据

Spark 安装 - 错误:无法找到或加载主类 org.apache.spark.launcher.Main

mesos+myriad应用

无法在 hadoop 中格式化 Namenode

Mesos:一个开源的分布式弹性资源管理系统