I notice
```
"user":"root"
```
Do you make sure could execute `hadoop version` under root?

On Wed, Nov 4, 2015 at 4:56 PM, Du, Fan <fan...@intel.com> wrote:

>
>
> On 2015/11/4 16:40, Tim Chen wrote:
>
>> What OS are you running this with?
>>
>> And I assume if you run /bin/sh and try to run hadoop it can be found in
>> your PATH as well?
>>
>
> I'm using CentOS-7.2
>
> # /bin/sh hadoop version
> Hadoop 2.6.0
> Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r
> e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1
> Compiled by jenkins on 2014-11-13T21:10Z
> Compiled with protoc 2.5.0
> From source with checksum 18e43357c8f927c0695f1e9522859d6a
> This command was run using
> /opt/hadoop-2.6.0/share/hadoop/common/hadoop-common-2.6.0.jar
>
>
>
> Tim
>>
>> On Wed, Nov 4, 2015 at 12:34 AM, Du, Fan <fan...@intel.com
>> <mailto:fan...@intel.com>> wrote:
>>
>>     Hi Mesos experts
>>
>>     I setup a small mesos cluster with 1 master and 6 slaves,
>>     and deploy hdfs on the same cluster topology, both with root user
>> role.
>>
>>     #cat spark-1.5.1-bin-hadoop2.6/conf/spark-env.sh
>>     export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
>>     export
>>
>> JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/
>>     export SPARK_EXECUTOR_URI=hdfs://test/spark-1.5.1-bin-hadoop2.6.tgz
>>
>>     When I run a simple SparkPi test
>>     #export MASTER=mesos://Mesos_Master_IP:5050
>>     #spark-1.5.1-bin-hadoop2.6/bin/run-example SparkPi 10000
>>
>>     I got this on slaves:
>>
>>     I1104 22:24:02.238471 14518 fetcher.cpp:414] Fetcher Info:
>>
>> {"cache_directory":"\/tmp\/mesos\/fetch\/slaves\/556b49c1-7e6a-4f99-b320-c3f0c849e836-S6\/root","items":[{"action":"BYPASS_CACHE","uri":{"extract":true,"value":"hdfs:\/\/test\/spark-1.5.1-bin-hadoop2.6.tgz"}}],"sandbox_directory":"\/ws\/mesos\/slaves\/556b49c1-7e6a-4f99-b320-c3f0c849e836-S6\/frameworks\/556b49c1-7e6a-4f99-b320-c3f0c849e836-0003\/executors\/556b49c1-7e6a-4f99-b320-c3f0c849e836-S6\/runs\/9ec70f41-67d5-4a95-999f-933f3aa9e261","user":"root"}
>>     I1104 22:24:02.240910 14518 fetcher.cpp:369] Fetching URI
>>     'hdfs://test/spark-1.5.1-bin-hadoop2.6.tgz'
>>     I1104 22:24:02.240931 14518 fetcher.cpp:243] Fetching directly into
>>     the sandbox directory
>>     I1104 22:24:02.240952 14518 fetcher.cpp:180] Fetching URI
>>     'hdfs://test/spark-1.5.1-bin-hadoop2.6.tgz'
>>     E1104 22:24:02.245264 14518 shell.hpp:90] Command 'hadoop version
>>     2>&1' failed; this is the output:
>>     sh: hadoop: command not found
>>     Failed to fetch 'hdfs://test/spark-1.5.1-bin-hadoop2.6.tgz':
>>     Skipping fetch with Hadoop client: Failed to execute 'hadoop version
>>     2>&1'; the command was either not found or exited with a non-zero
>>     exit status: 127
>>     Failed to synchronize with slave (it's probably exited)
>>
>>
>>     As for "sh: hadoop: command not found", it indicates when mesos
>>     executes "hadoop version" command,
>>     it cannot find any valid hadoop command, but actually when I log
>>     into the slave, "hadoop vesion"
>>     runs well, because I update hadoop path into PATH env.
>>
>>     cat ~/.bashrc
>>     export
>>
>> JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.1.el7_1.x86_64/jre/
>>     export HADOOP_PREFIX=/opt/hadoop-2.6.0
>>     export HADOOP_HOME=$HADOOP_PREFIX
>>     export HADOOP_COMMON_HOME=$HADOOP_PREFIX
>>     export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop
>>     export HADOOP_HDFS_HOME=$HADOOP_PREFIX
>>     export HADOOP_MAPRED_HOME=$HADOOP_PREFIX
>>     export HADOOP_YARN_HOME=$HADOOP_PREFIX
>>     export PATH=$PATH:$HADOOP_PREFIX/sbin:$HADOOP_PREFIX/bin
>>
>>     I also try to set hadoop_home when launching mesos-slave, hmm, no
>>     luck, the slave
>>     complains it can find JAVA_HOME env when executing "hadoop version"
>>
>>     Finally I check the Mesos code where this error happens, it looks
>>     quite straight forward.
>>
>>       ./src/hdfs/hdfs.hpp
>>       44 // HTTP GET on hostname:port and grab the information in the
>>       45 // <title>...</title> (this is the best hack I can think of to
>> get
>>       46 // 'fs.default.name <http://fs.default.name>' given the tools
>>
>>     available).
>>       47 struct HDFS
>>       48 {
>>       49   // Look for `hadoop' first where proposed, otherwise, look for
>>       50   // HADOOP_HOME, otherwise, assume it's on the PATH.
>>       51   explicit HDFS(const std::string& _hadoop)
>>       52     : hadoop(os::exists(_hadoop)
>>       53              ? _hadoop
>>       54              : (os::getenv("HADOOP_HOME").isSome()
>>       55                 ? path::join(os::getenv("HADOOP_HOME").get(),
>>     "bin/hadoop")
>>       56                 : "hadoop")) {}
>>       57
>>       58   // Look for `hadoop' in HADOOP_HOME or assume it's on the PATH.
>>       59   HDFS()
>>       60     : hadoop(os::getenv("HADOOP_HOME").isSome()
>>       61              ? path::join(os::getenv("HADOOP_HOME").get(),
>>     "bin/hadoop")
>>       62              : "hadoop") {}
>>       63
>>       64   // Check if hadoop client is available at the path that was
>> set.
>>       65   // This can be done by executing `hadoop version` command and
>>       66   // checking for status code == 0.
>>       67   Try<bool> available()
>>       68   {
>>       69     Try<std::string> command = strings::format("%s version",
>>     hadoop);
>>       70
>>       71     CHECK_SOME(command);
>>       72
>>       73     // We are piping stderr to stdout so that we can see the
>>     error (if
>>       74     // any) in the logs emitted by `os::shell()` in case of
>>     failure.
>>       75     Try<std::string> out = os::shell(command.get() + " 2>&1");
>>       76
>>       77     if (out.isError()) {
>>       78       return Error(out.error());
>>       79     }
>>       80
>>       81     return true;
>>       82   }
>>
>>     It puzzled me for a while, am I missing something obviously?
>>     Thanks in advance.
>>
>>
>>


-- 
Best Regards,
Haosdent Huang

Reply via email to