2013-11-25 11 views
2

我有一个Mesos集群设置 - 我已证实主人可以看到奴隶 - 但是当我尝试要运行Hadoop作业,所有任务都处于状态为“丢失”状态。同样的错误出现在所有从属stderr日志中:Mesos上的Hadoop失败,出现“无法找到或加载主类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/的说明,我在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任务跟踪器,因此我想可以通过mesos-slave设置任何CLASSPATH

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

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

回答

3

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

我不得不修改bin/hadoop的下载分配,找到自己的位置dirname $0而不是which $0

相关问题