您的位置:首页 > 运维架构

hadoop集群启动脚本分析

2011-08-05 13:35 525 查看
最近从事日志分析系统工作,日志分析在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启动顺序



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 "$@"

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机器上执行(完)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息