hadoop集群启动脚本分析
最近从事日志分析系统工作,日志分析在hadoop上运行, 工作之余, 学习下hadoop,将所学点滴做个记录, 以作备忘。
hadoop版本:hadoop-0.20.2
1. $HDOOP_HOME/bin目录下主要有以下脚本:
脚本名 | 描述 |
hadoop-config.sh |
初始化脚本,主要用来设定: |
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来 |
2. hadoop启动顺序
3. start-all.sh:
$HADOOP_HOME/bin/start-all.sh 脚本通过调用start-dfs.sh和start-mapred.sh来
启动hdfs和mapred
start-all.sh代码:
- # start dfs daemons
- "$bin"/start-dfs.sh --config $HADOOP_CONF_DIR
- # start mapred daemons
- "$bin"/start-mapred.sh --config $HADOOP_CONF_DIR
4. start-dfs.sh:
$HADOOP_HOME/bin/start-dfs.sh 顺序启动namenode,datanode,secondarynamenode
start-dfs.sh代码:
- "$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start namenode $nameStartOpt
- "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR start datanode $dataStartOpt
- "$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代码:
- exec "$bin/slaves.sh" --config $HADOOP_CONF_DIR cd "$HADOOP_HOME" \; "$bin/hadoop-daemon.sh" --config $HADOOP_CONF_DIR "[email protected]"
hadoop-daemons.sh最终通过slave.sh脚本来实现datanode的启动
slaves.sh 代码:
-
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
从ssh $HADOOP_SSH_OPTS $slave $"${@// /\\ }"可以看出, 确实是通过ssh调用了相应的命令
另外, 如果集群中的ssh服务端口号改变了(默认是22),需要在$HADOOP_SSH_OPTS中设置端口号, 或者
其他的一些参数
5. start-mapred.sh:
$HADOOP_HOME/bin/start-mapred.sh顺序启动jobtrack和tasktrack
- "$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start jobtracker
- "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR start tasktracker
同hdfs的namenode一样, jobtrack也是在本地启动的,也就是start-mapred.sh脚本必须在jobtrack机器上运行
tasktracker 与datanode一样, 通过ssh来启动
6. stop-all.sh:
- "$bin"/stop-mapred.sh --config $HADOOP_CONF_DIR
- "$bin"/stop-dfs.sh --config $HADOOP_CONF_DIR
停止过程正好是启动的反过程, stop-mapred.sh和stop-dfs.sh也必须在jobtrack和
namenode机器上执行(完)
转载于:https://blog.51cto.com/yaoyinjie/631836