淺談Hive

讓我們開門見山來一句介紹,Hive是建立在Hadoop HDFS上的數據倉庫基礎架構
在Hadoop大數據體系中,Hive和HBase事兩種基於Hadoop的不同技術,Hive是一類類SQL的引擎,其數據存放在HDFS上,並運用MapReduce進行計算,適合OLAP事務。而HBase是一種在Hadoop上的NOSQL的鍵值對數據庫,提供數據的實時訪問。

好,接下來我們細細地講。

數據倉庫

數據倉庫(Data Warehouse)是一個面向主題的(Subject Oriented)、集成的(Integrated)、相對穩定的(Non-Volatile)、反映歷史變化的(Time variant)數據集合,用於支持管理決策。下面圖爲數據倉庫體系結構:數據源-》數據存儲管理-》分析和挖掘引擎-》應用:

DataWareHouseStruction

那麼數據倉庫到底有什麼用呢?
傳統的數據庫適用於OLTP(聯機事務處理),主要是基本的,日常的事務處理。比如說銀行的轉賬業務,對於扣錢和存錢這兩個操作,操作頻率很高,而且只能是要麼同時成功要麼同時失敗。
數據倉庫系統的主要應用主要是OLAP(聯機分析處理),支持複雜的分析操作,側重決策支持,並且提供直觀易懂的查詢結果。而且數據倉庫裏面的數據時不可更新的,很久以前的數據也會存在(穩定的,面向歷史記錄的),只有查詢操作沒有增刪查改。
舉個例子:搭建一個商品的推薦系統,我們需要用到很多用戶以往購買商品的記錄。傳統數據庫中的結構是爲了完成交易設計的,並不太支持大量的查詢操作。而且傳統數據庫會不停更改,不一定保留以往數據。有個不錯的例子:知乎:數據庫與數據倉庫的本質區別是什麼

同時做個插曲(寶寶某次筆試的時候出過這個考題,不會填,哭唧唧):數據倉庫的兩種數據模型:星型和雪花型
同樣是商品的推薦系統:
startForm
snowflake

Hive

個人理解的話,Hive的核心說白了也就兩句話。
Hive中的表就是HDFS中的表
在運算方面,Hive定義了簡單的類似SQL查詢語言,稱爲HQL它允許熟悉SQL的用戶查詢數據 。 而HiveQL語句將被轉換成MapReduce任務進行運行。

所以Hive就是一個數據倉庫的引擎。採用批處理的方式處理海量的數據,並提供了適合數據倉庫操作的工具:比如一系列對數據的提取、轉換、加載(ETL),可以存儲、查詢、分析存儲在Hadoop中的大規模數據。

在實際應用中,Hive也暴露出了一些不穩定的問題:端口調用沒有響應,出現進程丟失等情況。於是乎便有了Hive HA機制(是不是感覺有點熟悉撒?嘻嘻,對了!HDFS也有HA機制,就是採用active-standby nameNode節點來處理單個NameNode節點出現故障的問題)。
這個圖表現了HA機制的基本原理,多個Hive實例被納到一個資源池中,並由HAProxy提供一個統一對外的接口,對於程序開發人員來說,這就只是一臺超強的“Hive”。
而HAProxy每次接到HQL時都會進行邏輯可用性測試,如果存在故障Hive,就將其放入黑名單,選擇其他Hive進行工作。同時,HAProxy也會週期處理黑名單,如果檢查到可用Hive將會將其放回。

HiveHA

HiveSQL

HiveSQL的語句與SQL非常像,接下來寫幾個簡單的例子吧。

  • 創建數據庫
hive>create database hive;
hive>create database if not exists hive;
  • 創建表
hive> use hive;
hive> create table if not exists usr(id bigint, name string, age int);
//create a table in specific location
hive>create table if not exists hive.usr(id bigint, name string, age int) location '/usr/local/hive/warehouse/hive/usr'
  • 創建視圖
hive> create view little_usr as select id, age from usr;
  • show:查看數據庫,表和視圖
// show all databases in hive
hive> show databases;
// find databases start with 'h'
hive>show databases like 'h.*';

//show the tables and views in database hive
hive> use hive;
hive> show tables;
//find the tables and views in database hive which start with 'h'
hive>show tables in hive like 'h.*';
  • load:向表中加載數據
//local files in '/usr/local/data' to table usr and overwrite it
hive>load data **local** inpath '/usr/local/data' **overwrite** into table usr;
//don't overwrite
hive>local data **local** inpath '/usr/local/data' into table usr;

//loacl data files from hdfs to user and overwrite, no more 'local'
hive> load data inpath 'hdfs://master_server/usr/local/data' overwrite into table usr;
  • insert:向表中插入數據或從表中到處數據
hive> insert **overwrite** table age_table 
hive> select * from usr where age=10
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章