我有一个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/,我将修改后的hadoop发行版放在hdfs上,每个从机都可以访问。在 lib
hadoop发行版的目录,我已经添加了 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和mesos-0.15.0-rc4中的hadoop。
有人对可能出现的问题有什么建议吗?我知道我总是从 CLASSPATH
问题,但是,在本例中,mesos从机正在下载、解包并尝试运行hadoop tasktracker,所以我可以想象 CLASSPATH
将由mesos奴隶设置。
在从属日志的stdout中,打印环境。有一个 MESOS_HADOOP_HOME
它是空的。应该设置为什么吗?如果它应该被设置为下载的hadoop发行版,我不能预先设置它,因为hadoop发行版每次都被下载到一个新的位置。
在相关的事件中(可能存在一些权限问题),当尝试通过主ui浏览从属日志时,我会得到错误消息 Error browsing path: ...
. 当我手动执行此操作时,运行mesos slave的用户可以浏览到正确的目录。
1条答案
按热度按时间vom3gejh1#
我发现了问题。
bin/hadoop
在下载的hadoop发行版中,尝试通过运行which $0
. 但是,如果存在hadoop安装(即。/usr/lib/hadoop
),并将在该安装的lib
目录而不是下载的目录lib
目录。我不得不修改
bin/hadoop
下载的发行版找到自己的位置dirname $0
而不是which $0
.