dfs.sh系列脚本分析

熟悉脚本的启动过程,也就熟悉了Hadoop的执行过程。所以研究并学习hadoop的脚本启动过程是非常有意义的。

对shell命令不是太熟悉,学的比较辛苦,里面还有些地方不明白,或者有错误的地方,希望如果有错误,能有人帮我指出来,谢谢。

(1)start-dfs.sh脚本

1)说明

start-dfs.sh可以单独运行,也可以启动start-all.sh时启动dfs进程。

start-dfs.sh的作用在于启动主节点的namenode,启动secondnamenode,以及各从节点的datanode进程。

脚本注释中有以下三句话: 

start-dfs支持upgrage和rollback两个参数,来更改系统的状态。其中upgrage用于升级hdfs文件系统;如果升级失败,可以用rollback对系统进行回滚。具体情况还不太明了。

最后,Run this on master node说明了必须在namenode进程运行的节点上运行该脚本。如果不在core-size.xml文件定义的fs.default.name变量的机器名运行start-dfs.sh或者start-daemon.sh或者hadoop namenode,是无法成功启动namenode守护进程的。已经经过验证。stop-dfs也是一样的。原因:在hadoop脚本中可以看出namenode进程是在本地启动的,所以如果不在core-site.xml定义的节点上运行start-dfs脚本,不会ssh到该节点上去启动namenode。这部分在后续会进行介绍。

2)脚本执行过程

由于脚本不长,而且其它脚本前面的处理也一致,所以对这个脚本作详细说明。后面的几个脚本就挑主要部分进行解释。

#说明:定义usage变量,即start-dfs.sh的使用说明,在后面的内容可以看到,当参数输入错误时,会打印该消息。

usage="Usage: start-dfs.sh[-upgrade|-rollback]"

 

#说明:定义bin变量,即hadoop home目录中bin所在目录,也即运行start-dfs所在的目录。写这段脚本的作用在于,当不是在bin目录下运行该脚本时,采用绝对路径的方式,获取hadoop home目录,并在后面的脚本中,使用该路径来读取配置文件、运行其它脚本等。

bin=`dirname"$0"`

bin=`cd"$bin"; pwd`

 

#说明:运行配置脚本配置脚本主要定义了一些环境变量;并且得到HADOOP根目录,变量名为:HADOOP_PREFIX。(HADOOP_HOME环境变量已经过时)

if [ -e"$bin/../libexec/hadoop-config.sh" ]; then

  ."$bin"/../libexec/hadoop-config.sh

else

  . "$bin/hadoop-config.sh"

fi

 

#说明:处理脚本命令的参数。如果参数个数>=1,将第一个参数赋值给nameStartOpt变量。如果该变量不为-upgrage-rollback中的任何一个,就打印usage变量消息(前面第一行就是usage的变量定义),并且退出,不再继续执行。

# get arguments

if [ $# -ge 1 ]; then

    nameStartOpt=$1

    shift

    case $nameStartOpt in

      (-upgrade)

        ;;

      (-rollback)

        dataStartOpt=$nameStartOpt

        ;;

      (*)

        echo $usage

        exit 1

        ;;

    esac

fi

 

#说明:启动dfs的所有后台进程。

# start dfs daemons

# start namenode afterdatanodes, to minimize time namenode is up w/o data

# note: datanodes willlog connection errors until namenode starts

#说明:首先运行hadoop-daemon.sh脚本,通过参数’start namenode’启动namenode,后面将介绍hadoop-daemons.sh脚本介绍namenode的启动脚本的执行过程。

"$bin"/hadoop-daemon.sh--config $HADOOP_CONF_DIR start namenode $nameStartOpt

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ca6d62991c891ea610d740b02838b49e.html