On 2015/11/4 17:09, haosdent wrote:
I notice
```
"user":"root"
```
Do you make sure could execute `hadoop version` under root?


[root@tylersburg spark-1.5.1-bin-hadoop2.6]# whoami
root
[root@tylersburg spark-1.5.1-bin-hadoop2.6]# 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

[root@tylersburg spark-1.5.1-bin-hadoop2.6]# ls -hl /opt/hadoop-2.6.0/bin/hadoop
-rwxr-xr-x. 1 root root 5.4K Nov  3 08:36 /opt/hadoop-2.6.0/bin/hadoop



On Wed, Nov 4, 2015 at 4:56 PM, Du, Fan <[email protected]
<mailto:[email protected]>> 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 <[email protected]
        <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>> 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>
        <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