1 HADOOP_CONF_DIR 选择配置文件目录。默认是${HADOOP_HOME}/conf。
2 HADOOP_LOG_DIR 存放日志文件的目录。默认是 PWD 命令产生的目录
3 HADOOP_MASTER host:path where hadoop code should be rsync'd from
4 HADOOP_PID_DIR The pid files are stored. /tmp by default.
5 HADOOP_IDENT_STRING A string representing this instance of hadoop. $USER by default
6 HADOOP_NICENESS The scheduling priority for daemons. Defaults to 0.
复制代码
这个脚本首先判断所带的参数是否小于1,如果小于就打印使用此脚本的使用帮助,shell代码如下:
1 usage="Usage: hadoop-daemon.sh [--config <conf-dir>] [--hosts hostlistfile] (start|stop) <had oop-command> <args...>"
2 if [ $# -le 1 ]; then
3 echo $usage
4 exit 1
5 fi
复制代码
1 if [ "$JAVA_HOME" != "" ]; then
2 #echo "run java in $JAVA_HOME"
3 JAVA_HOME=$JAVA_HOME
4 fi
5 if [ "$JAVA_HOME" = "" ]; then
6 echo "Error: JAVA_HOME is not set."
7 exit 1
8 fi
9 JAVA=$JAVA_HOME/bin/java
10 JAVA_HEAP_MAX=-Xmx1000m
11 if [ "$HADOOP_HEAPSIZE" != "" ]; then
12 JAVA_HEAP_MAX="-Xmx""$HADOOP_HEAPSIZE""m"
13 fi
复制代码
1 CLASSPATH="${HADOOP_CONF_DIR}"
2 CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar
3 if [ "$HADOOP_USER_CLASSPATH_FIRST" != "" ] && [ "$HADOOP_CLASSPATH" != "" ] ; then
4 CLASSPATH=${CLASSPATH}:${HADOOP_CLASSPATH}
5 fi
6 if [ -d "$HADOOP_HOME/build/classes" ]; then
7 CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build/classes
8 fi
9 if [ -d "$HADOOP_HOME/build/webapps" ]; then
10 CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build
11 fi
12 if [ -d "$HADOOP_HOME/build/test/classes" ]; then
13 CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build/test/classes
14 fi
15 if [ -d "$HADOOP_HOME/build/tools" ]; then
16 CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build/tools
17 fi
复制代码
1 if $cygwin; then
2 CLASSPATH=`cygpath -p -w "$CLASSPATH"`
3 HADOOP_HOME=`cygpath -w "$HADOOP_HOME"`
4 HADOOP_LOG_DIR=`cygpath -w "$HADOOP_LOG_DIR"`
5 TOOL_PATH=`cygpath -p -w "$TOOL_PATH"`
6 JAVA_LIBRARY_PATH=`cygpath -p -w "$JAVA_LIBRARY_PATH"`
7 fi
复制代码
第九步:设置java执行需要的本地库路径JAVA_LIBRARY_PATH,具体代码如下:
1 if [ -d "${HADOOP_HOME}/build/native" -o -d "${HADOOP_HOME}/lib/native" -o - d "${HADOOP_HOME}/sbin" ]; then
2 JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m ${HADOOP_JAVA_PLATFO RM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"`
3
4 if [ -d "$HADOOP_HOME/build/native" ]; then
5 if [ "x$JAVA_LIBRARY_PATH" != "x" ]; then
6 JAVA_LIBRARY_PATH=${JAVA_LIBRARY_PATH}:${HADOOP_HOME}/build/native/$ {JAVA_PLATFORM}/lib
7 else
8 JAVA_LIBRARY_PATH=${HADOOP_HOME}/build/native/${JAVA_PLATFORM}/lib
9 fi
10 fi
11 if [ -d "${HADOOP_HOME}/lib/native" ]; then
12 if [ "x$JAVA_LIBRARY_PATH" != "x" ]; then
13 JAVA_LIBRARY_PATH=${JAVA_LIBRARY_PATH}:${HADOOP_HOME}/lib/native/${JAV A_PLATFORM}
14 else
15 JAVA_LIBRARY_PATH=${HADOOP_HOME}/lib/native/${JAVA_PLATFORM}
16 fi
17 fi
18 _JSVC_PATH=${HADOOP_HOME}/sbin/${JAVA_PLATFORM}/jsvc
19 fi
20 如果是cygwin环境需要转换路径:
21 if $cygwin; then
22 JAVA_LIBRARY_PATH=`cygpath -p "$JAVA_LIBRARY_PATH"`
23 fi
复制代码
1 if [[ "$COMMAND" == *node ]] || [[ "$COMMAND" == *tracker ]]; then
2 command_uc=$(echo $COMMAND| tr a-z A-Z) #转换为大写
3 user_var="HADOOP_${command_uc}_USER"
4 _HADOOP_DAEMON_USER=$(eval "echo \$user_var")
5 _HADOOP_DAEMON_USER=${_HADOOP_DAEMON_USER:-$(id -un)}
6 if [ -z "$_HADOOP_DAEMON_USER" ]; then
7 echo Please specify a user to run the $COMMAND by setting $user_var
8 exit 1
9 elif [ "$_HADOOP_DAEMON_USER" == "root" ]; then
10 echo May not run daemons as root. Please specify $user_var
11 exit 1
12 fi
13 if [ "$EUID" = "0" ] ; then
14 if [ "$COMMAND" == "datanode" ] && [ -x "$_JSVC_PATH" ]; then
15 _HADOOP_RUN_MODE="jsvc"
16 elif [ -x /bin/su ]; then
17 _HADOOP_RUN_MODE="su"
18 else
19 echo "Daemon wants to run as $_HADOOP_DAEMON_USER but script is runnin g as root"
20 echo "and su is not available."
21 exit 1
22 fi
23 else
24 if [ "$_HADOOP_DAEMON_USER" != "$(whoami)" ]; then
25 echo Daemon wants to run as $_HADOOP_DAEMON_USER but not running as th at user or root.
26 exit 1
27 fi
28 _HADOOP_RUN_MODE="normal"
29 fi
30 else
31 _HADOOP_RUN_MODE="normal"
32 fi
复制代码