我有一个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.jar
和mesos-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的用户可以在我手动操作时浏览到正确的目录。
答案 0 :(得分:3)
我发现了问题。已下载的Hadoop发行版的bin/hadoop
尝试通过运行which $0
来查找其位置。但是,如果存在(即/usr/lib/hadoop
),它将找到当前的Hadoop安装,并将加载该安装的lib
目录下的jar而不是下载的lib
目录。
我必须修改已下载发行版的bin/hadoop
,以使用dirname $0
而不是which $0
找到自己的位置。