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/