歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Hive HWI安裝及配置

Hive HWI安裝及配置

日期:2017/2/27 15:49:11   编辑:Linux教程
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/

Copyright © Linux教程網 All Rights Reserved