RM启动命令
$HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager
yarn-daemon.sh分析
case $startStop in
(start)
[ -w "$YARN_PID_DIR" ] || mkdir -p "$YARN_PID_DIR"
if [ -f $pid ]; then //如果pid文件存在则代表RM进程存活,提示先kill掉进程再启动
if kill -0 `cat $pid` > /dev/null 2>&1; then //kill -0 pid 不发送任何信号,但是系统会进行错误检查。
//所以经常用来检查一个进程是否存在,存在则echo $?返回0;
//不存在返回1
echo $command running as process `cat $pid`. Stop it first.
exit 1
fi
fi
if [ "$YARN_MASTER" != "" ]; then
echo rsync from $YARN_MASTER
rsync -a -e ssh --delete --exclude=.svn --exclude='logs/*' --exclude='contrib/hod/logs/*' $YARN_MASTER/ "$HADOOP_YARN_HOME"
fi
hadoop_rotate_log $log
echo starting $command, logging to $log
cd "$HADOOP_YARN_HOME"
nohup nice -n $YARN_NICENESS "$HADOOP_YARN_HOME"/bin/yarn --config $YARN_CONF_DIR $command "$@" > "$log" 2>&1 < /dev/null & //通过nice命令设置调度优先级(默认为0,表示不抢占
echo $! > $pid
sleep 1
head "$log"
# capture the ulimit output
echo "ulimit -a" >> $log
ulimit -a >> $log 2>&1 //将ulimit信息打印到log中
;;
/bin/yarn分析
$HADOOP_YARN_HOME"/bin/yarn --config $YARN_CONF_DIR
c
o
m
m
a
n
d
"
command "
command"@"
== bin/yarn --config $YARN_CONF_DIR resourcemanager
JAVA=$JAVA_HOME/bin/java
elif [ "$COMMAND" = "resourcemanager" ] ; then
CLASSPATH=${CLASSPATH}:$YARN_CONF_DIR/rm-config/log4j.properties
CLASS='org.apache.hadoop.yarn.server.resourcemanager.ResourceManager'
YARN_OPTS="$YARN_OPTS $YARN_RESOURCEMANAGER_OPTS"
if [ "$YARN_RESOURCEMANAGER_HEAPSIZE" != "" ]; then
JAVA_HEAP_MAX="-Xmx""$YARN_RESOURCEMANAGER_HEAPSIZE""m"
fi
exec "$JAVA" -Dproc_$COMMAND $JAVA_HEAP_MAX $YARN_OPTS -classpath "$CLASSPATH" $CLASS "$@"
至此,看到最终执行的命令是:
java -classpath xxx org.apache.hadoop.yarn.server.resourcemanager.ResourceManager
即入口类是ResourceManager。