Hive 接口介紹(Web UI/JDBC)

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 調用;

轉載于:https://www.cnblogs.com/yeahwell/p/4622842.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374843.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374843.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374843.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java最佳實踐– Char到Byte和Byte到Char的轉換

在使用Java編程語言時&#xff0c;我們將繼續討論與建議的實踐有關的系列文章&#xff0c;我們將討論String性能調優。 特別是&#xff0c;我們將重點介紹使用默認編碼時如何有效地處理字符到字節和字節到字符的轉換。 本文總結了兩種提議的自定義方法與兩種經典方法&#xff0…

IOS-C文件的創建于初始化函數.void init() write_file()

//文件初始化 void init(){ FILE * fpNULL; fpfopen("telbook.data", "rb"); int count0; if (fpNULL) //沒有這個文件就把這個文件創建出來 { fpfopen("tellbook.data", "wb"); fwrite(&count, sizeof(count), 1, fp); fclose(…

7-3 逆序的三位數 (10 分)

7-3 逆序的三位數 (10 分) 程序每次讀入一個正3位數&#xff0c;然后輸出按位逆序的數字。注意&#xff1a;當輸入的數字含有結尾的0時&#xff0c;輸出不應帶有前導的0。比如輸入700&#xff0c;輸出應該是7。 輸入格式&#xff1a; 每個測試是一個3位的正整數。 輸出格式&a…

拋棄優啟Grub4dos和PE大多數時間可以這樣用

拋棄優啟Grub4dos和PE大多數時間可以這樣用 在能夠進入Windows的情況下&#xff0c;Grub4dos和PE大多數時間可以這樣用 http://yunpan.cn/cyuuUtUQMfmGN 提取碼 c2acGrub4dos的出現顛覆了傳統的EZBOOT光盤啟動模式&#xff0c;很多人用grub4dos來實現優盤啟動&#xff0c;同時g…

Java最佳實踐–隊列之戰和鏈接的ConcurrentHashMap

在使用Java編程語言時&#xff0c;我們將繼續討論與建議的實踐有關的系列文章&#xff0c;我們將在四個具有相關語義的流行Queue實現類之間進行性能比較。 為了使事情變得更現實&#xff0c;我們將在多線程環境下進行測試&#xff0c;以討論和演示如何將ArrayBlockingQueue &am…

HDU 5652 India and China Origins(二分 + BFS)

本文鏈接:http://www.cnblogs.com/Ash-ly/p/5398867.html 題意&#xff1a; 中國和印度之間有一片地方&#xff0c;把這片地方抽象化&#xff0c;于是就可以看成一個N * M矩陣&#xff0c;其中黑色的代表高山不能走過去&#xff0c;白色的代表平原&#xff0c;可以通行,人每次可…

C語言%.2f四舍五入

#include <stdio.h> int main() {double d 1.199;printf("%.2f", d);return 0; }輸出1.20 如果不想讓其四舍五入可以這樣&#xff1a; #include <stdio.h> #include <math.h> int main() {double d 1.199;printf("%.2f", floor(d * 1…

關于使用racthet的push.js

racthet的push是用來跳轉另外一個頁面的效果的。但是必須在服務器的環境下支持。如果想要讓本地html訪問支持的話需要添加 轉載于:https://www.cnblogs.com/djawh/p/4623925.html

休眠自動提交命令強制MySQL在過多的磁盤I / O中運行

親愛的大家&#xff0c; 我敢肯定&#xff0c;你們中的許多人都在使用Hibernate和MySQL&#xff0c;我自己在這里和那里都使用它。 通常&#xff0c;編程模型是不錯的&#xff0c;但是普通的JDBC可以快很多已經不是什么秘密了。 在這篇文章中&#xff0c;我想引起您的注意Hibe…

“應用程序無法正常啟動(oxc000007b)”解決方案

解決方案1 通過“DirectX修復工具 V3.3 標準版”軟件修復。 備注&#xff1a;經過測試&#xff0c;并未解決本人的問題&#xff0c;但是這個方法可能對游戲中缺失相關.dll&#xff08;動態鏈接庫&#xff09;有幫助。 解決方案2&#xff1a; 該問題的出現不適偶然&#xff0c;主…

Linux: dev: cmake: CHECK_LIBRARY_EXISTS

文章目錄 簡介例子源代碼最終調用到的兩個命令如果結果是這里為什么不直接使用rpm查看包呢&#xff1f;需要注意的問題 簡介 https://cmake.org/cmake/help/latest/module/CheckLibraryExists.html 這個方法是在Modules/CheckLibraryExists.cmake文件里定義的一個宏。 最終使用…

7-15 計算圓周率 (15 分)

根據下面關系式&#xff0c;求圓周率的值&#xff0c;直到最后一項的值小于給定閾值。 輸入格式&#xff1a; 輸入在一行中給出小于1的閾值。 輸出格式&#xff1a; 在一行中輸出滿足閾值條件的近似圓周率&#xff0c;輸出到小數點后6位。 輸入樣例&#xff1a; 0.01結尾無…

Struts2的全局結果視圖的配置

1.在struts.xml中的package標簽內添加<global-results/>標簽&#xff0c;將全局結果加進該標簽內&#xff0c;只適用于當前包下。 <package name"customer" namespace"/customer" extends"struts-default" > <global-results>…

長大了Java! 提出Java桌面版

不&#xff0c;這不是另一個“ Java已死”的咆哮。 Java非常活躍。 它是可用的最佳開發和運行時平臺之一。 迄今為止&#xff0c;最穩定的平臺。 那可能只是它最大的禍根。 荒謬&#xff01; 穩定性如何&#xff1f; 你可能會問。 好吧&#xff0c;由于它&#xff0c;您可以看到…

[算法練習]Excel Sheet Column Title

題目&#xff1a; Given a positive integer, return its corresponding column title as appear in an Excel sheet. For example: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB 代碼&#xff1a; class Solution { public: string convertToTitle(…

7-16 求符合給定條件的整數集 (15 分)

給定不超過6的正整數A&#xff0c;考慮從A開始的連續4個數字。請輸出所有由它們組成的無重復數字的3位數。 輸入格式&#xff1a; 輸入在一行中給出A。 輸出格式&#xff1a; 輸出滿足條件的的3位數&#xff0c;要求從小到大&#xff0c;每行6個整數。整數間以空格分隔&#…

JUnit學習之hamcrest、testSuite介紹及測試原則

[轉自] http://huihai.iteye.com/blog/1994270 上一節說了junit的一些基本概念&#xff0c;主要使用assert做一些基本的判斷。但很多時候使用assert做判斷&#xff0c;并不方便&#xff0c;如果要判斷某幾個值是否為true或false&#xff0c;這時使用hamcrest來判斷就會方便許多…

Java最佳實踐– Vector vs ArrayList vs HashSet

在使用Java編程語言時&#xff0c;我們將繼續討論與建議的實踐有關的系列文章&#xff0c;我們將在三個最常用的Collection實現類之間進行性能比較。 為了使事情變得更現實&#xff0c;我們將在多線程環境下進行測試&#xff0c;以討論和演示如何將Vector &#xff0c; ArrayLi…

iOS:圖片上傳時兩種圖片壓縮方式的比較

上傳圖片不全面的想法&#xff1a;把圖片保存到本地,然后把圖片的路徑上傳到服務器&#xff0c;最后又由服務器把路徑返回&#xff0c;這種方式不具有擴展性&#xff0c;如果用戶換了手機&#xff0c;那么新手機的沙盒中就沒有服務器返回的圖片路徑了&#xff0c;此時就無法獲取…

7-17 爬動的蠕蟲 (15 分)

一條蠕蟲長1寸&#xff0c;在一口深為N寸的井的底部。已知蠕蟲每1分鐘可以向上爬U寸&#xff0c;但必須休息1分鐘才能接著往上爬。在休息的過程中&#xff0c;蠕蟲又下滑了D寸。就這樣&#xff0c;上爬和下滑重復進行。請問&#xff0c;蠕蟲需要多長時間才能爬出井&#xff1f;…