hive-env.sh 可以配置相关的 HADOOP 选项,里面有注掉的 cli 的示例如下。
# if [ "$SERVICE" = "cli" ]; then
# if [ -z "$DEBUG" ]; then
# export HADOOP_OPTS="$HADOOP_OPTS -XX:NewRatio=12 -Xms10m -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=15 -XX:+UseParNewGC -XX:-UseGCOverheadLimit"
# else
# export HADOOP_OPTS="$HADOOP_OPTS -XX:NewRatio=12 -Xms10m -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=15 -XX:-UseGCOverheadLimit"
# fi
# fi
Hive server2 的配置可以生效
下面的配置说明,如果 HIVE_SERVER2_DEBUG 环境变量设置为 TRUE, 则启动 debug 模式,监听一个端口。
if [ "$SERVICE" = "hiveserver2" ]; then
if [ "${HIVE_SERVER2_DEBUG}" = "TRUE" ] ; then
HADOOP_OPTS="$HADOOP_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=7902,suspend=y"
fi
fi
beeline 的配置不生效生效
if [ "$SERVICE" = "beeline" ]; then
if [ "${BEELINE_DEBUG}" = "TRUE" ] ; then
echo "SERVICE" = "beeline"
HADOOP_OPTS="$HADOOP_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=7903,suspend=y"
echo $HADOOP_OPTS
fi
fi
分析
${HIVE_HOME}/bin/ext/hiveserver2.sh 里的方法有 export HADOOP_OPTS
hiveserver2() {
>&2 echo "$(timestamp): Starting HiveServer2"
CLASS=org.apache.hive.service.server.HiveServer2
if $cygwin; then
HIVE_LIB=`cygpath -w "$HIVE_LIB"`
fi
JAR=${HIVE_LIB}/hive-service-[0-9].*.jar
export HADOOP_CLIENT_OPTS=" -Dproc_hiveserver2 $HADOOP_CLIENT_OPTS "
export HADOOP_OPTS="$HIVESERVER2_HADOOP_OPTS $HADOOP_OPTS"
exec $HADOOP jar $JAR $CLASS $HIVE_OPTS "$@"
}
${HIVE_HOME}/bin/ext/beeline.sh 里的方法没有 export HADOOP_OPTS
beeline () {
CLASS=org.apache.hive.beeline.BeeLine;
# include only the beeline client jar and its dependencies
beelineJarPath=`ls ${HIVE_LIB}/hive-beeline-*.jar`
superCsvJarPath=`ls ${HIVE_LIB}/super-csv-*.jar`
jlineJarPath=`ls ${HIVE_LIB}/jline-*.jar`
hadoopClasspath=""
if [[ -n "${HADOOP_CLASSPATH}" ]]
then
hadoopClasspath="${HADOOP_CLASSPATH}:"
fi
export HADOOP_CLASSPATH="${hadoopClasspath}${HIVE_CONF_DIR}:${beelineJarPath}:${superCsvJarPath}:${jlineJarPath}"
export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j.configurationFile=beeline-log4j2.properties "
exec $HADOOP jar ${beelineJarPath} $CLASS $HIVE_OPTS "$@"
}
解决方案
${HIVE_HOME}/bin/ext/beeline.sh 里 export HADOOP_OPTS
beeline () {
CLASS=org.apache.hive.beeline.BeeLine;
# include only the beeline client jar and its dependencies
beelineJarPath=`ls ${HIVE_LIB}/hive-beeline-*.jar`
superCsvJarPath=`ls ${HIVE_LIB}/super-csv-*.jar`
jlineJarPath=`ls ${HIVE_LIB}/jline-*.jar`
hadoopClasspath=""
if [[ -n "${HADOOP_CLASSPATH}" ]]
then
hadoopClasspath="${HADOOP_CLASSPATH}:"
fi
export HADOOP_CLASSPATH="${hadoopClasspath}${HIVE_CONF_DIR}:${beelineJarPath}:${superCsvJarPath}:${jlineJarPath}"
export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Dlog4j.configurationFile=beeline-log4j2.properties "
export HADOOP_OPTS="$HADOOP_OPTS"
exec $HADOOP jar ${beelineJarPath} $CLASS $HIVE_OPTS "$@"
}