Hive 接口介紹(Web UI/JDBC)

Hive 接口介紹(Web UI/JDBC)


實驗簡介

本次實驗學習 Hive 的兩種接口:Web UI 以及 JDBC。html


1、實驗環境說明

1. 環境登陸前端

無需密碼自動登陸,系統用戶名shiyanlou,密碼shiyanloujava

2. 環境介紹web

本實驗環境採用帶桌面的Ubuntu Linux環境,實驗中會用到桌面上的程序:sql

  • XfceTerminal: Linux命令行終端,打開後會進入Bash環境,可使用Linux命令;
  • Firefox:瀏覽器,能夠用在須要前端界面的課程裏,只須要打開環境裏寫的HTML/JS頁面便可;
  • GVim:很是好用的編輯器,最簡單的用法能夠參考課程Vim編輯器
  • Eclipse:Eclipse是著名的跨平臺的自由集成開發環境(IDE)。主要用來Java語言開發,可是目前亦有人經過插件使其做爲C++和Python等語言的開發工具。

3. 環境使用數據庫

使用GVim編輯器輸入實驗所需的代碼,而後使用XfceTerminal命令行環境進行編譯運行,查看運行結果,運行後能夠截圖並分享本身的實驗成果,實驗樓提供的截圖是後臺截圖,沒法做弊,能夠真實有效證實您已經完成了實驗。apache

實驗記錄頁面能夠在「個人課程」中查看,其中含有每次實驗的截圖及筆記,以及每次實驗的有效學習時間(指的是在實驗桌面內操做的時間,若是沒有操做,系統會記錄爲發呆時間)。這些都是您學習的真實性證實。瀏覽器

4. 其餘ruby

以前的實驗中,咱們使用的是 Hadoop V2.4.1版本。 咱們在測試的時候,發現 Hive V1.1.0 在進行 Session 查詢的時候須要 Hadoop V2.6 以上版本,所以本次實驗的 Hadoop 版本基於 V2.6.0 版本。因爲已經修改 Hadoop 目錄、Hive 目錄爲普通權限,若是提示 hadoop 或 hive 爲無效命令,請 source /etc/profile 來使配置文件生效。bash

Hadoop 目錄爲 : /usr/local/hadoop-2.6.0 Hive 目錄爲: /usr/local/hive-1.1.0

2、Hive 網絡接口(Web UI)

(1)Web UI 簡介

Hive Web UI 提供了圖像化的操做界面,經過 Hive Web UI 接口能夠更方便、更直觀地操做,特別是對剛剛接觸 Hive 的用戶來講。Hive Web UI 具備一下特性:

分離查詢的執行

在命令行(CLI)下,要執行多個查詢就得打開多個終端,而經過Web UI,就能夠同時執行多個查詢,還能夠在網絡服務器上管理會話 Session。

不依賴本地 Hive

用戶須要安裝本地 Hive,就能夠經過網絡瀏覽器訪問 Hive 並進行相關操做。若是想經過 Web 與 Hadoop 以及 Hive 交互,那麼須要訪問多個端口。

(2)配置 hive-site.xml

修改 $HIVE_HOME/conf 目錄下的 hive-site.xml 文件。

咱們能夠看一下默認配置是什麼:

圖片描述信息

咱們只須要修改 hive.hwi.war.file,你應該先在$HIVE_HOME/lib 目錄下檢查一下 hwi 的版本:

圖片描述信息

結果使人吃驚的是,竟然沒有那個 war 文件! 只有一個同名的 jar 包,沒有 war 文件。解決辦法是自行下載對應 Hive 的源碼包再打包成 war 文件。

下載 Hive 源碼(注意這裏是 src 包,不是 bin 包。上次咱們使用的是 1.1.0 版本)

$ wget http://labfile.oss.aliyuncs.com/apache-hive-1.1.0-src.tar.gz 

解壓:

$ tar zxvf apache-hive-1.1.0.src.tar.gz 

再進入 hwi 目錄,打包 war 文件(注意命令末尾有一個點.):

$ cd apache-hive-1.1.0-src/hwi $ jar cvfM0 hive-hwi-1.1.0.war -C web/ . 

打包完成後,有了咱們須要的 war 文件,再複製到 $HIVE_HOME/lib 目錄下:

$ cp hive-hwi-1.1.0.war /usr/local/hive-1.1.0/lib 

另外咱們還須要拷貝一個 Java 的 tools.jar 到 $HIVE_HOME/lib 目錄下:

$ cp /usr/local/jdk1.7.0_67/lib/tools.jar /usr/local/hive-1.1.0/lib 

不然會出現相似於下面的錯誤(由於 JAVA_HOME 指到$JAVA_HOME/jre 下了,而其 lib下的 tools.jar 跟$JAVA_HOME/lib/tools.jar 不同,編譯的時候須要用到後者):

圖片描述信息

最後,咱們將 hive-site.xml 文件修改成:

<property> <name>hive.hwi.war.file</name> <value>/lib/hive-hwi-1.1.0.war</value> <description>This sets the path to the HWI war file, relative to ${HIVE_HOME}. </description> </property> 

(3)啓動 hwi

在 $HIVE_HOME/bin 目錄下,啓動 hwi(因爲咱們以前已經修改了 Derby 爲 MySQL 數據庫,因此在啓動 hwi 以前,請確保 MySQL 和 Hadoop 已經成功啓動):

$ hive --service hwi 

圖片描述信息

如今,咱們能夠在瀏覽器中打開網絡接口的地址:localhost:9999/hwi, 啓動成功:

圖片描述信息

(4)Web UI 操做實例

數據庫及表信息查詢

在查詢以前,咱們先新建一個 person表 以方便後續的查詢操做。啓動 Hive 後,輸入以下命令(這個 table 只是一個示例,你能夠根據須要本身建立其餘的):

圖片描述信息

新建一個 txt 文件(路徑自定義,好比我是 /home/hadoop/hive/person.txt),寫一些示例數據,數據之間是以 \t 劃分的;實驗中已經寫好,直接導入便可:

圖片描述信息

再把數據導入到 person表 中:

圖片描述信息

單擊 Browse Schema 能夠查看當前 Hive 中的數據庫,顯示的是當前能夠是使用的數據庫信息,只包含一個默認數據庫(default):

圖片描述信息

再單擊 default 就能夠看到 default 數據庫中包含的全部表的信息了(這裏有咱們剛剛新建的 table : person表):

圖片描述信息

點擊 person 表便可看到具體信息。

圖片描述信息

Hive Session 查詢

在進行查詢以前咱們須要新建一個 Session(注意每次重啓hwi後,以前的 Session 將會失效)。點擊 Create Session 來新建:

圖片描述信息

填入如下信息,打框的必填:

圖片描述信息

其中: Result File 爲最後的查詢結果文件;

Query 爲你的查詢語句;

Start Query 設爲 YES,表示開始查詢;

點擊 Submit 提交後,便可看到 View File:

圖片描述信息

點擊 View File 便可看到最後的查詢結果:

圖片描述信息

經過以上的學習,咱們能夠了解到 Web UI 雖然提供了可視化的查詢操做,但最大的缺點就是用戶不能實時瞭解查詢的狀態,交互能力較差。

3、JDBC

在 Eclipse 中新建一個 Java 工程,例如 HiveJdbc. 而後添加所須要的 jar 包,右擊工程,依次選擇 Properties -> Java Build Path -> Libraries -> Add External Jars 來添加。所需 jar 包以下(如不清楚你能夠直接添加全部的 jar 包;遇到沒有權限添加的,請拷貝 jar 包到其餘有權限的目錄再添加,實驗中已經拷貝到 /home/hadoop/hive):

圖片描述信息

新建包和類,添加以下代碼:

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveJdbc { private static String driverName = "org.apache.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { try { Class.forName(driverName); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } Connection con = DriverManager.getConnection( "jdbc:hive2://localhost:10000/default", "", ""); Statement stmt = con.createStatement(); String tableName = "hive_jdbc"; stmt.execute("drop table if exists " + tableName); stmt.execute("create table " + tableName + " (key int, value string)"); System.out.println("Create table success!"); // show tables String sql = "show tables '" + tableName + "'"; System.out.println("Running: " + sql); ResultSet res = stmt.executeQuery(sql); if (res.next()) { System.out.println(res.getString(1)); } // describe table sql = "describe " + tableName; System.out.println("Running: " + sql); res = stmt.executeQuery(sql); while (res.next()) { System.out.println(res.getString(1) + "\t" + res.getString(2)); } sql = "select * from " + tableName; res = stmt.executeQuery(sql); while (res.next()) { System.out.println(String.valueOf(res.getInt(1)) + "\t" + res.getString(2)); } sql = "select count(1) from " + tableName; System.out.println("Running: " + sql); res = stmt.executeQuery(sql); while (res.next()) { System.out.println(res.getString(1)); } } } 

從上述代碼能夠看出,在進行查詢以前須要作的工做有:

  • 經過 Class.ForName("org.apache.hive.jdbc.HiveDriver"); 來註冊 Hive 驅動;

  • 經過 Connection con = DriverManager.getConnection( "jdbc:hive2://localhost:10000/default", "", ""); 來與 Hive 數據庫創建鏈接;

運行以前須要啓動 hiveserver,但目前 Hive 摒棄了 hiveserver 轉而改用了 hiveserver2,反映在代碼中有兩點不一樣。一是,driverName由 org.apache.hadoop.hive.jdbc.HiveDriver改爲了 org.apache.hive.jdbc.HiveDriver ;二是,Connection 由 jdbc:hive://localhost:10000/default 改爲了 jdbc:hive2://localhost:10000/default

所以,在運行程序前啓動 hiveserver 也改爲了啓動 hiveserver2,在 $HIVE_HOME/bin 目錄下來啓動。

圖片描述信息

最後程序運行結果以下:

圖片描述信息

做業

Web UI 和 JDBC 兩種接口有什麼異同?

參考文檔

相關文章
相關標籤/搜索