Hive HWI 安裝及配置

jopen 9年前發布 | 76K 次閱讀 Hive 分布式/云計算/大數據

備忘,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

</div>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!