Hive 介面介紹(Web UI/JDBC)

來源:互聯網
上載者:User

標籤:

Hive 介面介紹(Web UI/JDBC)實驗簡介

本次實驗學習 Hive 的兩種介面:Web UI 以及 JDBC。

一、實驗環境說明

1. 環境登入

無需密碼自動登入,系統使用者名稱shiyanlou,密碼shiyanlou

2. 環境介紹

本實驗環境採用帶案頭的Ubuntu Linux環境,實驗中會用到案頭上的程式:

  • XfceTerminal: Linux命令列終端,開啟後會進入Bash環境,可以使用Linux命令;
  • Firefox:瀏覽器,可以用在需要前端介面的課程裡,只需要開啟環境裡寫的HTML/JS頁面即可;
  • GVim:非常好用的編輯器,最簡單的用法可以參考課程Vim編輯器。
  • Eclipse:Eclipse是著名的跨平台的自由整合式開發環境(IDE)。主要用來Java語言開發,但是目前亦有人通過外掛程式使其作為C++和Python等語言的開發工具。

3. 環境使用

使用GVim編輯器輸入實驗所需的代碼,然後使用XfceTerminal命令列環境進行編譯運行,查看運行結果,運行後可以並分享自己的實驗成果,實驗樓提供的是後台,無法作弊,可以真實有效證明您已經完成了實驗。

實驗記錄頁面可以在“我的課程”中查看,其中含有每次實驗的及筆記,以及每次實驗的有效學習時間(指的是在實驗案頭內操作的時間,如果沒有操作,系統會記錄為發獃時間)。這些都是您學習的真實性證明。

4. 其他

之前的實驗中,我們使用的是 Hadoop V2.4.1版本。 我們在測試的時候,發現 Hive V1.1.0 在進行 Session 查詢的時候需要 Hadoop V2.6 以上版本,因此本次實驗的 Hadoop 版本基於 V2.6.0 版本。由於已經修改 Hadoop 目錄、Hive 目錄為普通許可權,如果提示 hadoop 或 hive 為無效命令,請 source /etc/profile 來使設定檔生效。

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

二、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 雖然提供了可視化的查詢操作,但最大的缺點就是使用者不能即時瞭解查詢的狀態,互動能力較差。

三、 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 兩種介面有什麼異同?

參考文檔
  • 《Hadoop實戰 第2版》陸嘉恒,機械工業出版社;
  • Hive Web介面HWI的操作及使用;
  • hive jdbc 調用;

Hive 介面介紹(Web UI/JDBC)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.