招聘崗位上到處都要求熟練的Hive究竟是何方神聖?

簡介

    Hive是基於Hadoop的數據倉庫大數據組件。將易上手的SQL語句轉化成MapReduce作業
    Hive默認不支持事務, 進而導致不支持UPDATE, DELETE這些我們在數據庫中常用的操作。這一點我一直感到十分不解,你一個數據庫怎麼連基本的操作都不支持啊?在實際使用中我終於慢慢明白:

  1. 爲了實現事務是需要做大量工作的,寫redo log,undo log(用於回滾操作),設置隔離級別(讀未提交?讀已提交?可重複讀?)
  2. 而這些工作會影響到數據庫的性能,拓展性,即使是較先進的Oracle的理論拓展性也纔是100臺,8臺節點後邊際效應明顯。如果Hive支持事務,性能與拓展性將受到嚴重限制。
  3. Hive的作用是簡單使用MapReduce 而MapReduce生來的意義就是處理大量的數據,而具備強拓展性才讓處理海量數據成爲可能;
  4. 如果丟失了拓展性與性能,MapReduce有什麼意義 如果拓展性受到嚴重限制,MapReduce就不能處理大量的數據,那麼Hive也就失去了原本的意義;
  5. 數據倉庫中的數據是讀多寫少的,往往在加載時就已確定不再修改

數據結構

  1. 元數據
    Hive存儲的是一張張的數據表,而元數據就是其中的表結構
    存儲形式:存於Derby數據庫,或MySQL,Oracle數據庫。

  2. 表數據
    表中存儲的數據。
    存儲形式:每張表存於HDFS中的一個目錄中

數據類型

  • 基本數據類型
    • tinyint / smallint / int / bigint : 整數類型
    • float / double : 浮點數類型
    • boolean : 布爾類型
    • string : 字符串類型
  • 複雜數據類型
    • Array : 數組類型
    • Map : 集合類型,鍵值對Key / Value形式
    • Struct : 結構類型,包含不同數據類型的元素,跟C語言中的Struct類似
  • 時間數據類型
    • Date : 只包含到天的數據,沒法精確到時分秒。
    • Timestamp : 長整型數字,從(格林威治時間)1970年1月1日0時0分0秒到現在的總毫秒數

數據模型

    MySQL,Oracle用表作爲數據模型存儲數據。Hive自然也有。下面簡要介紹一下Hive的幾種常用的表吧。

  1. 內部表
    最接近普通關係型數據庫的數據模型;
    刪除數據時會將元數據與表數據一同刪除,HDFS中的數據文件一同被刪除;
create table bucket_table
(sid int, sname string, age int)
row format delimited fields terminated by '\t';
-- 指定數據間分隔符,默認爲製表符'\t'
  1. 外部表
    與HDFS中某個目錄下的數據文件建立連接;
    比較像指針,指向HDFS中某個目錄;
    刪除數據時,會刪除元數據,與該目錄的連接,但不會真正刪除HDFS中的數據
create external table external_student
(sid int, sname string, age int)
row format delimited fields terminated by '\t'
location '/input';  --指定表數據所在 HDFS目錄
  1. 桶表
    用哈希算法將表數據分到5個中,一般可以將數據打亂放到各個桶中,可以處理數據傾斜問題
create table bucket_table
(sid int, sname string, age int)
clustered by(sname) into 5 buckets --將數據通過哈希算法分成5部分
row format delimited fields terminated by '\t';
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章