Hadoop 2.2.0启动脚本——libexec/hadoop-config.sh
start-all.sh调用start-dfs.sh和start-yarn.sh
start-dfs.sh和start-yarn.sh都调用libexec/hadoop-config.sh初始化环境配置
一. libexec/hadoop-config.sh
1. 初始化库文件环境变量,包括share/hadoop/*和lib/native,share目录是jar库文件,lib/native目录下是C/C++库文件
2. 如果使用--config <config-dir>参数,则设置<config-dir>为自定义配置文件目录HADOOP_CONF_DIR
3. 检测conf/hadoop-env.sh是否存在,存在则设置conf为默认配置文件目录DEFAULT_CONF_DIR,不存在则设置etc/hadoop为默认配置文件目录
4. 设置$HADOOP_CONF_DIR为配置文件目录,不存在则设置$HADOOP_HOME/$DEFAULT_CONF_DIR为配置文件目录
(通过export HADOOP_CONF_DIR="${HADOOP_CONF_DIR:-$HADOOP_PREFIX/$DEFAULT_CONF_DIR}"设置)
5. HADOOP_SLAVES和HADOOP_SLAVE_NAMES,要么设置两项,要么都不设置;获取--hosts或--hostnames参数来设置两个变量
6. 加载$HADOOP_CONF_DIR/hadoop-env.sh
7. 检测IPv6,及HADOOP是否允许IPv6
8. 设置MALLOC_ARENA_MAX,glibc虚拟内存使用相关?
9. 检测JAVA_HOME
10. 设置JAVA_HEAP_MAX默认值(-Xmx1000m),如果设置HADOOP_HEAPSIZE(数字,不带m),则设-Xms${HADOOP_HEAPSIZE}m
11. 设置CLASSPATH为$HADOOP_CONF_DIR,
$HADOOP_COMMON_DIR(share/hadoop/common)————如果存在webapps目录,
$HADOOP_COMMON_LIB_JARS_DIR/*(share/hadoop/common/lib/*)
$HADOOP_COMMON_DIR/*(share/hadoop/common/*)
12. 设置LOG_DIR和LOG_FILE,设置POLICY_FILE
13. 设置JAVA_LIBRARY_PATH为lib/native
14. 设置TOOL_PATH为share/hadoop/tools/lib/*
15. 设置-Dhadoop.log.dir=$HADOOP_LOG_DIR
-Dhadoop.log.file=$HADOOP_LOGFILE
-Dhadoop.home.dir=$HADOOP_PREFIX
-Dhadoop.id.str=$HADOOP_IDENT_STRING
-Dhadoop.root.logger=${HADOOP_ROOT_LOGGER:-INFO,console}
-Djava.library.path=$JAVA_LIBRARY_PATH
-Dhadoop.policy.file=$HADOOP_POLICYFILE
-Djava.net.preferIPv4Stack=true
设置LD_LIBRARY_PATH,export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAVA_LIBRARY_PATH
16. 设置HADOOP_HDFS_HOME为etc/hadoop/hdfs
设置CLASSPATH,同common
17. YARN/MAPRED同上
18. 检测HADOOP_CLASSPATH,如果设置HADOOP_USER_CLASSPATH_FIRST,则HADOOP_CLASSPATH设置在CLASSPATH前,否则设置其后