你好,游客 登录 注册 搜索
背景:
阅读新闻

Hadoop的shell脚本分析

[日期:2012-02-11] 来源:Linux社区  作者:weixiaolu [字体: ]

前记:
这些天一直学习Hadoop,学习中也遇到了许多的问题,主要是对hadoop的shell脚本和hadoop的源码概念不够清楚,所以我就对hadoop的bin目录下的shell脚本进行了研究,有一些成果想记录下来,也希望大家前来批评指正。

分析原因:

很多hadoop的初学者对hadoop的脚本不是很清楚,不知道为什么可以在命令行中启动hadoop,也不知道为什么有时在命令行中运行hadoop命令时会出现java的错误。等等这些问题,究其原因我认为是大家对shell脚本不太了解。我曾学过一些shell编程的知识,可是对hadoop的shell程序细节还不是全部了解,我想从宏观上分析一下hadoop脚本的运行流程。

脚本分析:

start-all.sh:

  1. # Start all hadoop daemons.  Run this on master node.   
  2.   
  3. bin=`dirname "$0"`   
  4. bin=`cd "$bin"; pwd`   
  5.   
  6. "$bin"/hadoop-config.sh   
  7.   
  8. # start dfs daemons   
  9. "$bin"/start-dfs.sh --config $HADOOP_CONF_DIR   
  10.   
  11. # start mapred daemons   
  12. "$bin"/start-mapred.sh --config $HADOOP_CONF_DIR  

分析:
正如注释的一样,这个脚本是在master上运行的,即我们运行namenode和jobtracker的主机。它首先启动了hadoop-config.sh脚本,查看hadoop-config.sh,我们可以知道它的作用是对一些变量进行赋值,这些变量有HADOOP_HOME(hadoop的安装目录),HADOOP_CONF_DIR(hadoop的配置文件目录),HADOOP_SLAVES(--hosts指定的文件的地址),为了让大家更好地理解,下面贴出hadoop-config.sh的部分代码

  1. #check to see it is specified whether to use the slaves or the   
  2. # masters file   
  3. if [ $# -gt 1 ]   
  4. then   
  5.     if [ "--hosts" = "$1" ]   
  6.     then   
  7.         shift   
  8.         slavesfile=$1  
  9.         shift   
  10.         export HADOOP_SLAVES="${HADOOP_CONF_DIR}/$slavesfile"  
  11.     fi  

前面的注释意思是:判断是使用slaves文件,还是master文件,这里为什么要判断呢?那我们带着疑问接着分析下去吧。然后start-all.sh根据hadoop/conf目录下的配置信息启动了start-dfs.sh和start-mapred.sh两个脚本,下面我们去看看这两个脚本又做了些什么吧。

start-dfs.sh:

  1. # Start hadoop dfs daemons.   
  2. # Optinally upgrade or rollback dfs state.   
  3. # Run this on master node.   
  4.   
  5. usage="Usage: start-dfs.sh [-upgrade|-rollback]"  
  6.   
  7. bin=`dirname "$0"`   
  8. bin=`cd "$bin"; pwd`   
  9.   
  10. "$bin"/hadoop-config.sh   
  11.   
  12. # get arguments   
  13. if [ $# -ge 1 ]; then   
  14.     nameStartOpt=$1  
  15.     shift   
  16.     case $nameStartOpt in   
  17.       (-upgrade)   
  18.         ;;   
  19.       (-rollback)    
  20.         dataStartOpt=$nameStartOpt   
  21.         ;;   
  22.       (*)   
  23.           echo $usage   
  24.           exit 1  
  25.         ;;   
  26.     esac   
  27. fi   
  28.   
  29. # start dfs daemons   
  30. # start namenode after datanodes, to minimize time namenode is up w/o data   
  31. # note: datanodes will log connection errors until namenode starts   
  32. "$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start namenode $nameStartOpt   
  33. "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR start datanode $dataStartOpt   
  34. "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR --hosts masters start secondarynamenode  
linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款