hadoop3.3.0启动脚本分析
- 1 启动start-all.sh
- 2 启动hadoop-config.sh
- 3 启动hadoop-functions.sh
- 4 启动start-dfs.sh
- 4.1 使用hdfs脚本启动namenode
- 4.2 使用hdfs脚本启动datanode
- 4.3 使用hdfs脚本启动secondarynamenode
- 4.4 使用hdfs脚本启动journalnode
- 4.5 使用hdfs脚本启动zkfc
- 5 启动start-yarn.sh
- 6 总结启动顺序和内容
1 启动start-all.sh
在子工程hadoop-common-project下的模块hadoop-common中的bin目录里,使用start-all.sh启动工程.
启动流程:
1.1 获取libexec的绝对路径
1.2 启动hadoop-config.sh
1.3 启动hadoop-functions.sh
1.4 启动start-dfs.sh
1.5 启动start-yarn.sh
2 启动hadoop-config.sh
这是第二个启动的脚本.
流程:
2.1 首先检查bash的版本,要求高于3.2
2.2 执行hadoop-functions.sh,此脚本定义了很多方法
2.3 使用hadoop_deprecate_envvar方法把老的过时变量替换掉
2.4 可选是否使用hadoop-layout.sh脚本,建议此脚本是非常熟悉hadoop的人使用
2.5 启动hadoop shell的运行环境
2.6 一次设置hadoop的配置目录,执行hadoop-env.sh脚本,加载shellprofile.d的内容,执行hadoop_exec_userfuncs.sh脚本,执行.hadoop-env,检查log4j.properties文件是否存在,把HADOOP_SLAVE的名称全部换为HADOOP_WORKER,根据操作系统设置一些变量,设置JAVA_HOME,初始化hadoop shell环境,此时用户自定义的也加入生效了,加载子工程任何复写的变量,初始化shellprofiles,添加java 本地lib路径,把HADOOP_COMMON下的lib路径添加进去,把shellprofiles
的路径添加进去,执行用户的定义行为.hadooprc,最后执行结束设置方法,结束各种设置
2.7 至此脚本执行完毕
3 启动hadoop-functions.sh
提供其它脚本要调用的方法.
4 启动start-dfs.sh
在子工程hadoop-hdfs-project的模块hadoop-hdfs中,进入该脚本,首先执行hdfs-config.sh脚本,判断hdfs-env.sh是否存在,若存在则执行,这里不分析,因为工程中默认是不存在该脚本的,然后替换了一些旧变量的定义,然后获取一些namenode的启动参数.
4.1 使用hdfs脚本启动namenode
首先执行hdfs getconf -namenodes,对应启动的类为org.apache.hadoop.hdfs.tools.,再执行hdfs namenode ,参数为-workers,-config,-hostnames,-daemon start
4.2 使用hdfs脚本启动datanode
同启动namenode,没有参数-hostnames.
4.3 使用hdfs脚本启动secondarynamenode
同namenode,getconf参数变为-secondarynamenodes,其余不变.
4.4 使用hdfs脚本启动journalnode
同namenode,getconf参数为-journalNodes,其余不变.
4.5 使用hdfs脚本启动zkfc
同namenode,getconf参数变为-confKey,其余不变.
5 启动start-yarn.sh
同启动dfs一样,这里分别启动使用yarn脚本resourceManager和nodemanager,最后使用hdfs脚本启动proxyserver,yarn脚本和hdfs脚本基本相同.
6 总结启动顺序和内容
start-all.sh顺序启动hadoop-config.sh,hadoop-functions.sh,start-dfs.sh
和start-yarn.sh.
start-dfs.sh顺序启动namenode,datanode,secondarynamenode,journalnode和zkfc.
start-yarn.sh顺序启动resourceManager和nodemanager,再利用hdfs启动proxyserver
hdfs脚本启动zkfc.