Hive HWI 安装及配置

jopen 9年前

备忘,HWI安装过程,整理以前的记录,今又想起来重装一次,居然又遇到新的问题,由于是笔记,有点杂乱。

Hive Web Interface(HWI)简介:Hive自带了一个Web-GUI,功能不多,可用于效果展示,如果没有安装Hue的话,是个不错的选择。

由于hive-bin包中没有包含HWI的页面,只有Java代码编译好的jar包:hive-hwi-1.2.0.jar

因此需要下载源码从中提取jsp文件并打包成war文件到hive-lib目录中:

wget http://mirror.bit.edu.cn/apache/hive/stable/apache-hive-1.2.0-src.tar.gz  tar xf apache-hive-1.2.0-src.tar.gz  cd apache-hive-1.2.0-src/hwi  jar cfM hive-hwi-1.2.0.war -C web .

使用jar程序生成war包的方法参考:如何将Web应用打包成.war文件?

注意了,如果jar不加“-C”参数指定目录执行,都会报错:

adding: session_kill.jspjava.util.zip.ZipException: duplicate entry: session_kill.jsp

即使进入web目录也不行,如:jar cfM hive-hwi-1.2.0.war *.* .

这个文件是不可能重复的,即使移到Win下重新打包仍然报错,有点不解。

当然,采用zip压缩也可以,因为jar的压缩格式也是zip,因此两者可以通用:

yum -y install zip  zip -rq hive-hwi-1.2.0.war *
最后将hive-hwi-1.2.0.war放到hive-lib目录下即可启动hwi服务:
hiveLogPath='/var/log/hadoop/hive'  HIVE_HOME='/usr/local/hive'  mkdir -p $hiveLogPath  nohup $HIVE_HOME/hive --service hiveserver2 > $hiveLogPath/hiveserver2.log 2>&1 &  nohup $HIVE_HOME/hive --service metastore > $hiveLogPath/metastore.log 2>&1 &  nohup $HIVE_HOME/hive --service hwi > $hiveLogPath/hwi.log 2>&1 &

但是发现hwi启动失败,报错:

ERROR hwi.HWIServer: HWI WAR file not found at /usr/local/hive/usr/local/hive/lib/hive-hwi-1.2.0.war

原因是hwi启动脚本($HIVE_HOME/bin/ext/hwi.sh)的bug:

export HWI_WAR_FILE=$(ls ${HIVE_LIB}/hive-hwi-*.war)

脚本执行过程如下:

+ HWI_JAR_FILE=/usr/local/hive/lib/hive-hwi-1.2.0.jar
++ ls /usr/local/hive/lib/hive-hwi-1.2.0.war
+ export HWI_WAR_FILE=/usr/local/hive/lib/hive-hwi-1.2.0.war
...
+ exec /usr/local/hadoop/bin/hadoop jar /usr/local/hive/lib/hive-hwi-1.2.0.jar org.apache.hadoop.hive.hwi.HWIServer

此处用的是完整路径,然而HWIServer类中的代码用的相对路径:

String hwiWAR = conf.getVar(HiveConf.ConfVars.HIVEHWIWARFILE);  String hivehome = System.getenv().get("HIVE_HOME");  File hwiWARFile = new File(hivehome, hwiWAR);  if (!hwiWARFile.exists()) {      l4j.fatal("HWI WAR file not found at " + hwiWARFile.toString());      System.exit(1);  }

这里为了方便直接修改脚本第29行为:

export HWI_WAR_FILE=$(ls $HIVE_LIB/hive-hwi-*.war | awk -F/ '{print "lib/"$NF}')

当然,也可以在配置文件hive-site.xml中指定:

<property>      <name>hive.hwi.war.file</name>      <value>lib/hive-hwi-1.2.0.war</value>      <description>This sets the path to the HWI war file, relative to ${HIVE_HOME}. </description>  </property>  <property>      <name>hive.hwi.listen.host</name>      <value>0.0.0.0</value>      <description>This is the host address the Hive Web Interface will listen on</description>  </property>  <property>      <name>hive.hwi.listen.port</name>      <value>9999</value>      <description>This is the port the Hive Web Interface will listen on</description>  </property>

参考:启动hive hwi服务时出现 HWI WAR file not found错误

接着访问URL:http://master:9999/hwi/

然而继续报错:

ERROR compiler.Compiler: Javac exception
Unable to find a javac compiler; com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK. It is currently set to "/usr/local/java/jre"

原因:jetty编译jsp类时,ant没有识别到正确的jdk路径。

解决:ln -s $JAVA_HOME/lib/tools.jar $HIVE_HOME/lib/

参考:HIVE 0.14.0安装

eof.

来自:http://my.oschina.net/cwalet/blog/423906