您的位置:首页 > 其它

Hive2.1源码分析(一)启动脚本

2019-05-09 14:16 232 查看

 

最近在网上看到的相关材料都比较陈旧,也太简略,参看了一下其他人的内容,针对Hive2.1.1做点分享:

1)下载apache-hive-2.1.1-bin.tar.gz

2)解压缩,下面的命令行如启动报错,请自行查略Hive启动配置

3)启动hiveserver2 (非必须,使用jdbc访问的时候才使用)

bin目录下

hive --service hiveserver2 -p10001来启动hiveserver2 服务(默认为10000端口)

nohup hive --service hiverserver2 -p10001可以在后台跑

4)hive脚本运行流程

bin目录下,使用命令方法为:

./hive <parameters> --service serviceName <service parameters>

举例:hive --debug :

   查看bin/hive文件

流程中会判断$1=‘--debug’则$DEBUG=‘--debug’

 

if [ "$DEBUG" ]; then

  if [ "$HELP" ]; then //如还有--help,就会执行debug_help方法。

    debug_help

    exit 0

  else

    get_debug_params "$DEBUG"

    export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS $HIVE_MAIN_CLIENT_DEBUG_OPTS"//设置HIVE_MAIN_CLIENT_DEBUG_OPTS的参数中加入debug相应参数

  fi

fi

if [ "$SERVICE" = "" ] ; then

  if [ "$HELP" = "_help" ] ; then

    SERVICE="help"

  else

    SERVICE="cli"     //默认赋值cli

  fi

fi

这个shell脚本很多变量应该是在其他sh文件中定义,其中$SERVICE_LIST就是其他很多sh文件的最开始形成的:export SERVICE_LIST="${SERVICE_LIST}${THISSERVICE} "

hive脚本最后的$TORUN "$@" ,默认情况下TORUN其实就是cli,即执行/ext/cli.sh脚本,该脚本中主要是调用/ext/util/execHiveCmd.sh 来执行最后的CliDriver。

 【shell脚本中的$*,$@和$#

举例说:

脚本名称叫test.sh 入参三个: 1 2 3

运行test.sh 1 2 3后

$*为"1 2 3"(一起被引号包住)

$@为"1" "2" "3"(分别被包住)

$#为3(参数数量)

即exec $HADOOP jar ${HIVE_LIB}/$JAR $CLASS $HIVE_OPTS "$@" //1

其中:

$HADOOP=$HADOOP_HOME/bin/hadoop 【hive脚本中定义HADOOP=$HADOOP_HOME/bin/hadoop】

$CLASS=org.apache.hadoop.hive.cli.CliDriver【传入的第一个参数,在cli.sh中有定义】

参考:

http://www.blogjava.net/yuxh/archive/2017/03/29/432418.html

hadoop脚本(2.7.3为例)中最终会执行:

# Always respect HADOOP_OPTS and HADOOP_CLIENT_OPTS

    HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"

    #make sure security appender is turned off

    HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,NullAppender}"

 

    export CLASSPATH=$CLASSPATH

    exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@" //2

hive的debug参数就是在启动hive脚本时放到HADOOP_OPTS中的

1和2处结合可得到最终的运行命令,查看一下运行结果:ps -ef|grep CliDriver

 

  /usr/java/jdk1.8.0_101/bin/java -Xmx256m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=.. -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=.. -Dhadoop.id.str=root -Dhadoop.root.logger=INFO,console -Djava.library.path=.. -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Xmx512m -Dproc_hivecli -XX:+UseParallelGC -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=y -Dlog4j.configurationFile=hive-log4j2.properties -Djava.util.logging.config.file=..
  -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /yuxh/app/apache-hive-2.*/lib/hive-cli-2.*.jar org.apache.hadoop.hive.cli.CliDriver

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: