Hadoop的shell脚本分析(3)

分析:
看到程序倒数第二行开头的那个exec关键字了吗?它执行了slaves.sh和Hadoop-daemon.sh两个脚本,并且把hadoop-daemons.sh命令的参数也传入了hadoop-daemon.sh。呵呵,现在你知道这两个脚本的关系了吧,其实hadoop-daemons.sh中调用了hadoop-daemon.sh,但在调用之前它先执行了slaves.sh脚本,现在你想看看slaves.sh干了啥吗?呵呵,我们也来分析一下吧。


slaves.sh:

if [ "$HOSTLIST" = "" ]; then      if [ "$HADOOP_SLAVES" = "" ]; then        export HOSTLIST="${HADOOP_CONF_DIR}/slaves"     else       export HOSTLIST="${HADOOP_SLAVES}"     fi    fi       for slave in `cat "$HOSTLIST"|sed  "s/#.*$//;/^$/d"`; do    ssh $HADOOP_SSH_OPTS $slave $"${@// /\\ }" \       2>&1 | sed "s/^/$slave: /" &     if [ "$HADOOP_SLAVE_SLEEP" != "" ]; then       sleep $HADOOP_SLAVE_SLEEP     fi    done  

分析:
由于篇幅问题,以上只贴出了slaves.sh的关键代码,对于启动slaves来说,代码中的HOSTLIST变量是slaves配置文件的地址。再往后看,你会看到非常醒目的一个关键字:ssh,其实这个时候你应该明白了,slave.sh脚本的作用就是通过ssh远程登录到每个在slaves中配置的主机上。所以hadoop-daemons.sh的功能就是先远程登录slaves,在slaves上运行hadoop-daemon.sh脚本。如果你思考的再多一点,那又是怎么启动secondarynamenode的呢?难道也是先远程登录到slaves中配置的主机上吗?答案一定是否定的。而是先远程登录到master中配置的主机上,然后再启动hadoop-daemon.sh脚本,如果你仔细一点,可以看到start-dfs.sh脚本的最后一行命令是启动secondarynamenode,命令传入了“--hosts master”这就指定了按照master中配置的主机来启动secondarynamenode。Hadoop-config.sh负责对“--hosts master”进行解析。

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

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