Hive学习之Hive Web接口

       Hive的web接口是CLI的备选方案,使用web接口是开始使用Hive的一种很好的方式。Hive的web接口(HWI)是一个简单的图形用户接口(GUI)。

       HWI在Hive-0.2分支版本中第一次出现,,如果使用的是0.2或者之后的版本,不需要做任何修改就可以直接使用HWI,HWI的默认配置在HiveConf.java文件中:

// HWI
HIVEHWILISTENHOST("hive.hwi.listen.host", "0.0.0.0")
HIVEHWILISTENPORT("hive.hwi.listen.port", "9999")
HIVEHWIWARFILE("hive.hwi.war.file", System.getenv("HWI_WAR_FILE"))

       hive.hwi.listen.host是HWI监听的主机,hive.hwi.listen.port是HWI监听的端口号,hive.hwi.war.file是HWI使用的包含jsp页面的WAR文件。

       现在就来看看HWI的实际执行效果,首先需要启动Hadoop集群,然后在命令执行如下的命令:

[hadoop@hadoop~]$ hive --service hwi --help
UsageANT_LIB=XXXX hive --service hwi

       该命令输出了如何使用启动HWI,根据提示需要制定ant库的位置,但在最新的hive-0.13.0版本中,ant库已经位于${HIVE_HOME}/lib下了,所以可以不必再设置ANT_LIB环境变量,直接在命令行执行下面的命令:

[hadoop@hadoop~]$ hive --service hwi
ls: 无法访问/home/hadoop/hive-0.13.0/lib/hive-hwi-*.war: 没有那个文件或目录
14/05/1916:09:58 INFO hwi.HWIServer: HWI is starting up
14/05/1916:09:59 INFO mortbay.log: Logging toorg.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
14/05/1916:10:00 INFO mortbay.log: jetty-6.1.26
14/05/1916:10:01 INFO mortbay.log: Started [email protected]:9999

       输出信息中提示无法访问/home/hadoop/hive-0.13.0/lib/hive-hwi-*.war,原因是该文件不存在,这是由于hive-0.13.0版本中的lib目录下没有hive-hwi-0.13.0.war的缘故,之前的版本都会提供与版本对应的文件,但在浏览器中输入http://hadoop:9999/hwi的结果如下图所示:

Hive学习之Hive Web接口_第1张图片

       这种情况就需要自己手动创建hive-hwi-0.13.0.war了。先从Hive的官方网站下载Hive-0.13.0的源代码,然后进入到hwi目录中,在该目录下有名为web的文件夹,将该文件夹使用jar命令打包为war文件,命令如下:

[hadoop@hadoophwi]$ jar cvfM0 hive-hwi-0.13.0.war -C web/ .
增加:session_list.jsp(读入= 2298) (写出= 2298)(存储了 0%)
增加:show_databases.jsp(读入= 2096) (写出= 2096)(存储了 0%)
增加:view_file.jsp(读入= 2653) (写出= 2653)(存储了 0%)
增加:show_table.jsp(读入= 4996) (写出= 4996)(存储了 0%)
增加:authorize.jsp(读入= 2729) (写出= 2729)(存储了 0%)
增加:session_history.jsp(读入= 3150) (写出= 3150)(存储了 0%)
增加:session_kill.jsp(读入= 2236) (写出= 2236)(存储了 0%)
增加:show_database.jsp(读入= 2346) (写出= 2346)(存储了 0%)
增加:session_manage.jsp(读入= 6738) (写出= 6738)(存储了 0%)
增加:navbar.jsp(读入= 1345) (写出= 1345)(存储了 0%)
增加:session_create.jsp(读入= 2690) (写出= 2690)(存储了 0%)
增加:error_page.jsp(读入= 1867) (写出= 1867)(存储了 0%)
增加:css/(读入= 0) (写出= 0)(存储了 0%)
增加:css/bootstrap.min.css(读入= 90193) (写出= 90193)(存储了 0%)
增加:diagnostics.jsp(读入= 2365) (写出= 2365)(存储了 0%)
增加:WEB-INF/(读入= 0) (写出= 0)(存储了 0%)
增加:WEB-INF/web.xml(读入= 1438) (写出= 1438)(存储了 0%)
增加:session_diagnostics.jsp(读入= 2489) (写出= 2489)(存储了 0%)
增加:left_navigation.jsp(读入= 1553) (写出= 1553)(存储了 0%)
增加:img/(读入= 0) (写出= 0)(存储了 0%)
增加:img/glyphicons-halflings-white.png(读入= 4352) (写出= 4352)(存储了 0%)
增加:img/glyphicons-halflings.png(读入= 4352) (写出= 4352)(存储了 0%)
增加:session_result.jsp(读入= 2488) (写出= 2488)(存储了 0%)
增加:session_remove.jsp(读入= 2359) (写出= 2359)(存储了 0%)
增加:index.jsp(读入= 1876) (写出= 1876)(存储了 0%)
[hadoop@hadoophwi]$ ls
hive-hwi-0.13.0.war  pom.xml src  web

       将打包好的hive-hwi-0.13.0.war文件拷贝到${HIVE_HOME}/lib中:

[hadoop@hadoophwi]$ cp hive-hwi-0.13.0.war ~/hive-0.13.0/lib/
[hadoop@hadoophwi]$ ls -al ~/hive-0.13.0/lib/hive-hwi*
-rw-r--r-- 1hadoop hadoop 151343  5月 19 16:36 /home/hadoop/hive-0.13.0/lib/hive-hwi-0.13.0.jar
-rw-rw-r-- 1hadoop hadoop 151343  5月 19 16:39 /home/hadoop/hive-0.13.0/lib/hive-hwi-0.13.0.war

       然后在命令行中再次启动HWI,但是还是报错,报错信息如下:

[hadoop@hadoop~]$ hive --service hwi
14/05/1916:44:51 INFO hwi.HWIServer: HWI is starting up
14/05/1916:44:52 FATAL hwi.HWIServer: HWI WAR file not found at/home/hadoop/hive-0.13.0/home/hadoop/hive-0.13.0/lib/hive-hwi-0.13.0.war

       前面曾经提到过HIVEHWIWARFILE("hive.hwi.war.file",System.getenv("HWI_WAR_FILE")),该参数用于指定war文件的位置,而环境变量HWI_WAR_FILE定义在${HIVE_HOME}/bin/ext/hwi.sh文件中,值为/home/hadoop/hive-0.13.0/lib/hive-hwi-0.13.0.war,而在HWIServer.java中的代码为:

    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);
    }

       由于已经设置了环境变量HIVE_HOME的值,这就导致了hwiWAR文件的路径为/home/hadoop/hive-0.13.0/home/hadoop/hive-0.13.0/lib/hive-hwi-0.13.0.war。修改方法为直接修改hwi.sh中的HWI_WAR_FILE变量,将该值定义为lib/hive-hwi-0.13.0.war,再次启动HWI成功。在浏览器中输入http://hadoop:9999/hwi结果如下图所示:

Hive学习之Hive Web接口_第2张图片

       在右侧可以输入用户名和所属的组进行授权,这样就可以使用该用户进行操作,如下图所示:


       或者不输入用户信息直接点击左侧导航栏中的Browse Schema按钮,直接浏览默认schema。在右侧点击default,然后再点击pokes(这是在CLI中创建的表),信息如下图所示:

Hive学习之Hive Web接口_第3张图片

       点击左侧导航栏最下面的Diagnostics按钮,将会在右侧列出系统属性:

Hive学习之Hive Web接口_第4张图片

       点击左侧的Create Session按钮以创建新的会话:

Hive学习之Hive Web接口_第5张图片

       输入会话名称并点击Submit按钮:

Hive学习之Hive Web接口_第6张图片

       可以在上图中输入查询语句,结果文件名,将Start Query改为YES,并提交。点击左侧的List Session按钮将会显示当前的会话:

Hive学习之Hive Web接口_第7张图片

       HWI提供了CLI的一种备选方案,但对于那些希望点击按钮就能够完成创建表,查询的用户来说不是那么完善,因为在HWI中依然要输入Hive QL进行操作,而这也是快速学习Hive QL的一种途径,因为只有越频繁的使用才能够使用的越熟练。

你可能感兴趣的:(session,cli,hwi,metastore,Hive-0.13.0)