1. 程式人生 > >大資料分析的技術棧(三)-Hive

大資料分析的技術棧(三)-Hive

序言

這是大資料分析技術棧的第三篇文章,在這片文章裡面我們主要討論的是Hive的使用。

Hive是什麼

Hive直觀的解釋

Hive到底是什麼呢?下面是有道詞典的解釋。
Hive: 蜂房,蜂巢,熱鬧的場所,熙攘喧鬧的人群。下面直接上圖來直觀的瞭解一下Hive到底是什麼。
這裡寫圖片描述
是的,Hive就是這個看起來像蜜蜂,但是仔細觀察,似乎又像小飛象的可愛的小東西。

Hive的官方解釋

這裡寫圖片描述
參考自Hive官網
大致來說,首先hive是一個數據倉庫軟體,它可以將結構化的資料對映為一張資料庫表,對於這張資料庫的表,可以提供類SQL的查詢方式,而且Hive主要應用於大資料平臺上面。下面是更為具體的細節。

  1. 建立了資料庫表之後,很容易使用類SQL的方式訪問這些資料。
  2. 建立類似關係型資料庫的表結構,支援多種資料型別。
  3. Hive可以支援很多的原始檔型別,這句話的意思是,Hive可以在多種檔案型別上面建立表結構,例如HDFS,Hbase,Parquet等。
  4. 使用類SQL的方式建立查詢,或者ETL之後,可以使用Apache Spark(這也是一種大資料的計算框架,我在後面的系列文章裡面,也會介紹這項技術),或者MapReduce的方式執行。
  5. 而這種類SQL語言被稱為HPL-SQL。

瞭解這些以後,我們會發現,Hive就是為了把大資料儲存結構轉換為關係型資料庫處理的一種工具

Hive的使用

Hive表結構的建立

DROP TABLE IF EXISTS TEST_GREAT;
CREATE EXTERNAL TABLE TEST_GREAT (
    TEST_GREAT_ID STRING,
    ABC_ID STRING,
    BCD_ID STRING
)STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" =
"
:key,
cf:ABC_ID,
cf:BCD_ID")
TBLPROPERTIES("hbase.table.name"
= "TEST_GREAT");

這裡我們的資料來源是Hbase DB,你也可以換成其他的資料來源,例如HDFS,Parquet。這裡我們建立了一張Hive table TEST_GREAT,這張表實際上是對Hbase裡面的表TEST_GREAT的對映。你也許會問,為什麼麼要做這個對映呢,直接使用API操作Hbase的表不行嗎?這裡的原因有下面幾個:

  1. 為了降低技術的難度,降低學習成本,我們對於SQL很熟悉,建立Hive表之後就可以使用SQL去操作,而不用去重新學習Hbase API,這在團隊合作開發中是非常重要的。
  2. Hbase API適宜對錶進行簡單的操作,但是真實的業務邏輯是比較複雜的,使用SQL更容易實現這些複雜的業務邏輯。
  3. 現在的大資料倉庫很多,我們不可能每種技術都去深入的學習對應的API,而Hive剛好提供了一個統一的介面。

在建立Mapping的過程中,重要的是資料型別之間的轉換,是的,Hive是有資料型別的,如果資料型別不匹配,就會造成資料的丟失。下面是Hive裡面的資料型別。

Hive的資料型別(Data Type)

Hive表的使用

可以使用類SQL的方式操作這些Hive表。

Select TEST_GREAT_ID from TEST_GREAT;


Select Max(TEST_GREAT_ID) from TEST_GREAT;

這裡使用了兩個例子,可以發現對於Hive表的使用和關係型資料庫的表是這麼的類似。當然這是類SQL,也就是說SQL有些特性,以及函式是不能被直接使用的。

總結

  1. Hive的設計就是為了簡化對於大資料倉庫的操作。相當於在資料倉庫上面架設了一層,部分開發人員可以不用關心實際的儲存結構,而使用已經熟悉的SQL語言,把重心放在實現具體的業務邏輯上面。這和JDBC等思想是一致的,都是實現統一的介面,遮蔽了底層的實現。底層的改動對於上層的影響是微乎其微的(資料倉庫由Hbase變為了Parquet,我們的程式碼不用絲毫改動)。
  2. 我們學習一項技術不能只學習這項技術的用法,還要多多思考下面幾個問題,為什麼會出現這項技術,在別的領域有沒有類似的技術等等。只有多思考和總結我們才能更快的進步。