Hadoop-daemon.shlog rotate,看得出日志的流动方向么? 新 1->2->3->4->5 旧
hadoop_rotate_log () { log=$1; num=5; if [ -n "$2" ]; then num=$2 fi if [ -f "$log" ]; then # rotate logs while [ $num -gt 1 ]; do prev=`expr $num - 1` [ -f "$log.$prev" ] && mv "$log.$prev" "$log.$num" num=$prev done mv "$log" "$log.$num"; fi }
# Determine if we're starting a secure datanode, and if so, redefine appropriate variables if [ "$command" == "datanode" ] && [ "$EUID" -eq 0 ] && [ -n "$HADOOP_SECURE_DN_USER" ]; then
至于$EUID是系统变量。在hadoop还用到IFS变量。
nohup nice -n $HADOOP_NICENESS "$HADOOP_HOME"/bin/hadoop --config $HADOOP_CONF_DIR $command "$@" > "$log" 2>&1 < /dev/null & echo $! > $pid
nohup 是个好东西,ssh登录上主机,如果连接断了,当前执行的命令也会挂掉(sighup),有兴趣自己再去google。nice用来调优先级,没用过。
最终还是通过hadoop来执行程序。
hadoop-daemons.shexec "$bin/slaves.sh" --config $HADOOP_CONF_DIR cd "$HADOOP_HOME" \; "$bin/hadoop-daemon.sh" --config $HADOOP_CONF_DIR "$@"
cd "$HADOOP_HOME" \; 似乎没啥用。。。暂时没发现有关联pwd的配置实际调用了slaves.sh,"$bin/hadoop-daemon.sh" 也传了过去。
slaves.sh
if [ "$HOSTLIST" = "" ]; then if [ "$HADOOP_SLAVES" = "" ]; then export HOSTLIST="${HADOOP_CONF_DIR}/slaves" else export HOSTLIST="${HADOOP_SLAVES}" fi fi 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
一般我们都用slaves文件来配置slaves机器。sed "s/#.*$//;/^$/d"`;
根据正则表达式的经验,看来是去掉#注释行和空行。$"${@// /\\ }"
$@ = $1 $2 ...
${@// /\\ }为带有空格的参数加上空格转义。
$"..." 本土化?不知有啥意义,不都是英文么?