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-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结果如下图所示:
在右侧可以输入用户名和所属的组进行授权,这样就可以使用该用户进行操作,如下图所示:
或者不输入用户信息直接点击左侧导航栏中的Browse Schema按钮,直接浏览默认schema。在右侧点击default,然后再点击pokes(这是在CLI中创建的表),信息如下图所示:
点击左侧导航栏最下面的Diagnostics按钮,将会在右侧列出系统属性:
点击左侧的Create Session按钮以创建新的会话:
输入会话名称并点击Submit按钮:
可以在上图中输入查询语句,结果文件名,将Start Query改为YES,并提交。点击左侧的List Session按钮将会显示当前的会话:
HWI提供了CLI的一种备选方案,但对于那些希望点击按钮就能够完成创建表,查询的用户来说不是那么完善,因为在HWI中依然要输入Hive QL进行操作,而这也是快速学习Hive QL的一种途径,因为只有越频繁的使用才能够使用的越熟练。