浅析Hadoop启动脚本

hadoop脚本分析

###1.start-all.sh

$>which start-all.sh  
/soft/hadoop/sbin/start-all.sh
$>gedit start-all.sh

执行脚本顺序:

//先执行脚本hadoop-config.sh
. $HADOOP_LIBEXEC_DIR/hadoop-config.sh等同于/soft/hadoop/sbin/libexec/hadoop-config.sh		
//start-dfs.sh脚本带了一个config的参数,可以指定单独的配置目录,需要传相关参数
/sbin/start-dfs.sh --config $HADOOP_CONF_DIR												
//可以指定单独的配置目录,需要传相关参数
/sbin/start-yarn.sh --config $HADOOP_CONF_DIR												

start-all.sh脚本中的执行内容及顺序总体如下:
a.设置变量
b.启动hdfs
c.启动yarn

###2.hadoop-config.sh

hadoop的common目录:HADOOP_COMMON_DIR=${HADOOP_COMMON_DIR:-"share/hadoop/common"}
hadoop的common的jar包目录:HADOOP_COMMON_LIB_JARS_DIR=${HADOOP_COMMON_LIB_JARS_DIR:-"share/hadoop/common/lib"}
native的目录:HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_COMMON_LIB_NATIVE_DIR:-"lib/native"}
hdfs的目录:HDFS_DIR=${HDFS_DIR:-"share/hadoop/hdfs"}
hdfs的jar包的目录:HDFS_LIB_JARS_DIR=${HDFS_LIB_JARS_DIR:-"share/hadoop/hdfs/lib"}
yarn的目录:YARN_DIR=${YARN_DIR:-"share/hadoop/yarn"}
yarn的jar包的目录:YARN_LIB_JARS_DIR=${YARN_LIB_JARS_DIR:-"share/hadoop/yarn/lib"}
mapreduce的目录:MAPRED_DIR=${MAPRED_DIR:-"share/hadoop/mapreduce"}
mapreduce的jar包的目录:MAPRED_LIB_JARS_DIR=${MAPRED_LIB_JARS_DIR:-"share/hadoop/mapreduce/lib"}

调用hadoop-config.sh的时候可以带参数

# some Java parameters
JAVA_HEAP_MAX=-Xmx1000m		设置java的堆大小,默认为1000M
# check envvars which might override default args
if [ "$HADOOP_HEAPSIZE" != "" ]; then
	#echo "run with heapsize $HADOOP_HEAPSIZE"
	JAVA_HEAP_MAX="-Xmx""$HADOOP_HEAPSIZE""m"
	#echo $JAVA_HEAP_MAX
fi
如果设置了$HADOOP_HEAPSIZE(hadoop的堆大小)这个变量,就以这个变量的值为准
# CLASSPATH initially contains $HADOOP_CONF_DIR
CLASSPATH="${HADOOP_CONF_DIR}"

设置类路径(相当于操作系统PATH的环境变量,一种搜素类的顺序);为了让hadoop运行之后的if语句,作用是不断的累加hadoop的类路径
执行命令查看hadoop的类路径:

$>hadoop classpath

该脚本的作用,设置一堆变量:
COMMON_DIR       ----配置各个模块的目录


HADOOP_CONF_DIR=…   ----hadoop的配置目录 在/etc目录下
HEAP_SIZE=1000m      ----堆大小
CLASSPATH=…       ----设置类库

###3.start-dfs.sh

该脚本内部的执行顺序
1.#调用/libexec目录下的hdfs-config.sh脚本-----等价于hadoop-config.sh,做一系列的变量设置

. $HADOOP_LIBEXEC_DIR/hdfs-config.sh

2.#获得名称节点的主机名

 NAMENODES=$($HADOOP_PREFIX/bin/hdfs getconf -namenodes)

3.#启用名称节点所调用的脚本为hadoop-daemons.sh

"$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
  --config "$HADOOP_CONF_DIR" \
  --hostnames "$NAMENODES" \
  --script "$bin/hdfs" start namenode $nameStartOpt

4.#启动datanode所用脚本为hadoop-daemons.sh,与启动namenode的区别是不带主机名

  "$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
	--config "$HADOOP_CONF_DIR" \
	--script "$bin/hdfs" start datanode $dataStartOpt

5.#启动2NN所用脚本为hadoop-daemons.sh

  "$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
	--config "$HADOOP_CONF_DIR" \
	--hostnames "$SECONDARY_NAMENODES" \
	--script "$bin/hdfs" start secondarynamenode

6.接下来是HA与ZK相关内容,先不做介绍
###4./libexec/hdfs-config.sh
就是调用/libexec/hadoop-config.sh脚本 进行一堆的变量设置

		
DEFAULT_LIBEXEC_DIR="$bin"/../libexec
HADOOP_LIBEXEC_DIR=${HADOOP_LIBEXEC_DIR:-$DEFAULT_LIBEXEC_DIR}
if [ -e "${HADOOP_LIBEXEC_DIR}/hadoop-config.sh" ]; then
  . ${HADOOP_LIBEXEC_DIR}/hadoop-config.sh
elif [ -e "${HADOOP_COMMON_HOME}/libexec/hadoop-config.sh" ]; then
  . "$HADOOP_COMMON_HOME"/libexec/hadoop-config.sh
elif [ -e "${HADOOP_HOME}/libexec/hadoop-config.sh" ]; then
  . "$HADOOP_HOME"/libexec/hadoop-config.sh
else
  echo "Hadoop common not found."
  exit
fi

###5./sbin/hadoop-daemons.sh
该脚本为启动守护进程脚本
1.先执行/libexec/hdfs-config.sh进行配置
2.对该内容进行如下解读:

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

[bin/slaves.sh]
循环slaves文件,通过ssh方式去登陆远程主机,执行相应的命令
[bin/hadoop-daemon.sh]
调用:hadoop-config.sh
###6./bin/hadoop
调用:hadoop-config
最终也是在调用java程序进行类库的加载
###7./bin/hdfs
调用:hadoop-config
最终也是在调用java程序进行类库的加载
###8.分析脚本的目的
分析脚本为了知道在集群启动过程中,各个脚本之间是怎么调用的,为了更好的管理集群
daemons启动多个守护进程,daemon启动一个且在本机启动守护进程
单独启动namenode的命令:

$>hadoop-daemon.sh start namenode

在s100中执行命令,会发现2NN启动不起来:

$>hadoop-daemon.sh start secondarynamenode

正确方式:

$>ssh s104
$>hadoop-daemon.sh start secondarynamenode

在s100中启动与关闭DN,发现可以在s100中启动DN:

$>hadoop-daemon.sh start namenode
$>hadoop-daemon.sh stop namenode

在s100中启动所有的DN,发现在s101-103之间启动了所有的DN:

$>hadoop-daemons.sh start namenode

可以登录到s102中去关闭DN:

$>hadoop-daemon.sh stop namenode

注:可以去WEB UI中查看相关DataNode信息
DataNode的信息配置在slaves文件中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值