環(huán)境:hdp 2.4
hdp 2.4 對(duì)應(yīng)的hive版本是1.2.1如果是hdp 2.4 以及以下的版本,可以參考HDP2.4 及以下各組件版本查看版本信息
安裝Hive hwi 的方法:
下載源代碼,根據(jù)自己的hive版本下載http://archive.apache.org/dist/hive/apache-hive-1.2.1-src.tar.gz
解壓后將 ./hwi/web/ 目錄打包成 hive-hwi-**.war 放入放到hive/lib目錄下些举,打包方式是 執(zhí)行下面的語句
jar cvfM0 hive-hwi-1.2.1.war -C web/更改配置文件铐望,在hive-site.xml 添加參數(shù)扶平,參數(shù)可以參考在https://cwiki.apache.org/confluence/display/Hive/HiveWebInterface清女,或在 hive-default.xml.template 中的拷貝相應(yīng)的參數(shù)(監(jiān)聽主機(jī)0.0.0.0表示localhost玩徊,監(jiān)聽端口的榛,war文件的目錄)琼了,參數(shù)配置如下:
<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>
<property>
<name>hive.hwi.war.file</name>
<value>lib/hive-hwi-1.2.1.war</value>
<description>This is the WAR file with the jsp content for Hive Web Interface</description>
</property>
配置信息有兩種情況:
- 如果是參考的官網(wǎng),hive.hwi.war.file 的 value 值<value>${HIVE_HOME}/lib/hive-hwi-<version>.war</value>
裝的hdp中沒有配置HIVE_HOME的變量,為了方便直接改為lib/hive-hwi-1.2.1.war - 如果拷貝的hive-default.xml.template中的參數(shù)雕薪,hive.hwi.war.file 的 value 值是
<value>${env:HWI_WAR_FILE}</value>
也要把這個(gè)value改為lib/hive-hwi-1.2.1.war
錯(cuò)誤截圖
- 將jdk/lib/tools.jar 拷貝到hive/lib 目錄下
- 下載 jasper-compiler-5.5.23.jar 和 jasper-runtime-5.5.23.jar 也拷貝到 hive/lib 目錄下
- 下載commons-el-5.5.23.jar 拷貝到 hive/lib 目錄
- 通過ip:9999/hwi 可以訪問到hive 的 hwi
成功啦
在訪問UI的過程中所袁,有可能遇到的問題
- jasper-compiler-5.5.23.jar 和 jasper-runtime-5.5.23.jar 兩個(gè)jar包 出現(xiàn)的問題
# hive --service hwi
WARNING: Use "yarn jar" to launch YARN applications.
16/12/13 11:03:24 INFO hwi.HWIServer: HWI is starting up
16/12/13 11:03:25 INFO mortbay.log: Logging to org.slf4j.impl.Log4jLog(org.mortbay.log) via org.mortbay.log.Slf4jLog
16/12/13 11:03:25 INFO mortbay.log: jetty-6.1.26.hwx
16/12/13 11:03:25 INFO mortbay.log: Extract /usr/hdp/2.4.2.0-258/hive/wi-1.2.1.war to /tmp/Jetty_0_0_0_0_9999_hive.hwi.1.2.1.war__hwi__vrqy3
16/12/13 11:03:25 INFO mortbay.log: NO JSP Support for /hwi, did not fache.jasper.servlet.JspServlet
16/12/13 11:03:25 INFO mortbay.log: Started SocketConnector@0.0.0.0:99
- 端口被占用
16/12/13 10:47:00 WARN mortbay.log: failed Jetty23Shims$Server@7e5afaa6: java.ne t.BindException: Address already in use
Exception in thread "main" java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:38 7)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at org.mortbay.jetty.bio.SocketConnector.newServerSocket(SocketConnector .java:80)
at org.mortbay.jetty.bio.SocketConnector.open(SocketConnector.java:73)
at org.mortbay.jetty.AbstractConnector.doStart(AbstractConnector.java:28 3)
at org.mortbay.jetty.bio.SocketConnector.doStart(SocketConnector.java:14 7)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java: 50)
at org.mortbay.jetty.Server.doStart(Server.java:235)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java: 50)
at org.apache.hadoop.hive.hwi.HWIServer.start(HWIServer.java:102)
at org.apache.hadoop.hive.hwi.HWIServer.main(HWIServer.java:132)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
- commons-el-5.5.23.jar 沒有導(dǎo)入 或 版本不對(duì)
# hive --service hwi
WARNING: Use "yarn jar" to launch YARN applications.
16/12/13 14:41:59 INFO hwi.HWIServer: HWI is starting up
16/12/13 14:42:00 INFO mortbay.log: Logging to org.slf4j.impl.Log4jLoggerAdapter (org.mortbay.log) via org.mortbay.log.Slf4jLog
16/12/13 14:42:00 INFO mortbay.log: jetty-6.1.26.hwx
16/12/13 14:42:00 INFO mortbay.log: Extract /usr/hdp/2.4.2.0-258/hive/lib/hive-h wi-1.2.1.war to /tmp/Jetty_0_0_0_0_9999_hive.hwi.1.2.1.war__hwi__vrqy3t/webapp
16/12/13 14:42:00 INFO mortbay.log: Started SocketConnector@0.0.0.0:9999
16/12/13 14:42:12 ERROR mortbay.log: /hwi/
java.lang.NoClassDefFoundError: org/apache/commons/el/ExpressionEvaluatorImpl
at org.apache.jasper.compiler.JspUtil.<clinit>(JspUtil.java:62)
at org.apache.jasper.JspCompilationContext.getServletClassName(JspCompil ationContext.java:335)
at org.apache.jasper.JspCompilationContext.getClassFileName(JspCompilati onContext.java:485)
at org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:380)
at org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:333)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext .java:561)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper .java:299)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3 15)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511 )
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:4 01)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.jav a:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:1 82)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:7 67)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
at org.mortbay.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:50 3)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511 )
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:4 01)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.jav a:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:1 82)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:7 67)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:1 52)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler. java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:1 52)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:54 2)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpCo nnection.java:928)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector. java:228)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.j ava:582)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.el.ExpressionEva luatorImpl
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 38 more