最近从事日志分析系统工作,日志分析在hadoop上运行, 工作之余, 学习下hadoop,将所学点滴做个记录, 以作备忘。

hadoop版本:hadoop-0.20.2

1. $HDOOP_HOME/bin目录下主要有以下脚本:

脚本名 描述
hadoop-config.sh

初始化脚本,主要用来设定:
HADOOP_HOME
HADOOP_CONF_DIR
HADOOP_SLAVES

start-all.sh 启动hdfs和mapred
start-dfs.sh 启动hdfs
start-mapred.sh

启动mapred

hadoop-daemon.sh

用来启动namenode和jobtrack

hadoop-daemons.sh

用来启动datanode和tasktrack

slaves.sh

被hadoop-daemons.sh调用,通过ssh来
启动集群中datanode和tastrack

   

2. hadoop启动顺序

 

hadoop集群启动脚本分析_第1张图片

3. start-all.sh:
$HADOOP_HOME/bin/start-all.sh 脚本通过调用start-dfs.sh和start-mapred.sh来
启动hdfs和mapred
start-all.sh代码:

   
   
   
   
  1. # start dfs daemons 
  2. "$bin"/start-dfs.sh --config $HADOOP_CONF_DIR 
  3.  
  4. # start mapred daemons 
  5. "$bin"/start-mapred.sh --config $HADOOP_CONF_DIR 

4. start-dfs.sh:
$HADOOP_HOME/bin/start-dfs.sh 顺序启动namenode,datanode,secondarynamenode
start-dfs.sh代码:

   
   
   
   
  1. "$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start namenode $nameStartOpt 
  2. "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR start datanode $dataStartOpt 
  3. "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR --hosts masters start secondarynamenode 

  启动namenode是直接在本地执行的,所以启动hdfs集群必须在namenode机器上运行start-dfs.sh脚本
  启动datanode是通过ssh来进行的,所以dfs集群从namenode到datanode ssh调用必须通过认证, 即不需要输入密码确认
  hadoop-daemons.sh代码:

   
   
   
   
  1. exec "$bin/slaves.sh" --config $HADOOP_CONF_DIR cd "$HADOOP_HOME" \; "$bin/hadoop-daemon.sh" --config $HADOOP_CONF_DIR "$@" 
  

hadoop-daemons.sh最终通过slave.sh脚本来实现datanode的启动
slaves.sh 代码:

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

 从ssh $HADOOP_SSH_OPTS $slave $"${@// /\\ }"可以看出, 确实是通过ssh调用了相应的命令
另外, 如果集群中的ssh服务端口号改变了(默认是22),需要在
$HADOOP_SSH_OPTS中设置端口号, 或者
其他的一些参数

5. start-mapred.sh:

$HADOOP_HOME/bin/start-mapred.sh顺序启动jobtrack和tasktrack

   
   
   
   
  1. "$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start jobtracker 
  2. "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR start tasktracker 

同hdfs的namenode一样, jobtrack也是在本地启动的,也就是start-mapred.sh脚本必须在jobtrack机器上运行
tasktracker 与datanode一样, 通过ssh来启动
6. stop-all.sh:

   
   
   
   
  1. "$bin"/stop-mapred.sh --config $HADOOP_CONF_DIR 
  2. "$bin"/stop-dfs.sh --config $HADOOP_CONF_DIR 

停止过程正好是启动的反过程, stop-mapred.sh和stop-dfs.sh也必须在jobtrack和
namenode机器上执行(完)