您的位置:首页 > 大数据

大数据学习笔记:windows下hadoop的启动脚本分析,start-all.cmd

2017-08-04 22:29 1396 查看
以start-all.cmd为起点分析hadoop启动过程。

echo This script is Deprecated. Instead use start-dfs.cmd and start-yarn.cmd
此句输出提示信息,建议使用start-dfs.cmd与start-yarn.cmd批处理命令。

if not defined HADOOP_BIN_PATH (
set HADOOP_BIN_PATH=%~dp0
)


若无定义则设置HADOOP_BIN_PATH变量,取start-all.cmd所在目录(C:\DevProgram\hadoop-2.7.3\sbin)进行赋值,因为start-all.cmd就处于sbin目录下。

if "%HADOOP_BIN_PATH:~-1%" == "\" (
set HADOOP_BIN_PATH=%HADOOP_BIN_PATH:~0,-1%
)
":~":对字符串的切片操作。此句意为若HADOOP_BIN_PATH以"\"结尾,则滤掉这个反斜杠。

set DEFAULT_LIBEXEC_DIR=%HADOOP_BIN_PATH%\..\libexec
设置DEFAULT_LIBEXEC_DIR变量,观察文件目录结构即可理解此句。HADOOP_BIN_PATH已被赋为"C:\DevProgram\hadoop-2.7.3\sbin",取其父目录下的libexec目录赋给DEFAULT_LIBEXEC_DIR:



if not defined HADOOP_LIBEXEC_DIR (
set HADOOP_LIBEXEC_DIR=%DEFAULT_LIBEXEC_DIR%
)
若未定义则定义HADOOP_LIBEXEC_DIR。

call %HADOOP_LIBEXEC_DIR%\hadoop-config.cmd %*

调用另一个批处理文件C:\DevProgram\hadoop-2.7.3\libexec\hadoop-config.cmd

转到hadoop-config.cmd代码。

if not defined HADOOP_COMMON_DIR (
set HADOOP_COMMON_DIR=share\hadoop\common
)
if not defined HADOOP_COMMON_LIB_JARS_DIR (
set HADOOP_COMMON_LIB_JARS_DIR=share\hadoop\common\lib
)
if not defined HADOOP_COMMON_LIB_NATIVE_DIR (
set HADOOP_COMMON_LIB_NATIVE_DIR=lib\native
)
if not defined HDFS_DIR (
set HDFS_DIR=share\hadoop\hdfs
)
if not defined HDFS_LIB_JARS_DIR (
set HDFS_LIB_JARS_DIR=share\hadoop\hdfs\lib
)
if not defined YARN_DIR (
set YARN_DIR=share\hadoop\yarn
)
if not defined YARN_LIB_JARS_DIR (
set YARN_LIB_JARS_DIR=share\hadoop\yarn\lib
)
if not defined MAPRED_DIR (
set MAPRED_DIR=share\hadoop\mapreduce
)
if not defined MAPRED_LIB_JARS_DIR (
set MAPRED_LIB_JARS_DIR=share\hadoop\mapreduce\lib
)
设置一系列路径变量,目的是为了提取不同路径下的Java包。

set HADOOP_HOME=%~dp0
将hdfs-config.cmd所在目录的父目录路径赋给HADOOP_HOME

for %%i in (%HADOOP_HOME%.) do (
set HADOOP_HOME=%%~dpi
)
if "%HADOOP_HOME:~-1%" == "\" (
set HADOOP_HOME=%HADOOP_HOME:~0,-1%
)
此句同样为设置HADOOP_HOME变量,并过滤掉其结尾的反斜杠(如果有的话)。

if not exist %HADOOP_HOME%\share\hadoop\common\hadoop-common-*.jar (
@echo +================================================================+
@echo ^|      Error: HADOOP_HOME is not set correctly                   ^|
@echo +----------------------------------------------------------------+
@echo ^| Please set your HADOOP_HOME variable to the absolute path of   ^|
@echo ^| the directory that contains the hadoop distribution            ^|
@echo +================================================================+
exit /b 1
)
若缺失包则报错并退出。

if not defined HADOOP_CONF_DIR (
set HADOOP_CONF_DIR=%HADOOP_HOME%\etc\hadoop
)
将C:\DevProgram\hadoop-2.7.3\etc\hadoop赋给HADOOP_CONF_DIR,start-all.cmd中将会用到这一变量

if "%1" == "--config" (
set HADOOP_CONF_DIR=%2
shift
shift
)
判断用户键入的命令中是否指定了自定义配置目录(通过参数--config),如果有的话则将用户指定的目录赋给HADOOP_CONF_DIR

if "%1" == "--loglevel" (
set HADOOP_LOGLEVEL=%2
shift
shift
)
if "%1" == "--hosts" (
set HADOOP_SLAVES=%HADOOP_CONF_DIR%\%2
shift
shift
)
同理,这两局用于检测用户命令中是否指定了相关的自定义参数。

if exist %HADOOP_CONF_DIR%\hadoop-env.cmd (
call %HADOOP_CONF_DIR%\hadoop-env.cmd
)
调用%HADOOP_CONF_DIR%\hadoop-env.cmd。

转到hadoop-env.cmd代码。

set JAVA_HOME=%JAVA_HOME%
设置Java主目录。

if exist %HADOOP_HOME%\contrib\capacity-scheduler (
if not defined HADOOP_CLASSPATH (
set HADOOP_CLASSPATH=%HADOOP_HOME%\contrib\capacity-scheduler\*.jar
) else (
set HADOOP_CLASSPATH=%HADOOP_CLASSPATH%;%HADOOP_HOME%\contrib\capacity-scheduler\*.jar
)
)
将容量调度器相关包追加到hadoop的类路径下。(此版本hadoop目录下没找到相关文件)

if not defined HADOOP_SECURITY_LOGGER (
set HADOOP_SECURITY_LOGGER=INFO,RFAS
)
if not defined HDFS_AUDIT_LOGGER (
set HDFS_AUDIT_LOGGER=INFO,NullAppender
)


安全相关变量。

set HADOOP_NAMENODE_OPTS=-Dhadoop.security.logger=%HADOOP_SECURITY_LOGGER% -Dhdfs.audit.logger=%HDFS_AUDIT_LOGGER% %HADOOP_NAMENODE_OPTS%
set HADOOP_DATANODE_OPTS=-Dhadoop.security.logger=ERROR,RFAS %HADOOP_DATANODE_OPTS%
set HADOOP_SECONDARYNAMENODE_OPTS=-Dhadoop.security.logger=%HADOOP_SECURITY_LOGGER% -Dhdfs.audit.logger=%HDFS_AUDIT_LOGGER% %HADOOP_SECONDARYNAMENODE_OPTS%
set HADOOP_CLIENT_OPTS=-Xmx512m %HADOOP_CLIENT_OPTS%
名称节点、数据节点、辅助节点以及客户端的一些选项。

set HADOOP_SECURE_DN_USER=%HADOOP_SECURE_DN_USER%
set HADOOP_SECURE_DN_LOG_DIR=%HADOOP_LOG_DIR%\%HADOOP_HDFS_USER%
set HADOOP_PID_DIR=%HADOOP_PID_DIR%
set HADOOP_SECURE_DN_PID_DIR=%HADOOP_PID_DIR%
set HADOOP_IDENT_STRING=%USERNAME%
待分析。

回到hadoop-config.cmd代码。

if not defined JAVA_HOME (
echo Error: JAVA_HOME is not set.
goto :eof
)
if not exist %JAVA_HOME%\bin\java.exe (
echo Error: JAVA_HOME is incorrectly set.
echo        Please update %HADOOP_HOME%\conf\hadoop-env.cmd
goto :eof
)
若不存在Java环境及其相关文件则报错。

set JAVA=%JAVA_HOME%\bin\java
设置JAVA变量。

set JAVA_HEAP_MAX=-Xmx1000m
设置Java最大堆内存。

if defined HADOOP_HEAPSIZE (
set JAVA_HEAP_MAX=-Xmx%HADOOP_HEAPSIZE%m
)
若设置了hadoop的堆大小,则用其覆盖掉Java堆大小。

set CLASSPATH=%HADOOP_CONF_DIR%
设置CLASSPATH变量。

if not defined HADOOP_COMMON_HOME (
if exist %HADOOP_HOME%\share\hadoop\common (
set HADOOP_COMMON_HOME=%HADOOP_HOME%
)
)
设置HADOOP_COMMON_HOME变量。

if exist %HADOOP_COMMON_HOME%\%HADOOP_COMMON_DIR%\webapps (
set CLASSPATH=!CLASSPATH!;%HADOOP_COMMON_HOME%\%HADOOP_COMMON_DIR%
)
if exist %HADOOP_COMMON_HOME%\%HADOOP_COMMON_LIB_JARS_DIR% (
set CLASSPATH=!CLASSPATH!;%HADOOP_COMMON_HOME%\%HADOOP_COMMON_LIB_JARS_DIR%\*
)


set CLASSPATH=!CLASSPATH!;%HADOOP_COMMON_HOME%\%HADOOP_COMMON_DIR%\*


往CLASSPATH变量中追加所需类的路径。

if not defined HADOOP_LOG_DIR (
set HADOOP_LOG_DIR=%HADOOP_HOME%\logs
)
if not defined HADOOP_LOGFILE (
set HADOOP_LOGFILE=hadoop.log
)
if not defined HADOOP_LOGLEVEL (
set HADOOP_LOGLEVEL=INFO
)
if not defined HADOOP_ROOT_LOGGER (
set HADOOP_ROOT_LOGGER=%HADOOP_LOGLEVEL%,console
)
设置日志相关变量。

if not defined HADOOP_POLICYFILE (
set HADOOP_POLICYFILE=hadoop-policy.xml
)
待分析。

for /f "delims=" %%A in ('%JAVA% -Xmx32m %HADOOP_JAVA_PLATFORM_OPTS% -classpath "%CLASSPATH%" org.apache.hadoop.util.PlatformName') do set JAVA_PLATFORM=%%A
set JAVA_PLATFORM=%JAVA_PLATFORM: =_%
待分析。

set JAVA_LIBRARY_PATH=
if exist %HADOOP_COMMON_HOME%\target\bin (
set JAVA_LIBRARY_PATH=%HADOOP_COMMON_HOME%\target\bin
)


if exist %HADOOP_COMMON_HOME%\bin (
set JAVA_LIBRARY_PATH=%JAVA_LIBRARY_PATH%;%HADOOP_COMMON_HOME%\bin
)
设置JAVA的库路径。

set TOOL_PATH=%HADOOP_HOME%\share\hadoop\tools\lib\*
设置工具路径。

set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.log.dir=%HADOOP_LOG_DIR%
set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.log.file=%HADOOP_LOGFILE%
set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.home.dir=%HADOOP_HOME%
set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.id.str=%HADOOP_IDENT_STRING%
set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.root.logger=%HADOOP_ROOT_LOGGER%
if defined JAVA_LIBRARY_PATH (
set HADOOP_OPTS=%HADOOP_OPTS% -Djava.library.path=%JAVA_LIBRARY_PATH%
)
set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.policy.file=%HADOOP_POLICYFILE%
set HADOOP_OPTS=%HADOOP_OPTS% -Djava.net.preferIPv4Stack=true
一些选项。

if not defined HADOOP_HDFS_HOME (
if exist %HADOOP_HOME%\%HDFS_DIR% (
set HADOOP_HDFS_HOME=%HADOOP_HOME%
)
)
设置HDFS主目录。

if exist %HADOOP_HDFS_HOME%\%HDFS_DIR%\webapps (
set CLASSPATH=!CLASSPATH!;%HADOOP_HDFS_HOME%\%HDFS_DIR%
)
if exist %HADOOP_HDFS_HOME%\%HDFS_LIB_JARS_DIR% (
set CLASSPATH=!CLASSPATH!;%HADOOP_HDFS_HOME%\%HDFS_LIB_JARS_DIR%\*
)
set CLASSPATH=!CLASSPATH!;%HADOOP_HDFS_HOME%\%HDFS_DIR%\*
往类路径中追加内容。

if not defined HADOOP_YARN_HOME (
if exist %HADOOP_HOME%\%YARN_DIR% (
set HADOOP_YARN_HOME=%HADOOP_HOME%
)
)
设置yarn主目录。

if exist %HADOOP_YARN_HOME%\%YARN_DIR%\webapps (
set CLASSPATH=!CLASSPATH!;%HADOOP_YARN_HOME%\%YARN_DIR%
)
if exist %HADOOP_YARN_HOME%\%YARN_LIB_JARS_DIR% (
set CLASSPATH=!CLASSPATH!;%HADOOP_YARN_HOME%\%YARN_LIB_JARS_DIR%\*
)
set CLASSPATH=!CLASSPATH!;%HADOOP_YARN_HOME%\%YARN_DIR%\*
追加到类路径中。

if not defined HADOOP_MAPRED_HOME (
if exist %HADOOP_HOME%\%MAPRED_DIR% (
set HADOOP_MAPRED_HOME=%HADOOP_HOME%
)
)
设置mapreduce主目录。

if not "%HADOOP_MAPRED_HOME%\%MAPRED_DIR%" == "%HADOOP_YARN_HOME%\%YARN_DIR%" (

if exist %HADOOP_MAPRED_HOME%\%MAPRED_DIR%\webapps (
set CLASSPATH=!CLASSPATH!;%HADOOP_MAPRED_HOME%\%MAPRED_DIR%
)

if exist %HADOOP_MAPRED_HOME%\%MAPRED_LIB_JARS_DIR% (
set CLASSPATH=!CLASSPATH!;%HADOOP_MAPRED_HOME%\%MAPRED_LIB_JARS_DIR%\*
)

set CLASSPATH=!CLASSPATH!;%HADOOP_MAPRED_HOME%\%MAPRED_DIR%\*
)
追加到类路径中。

if defined HADOOP_CLASSPATH (
if not defined HADOOP_USE_CLIENT_CLASSLOADER (
if defined HADOOP_USER_CLASSPATH_FIRST (
set CLASSPATH=%HADOOP_CLASSPATH%;%CLASSPATH%;
) else (
set CLASSPATH=%CLASSPATH%;%HADOOP_CLASSPATH%;
)
)
)
如果用户指定了类路径,则将其追加到类路径中。

回到start-all.cmd代码。

if exist %HADOOP_HDFS_HOME%\sbin\start-dfs.cmd (
call %HADOOP_HDFS_HOME%\sbin\start-dfs.cmd --config %HADOOP_CONF_DIR%
)
if exist %HADOOP_YARN_HOME%\sbin\start-yarn.cmd (
call %HADOOP_YARN_HOME%\sbin\start-yarn.cmd --config %HADOOP_CONF_DIR%
)

调用C:\DevProgram\hadoop-2.7.3\sbin\start-dfs.cmd与C:\DevProgram\hadoop-2.7.3\sbin\start-yarn.cmd
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: