跟踪start-dfs.sh脚本启动时,发现极其诡异的一点,如下:
Hadoop版本: Apache Hadoop2.6.5
1、start-dfs.sh
start-dfs.sh中有这样语句:
"$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
--config "$HADOOP_CONF_DIR" \
--hostnames "$NAMENODES" \
--script "$bin/hdfs" start namenode $nameStartOpt
对应执行命令为
hadoop-daemons.sh --config "$HADOOP_CONF_DIR" --hostnames "$NAMENODES" --script "$bin/hdfs" start namenode $nameStartOpt
跟踪到hadoop-daemons.sh
2、hadoop-daemons.sh
exec "$bin/slaves.sh" --config $HADOOP_CONF_DIR cd "$HADOOP_PREFIX" \;
"$bin/hadoop-daemon.sh" --config $HADOOP_CONF_DIR "$@"
接着执行到这里,最后执行
"$bin/hadoop-daemon.sh" --config $HADOOP_CONF_DIR "$@"
这里的"$@" 为我理解为从[start-dfs.sh]中传过来的
--config "$HADOOP_CONF_DIR"
--hostnames "$NAMENODES"
--script "$bin/hdfs" start namenode $nameStartOpt
这么一大串参数。
接着跟踪,执行到hadoop-daemon.sh脚本
3、hadoop-daemon.sh
hadoopScript="$HADOOP_PREFIX"/bin/hadoop
if [ "--script" = "$1" ]
then
shift
hadoopScript=$1
shift
fi
startStop=$1
shift
command=$1
shift
前后都没有进行过 shift 操作。
这里比较
$1="--script"
是啥意思?
从hadoop-daemons.sh传入到此脚本的参数难道不是应该为
--config "$HADOOP_CONF_DIR"
--config "$HADOOP_CONF_DIR"
--hostnames "$NAMENODES"
--script "$bin/hdfs" start namenode $nameStartOpt
这几个参数吗?
为什么上面的处理过程好像传入的只有
--script "$bin/hdfs" start namenode $nameStartOpt
这个参数?
实在是搞不懂。