文章目录
环境
hadoop :1.0.0
java :1.8.0_171
hadoop脚本解析
接下来所讲的hadoop脚本是指的文件$HADOOP_HOME/bin/hadoop。本文会按照从前往后的顺序解析此脚本
1. 获取hadoop脚本所在路径
# 获取hadoop命令所在的文件夹
bin=`dirname "$0"`
# 进入hadoop所在的bin目录
bin=`cd "$bin"; pwd`
2. 加载hadoop-config.sh
#如果$HADOOP_HOME/libexec/hadoop-config.sh存在,则执行,否则执行bin/hadoop-config.sh
if [ -e "$bin"/../libexec/hadoop-config.sh ]; then
. "$bin"/../libexec/hadoop-config.sh
else
. "$bin"/hadoop-config.sh
fi
3.没搞明白
cygwin=false
case "`uname`" in
CYGWIN*) cygwin=true;;
esac
4.指定CLASSPATH
CLASSPATH依次追加了如下几个文件夹
- HADOOP_CONF_DIR
- HADOOP_CLASSPATH
- $JAVA_HOME/lib/tools.jar
- $HADOOP_HOME/build/classes
- $HADOOP_HOME/build
- $HADOOP_HOME/build/test/classes
- $HADOOP_HOME/build/tools
# CLASSPATH initially contains $HADOOP_CONF_DIR
CLASSPATH="${HADOOP_CONF_DIR}"
if [ "$HADOOP_USER_CLASSPATH_FIRST" != "" ] && [ "$HADOOP_CLASSPATH" != "" ] ; then
CLASSPATH=${CLASSPATH}:${HADOOP_CLASSPATH}
fi
CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar
# for developers, add Hadoop classes to CLASSPATH
if [ -d "$HADOOP_HOME/build/classes" ]; then
CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build/classes
fi
if [ -d "$HADOOP_HOME/build/webapps" ]; then
CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build
fi
if [ -d "$HADOOP_HOME/build/test/classes" ]; then
CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build/test/classes
fi
if [ -d "$HADOOP_HOME/build/tools" ]; then
CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build/tools
fi
5.添加核心依赖
- 如果hadoop的home里有share/hadoop/hadoop-core-*文件,则依次判断并追加
- $HADOOP_PREFIX/share/hadoop
- share/hadoop里所有hadoop-core-前缀的jar包
- /share/hadoop/lib里的所以jar包
- share/hadoop/lib/jsp-2.1/里的jar包
- share/hadoop里所有hadoop-tools-前缀的jar包
- 如果1不成立,则依次判断并追加
- $HADOOP_HOME
- $HADOOP_HOME/hadoop-core-*.jar
- $HADOOP_HOME/lib/*.jar

本文详细解析了Hadoop 1.0.0版本的脚本工作原理,从获取脚本路径到加载配置,再到指定CLASSPATH、添加核心依赖、日志配置和远程调试设置。特别强调了如何进行远程调试,包括启动jobtracker进程时所需的参数配置。
最低0.47元/天 解锁文章
6万+

被折叠的 条评论
为什么被折叠?



