hive基礎

一、  hive介紹

     Hive是一箇中間工具。它的主要作用是將HQL(Hive Query Language)轉換爲一系列的MapReduce Job,利用Hadoop框架對數據進行類SQL處理。他的主要功能是在Hadoop框架上提供一個類SQL中間層,簡化在Hadoop框架上實現SQL功能程序的編寫。   

     1) 首先,Hive需要提供一種功能,將待處理的數據加載到HDFS當中。之所以要提供這種功能,是因爲,Hadoop想要充分發揮其分佈式特性,就需要底層分佈式文件系統HDFS的支持。因此,只有將數據保存在HDFS當中才能充分發揮Hadoop的優勢。

     2) 其次,Hive將數據加載到HDFS之後,需要提供對數據進行組織管理的功能。如果不提供數據的組織管理功能,那麼其跟HDFS存儲文件沒有區別。
     3) 第三,Hive提供將HQL(Hive Query Lanuage)轉化成MapReduce Job的功能。

二、Hive數據組織
1:元數據
    Hive在邏輯上將數據組織爲表的形式(因爲,Hive在數據加載並不進行數據檢驗,這就要求用戶寫入的數據確實符合用戶想要的表結構)。既然是表結構,那麼就需要定義的表的模式(即Schema)。Hive同樣需要Schema,但是與數據文件不同的是,Hive將Schema存儲在metastore當中,metastore爲關係型數據庫(RDBMS)。之所以採用RDBMS作爲schema的存儲,主要是爲了加快schema的存取速度,減少延遲。
2:數據文件
    對於數據文件的存儲。最簡單的方法,數據直接以文件的格式存放在Hadoop的文件系統當中,包括(HDFS、amazon’s s3、local file system等)。但是爲了加快數據存取速度,Hive採用了一些技巧加強對數據組織、存放的管理。
3:分區
    Hive可以對數據按照某列或者某些列進行分區管理,所謂分區我們可以拿下面的例子進行解釋。當前互聯網應用每天都要存儲大量的日誌文件,幾G、幾十G甚至更大都是有可能。存儲日誌,其中必然有個屬性是日誌產生的日期。在產生分區時,就可以按照日誌產生的日期列進行劃分。把每一天的日誌當作一個分區。
    將數據組織成分區,主要可以提高數據的查詢速度。用戶存儲的每一條記錄具體放到哪個分區,由用戶決定。即用戶在加載數據的時候必須顯示的指定該部分數據放到哪個分區。
4:桶
    對於每一個表(table)或者分區,Hive可以進一步組織成桶。Hive也是針對某一列進行桶的組織。Hive採用對列值哈希,然後除以桶的個數求餘的方式決定該條記錄存放在哪個桶當中。採用桶能夠帶來一些好處,比如JOIN操作。對於JOIN操作兩個表有一個相同的列,如果對這兩個表都進行了桶操作。那麼將保存相同列值的桶進行JOIN操作就可以,可以大大較少JOIN的數據量。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章