Hive Web Interface(HWI)简介:Hive自带了一个Web-GUI,功能不多,可用于效果展示,如果没有安装Hue的话,是个不错的选择。
由于hive-bin包中没有包含HWI的页面,只有Java代码编译好的jar包:hive-hwi-1.2.0.jar
因此需要下载源码从中提取jsp文件并打包成war文件到hive-lib目录中:
wget -q 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.