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前,否則設置其后