標籤:
Hive是一個基於Hadoop的資料倉儲平台。通過hive,我們可以方便地進行ETL的工作。hive定義了一個類似於SQL的查詢語言:HQL,能 夠將使用者編寫的QL轉化為相應的Mapreduce程式基於Hadoop執行。
Hive是Facebook 2008年8月剛開源的一個資料倉儲架構,其系統目標與 Pig 有相似之處,但它有一些Pig目前還不支援的機制,比如:更豐富的類型系統、更類似SQL的查詢語言、Table/Partition中繼資料的持久化等。
Hive
可以看成是從SQL到Map-Reduce的
映射器
hive的組件和體系架構:
hive web介面啟動:./hive --service hwi
瀏覽器訪問:http://localhost:9999/hwi/
預設情況下,Hive中繼資料儲存在內嵌的 Derby 資料庫中,只能允許一個會話串連,只適合簡單的測試。為了支援多使用者多會話,則需要一個獨立的中繼資料庫,我們使用 MySQL 作為中繼資料庫,Hive 內部對 MySQL 提供了很好的支援。
Hive安裝
內嵌模式:中繼資料保持在內嵌的Derby模式,只允許一個會話串連
本地獨立模式:在本地安裝Mysql,把中繼資料放到Mysql內
遠程模式:中繼資料放置在遠端Mysql資料庫。
Hive的資料放在哪兒?
資料在HDFS的warehouse目錄下,一個表對應一個子目錄。
本地的/tmp目錄存放日誌和執行計畫
hive的表分為兩種,內表和外表。
Hive 建立內部表時,會將資料移動到資料倉儲指向的路徑;若建立外部表格,僅記錄資料所在的路徑,不對資料的位置做任何改變。
在刪除表的時候,內部表的中繼資料和資料會被一起刪除, 而外部表格只刪除中繼資料,不刪除資料。這樣外部表格相對來說更加安全些,資料群組織也更加靈活,方便共用來源資料。
使用Mysql作為Hive metaStore的儲存資料庫
其中主要涉及到的表如下:
| 表名 |
說明 |
關聯鍵 |
| TBLS |
所有hive表的基本資料(表名,建立時間,所屬者等) |
TBL_ID,SD_ID |
| TABLE_PARAM |
表級屬性,(如是否外部表格,表注釋,最後修改時間等) |
TBL_ID |
| COLUMNS |
Hive表欄位資訊(欄位注釋,欄位名,欄位類型,欄位序號) |
SD_ID |
| SDS |
所有hive表、表分區所對應的hdfs資料目錄和資料格式 |
SD_ID,SERDE_ID |
| SERDE_PARAM |
序列化還原序列化資訊,如行分隔字元、資料行分隔符號、NULL的表示字元等 |
SERDE_ID |
| PARTITIONS |
Hive表分區資訊(所屬表,分區值) |
PART_ID,SD_ID,TBL_ID |
| PARTITION_KEYS |
Hive分區表分區鍵(即分區欄位) |
TBL_ID |
| PARTITION_KEY_VALS |
Hive表分區名(索引值) |
PART_ID |
HIVE與mysql的關係