1、產生背景 sql
1.MapReudce編程繁瑣,須要編寫大量的代碼數據庫
2.HDFS中存放的都是文件,在HDFS中沒有Scheme的概念,沒法用SQL進行快速的查詢。編程
2、Hive的概念 服務器
Hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供簡單的SQL查詢功能,能夠將SQL語句轉換爲MapReduce任務進行運行。它使用一種使用相似於SQL的查詢語句直接做用在分佈式存儲文件系統之上的數據倉庫工具,用於解決海量結構化的日誌數據統計問題。架構
Hive的數據存儲在HDFS中,Hive的底層的計算是經過MR、Spark(Hive On Spark)或Tez來實現的。HQL語句經過Hive引擎被轉化成map做業並提交到集羣去運行,所以Hive的查詢具備高延時性。分佈式
特別指出,Hive和SQL語言同樣支持刪查增改,但對於分佈式文件系統中的大規模數據來講,Hive主要用於查詢。那麼Hive和關係型數據庫有什麼關聯呢?沒有任何關聯,只是HQL和SQL類似而已。工具
Hive和關係型數據庫比較:oop
3、Hive的架構 post
1.用戶接口spa
命令行Cli接口、Web接口(WUI)、遠程服務接口(Client)
2.元數據(Meta)存儲
Hive的元數據能夠存放在Derby、MySQL、Oracle、postgres等關係型數據庫庫中,在實際開發中一般使用MySQL。Derby是一種單Session數據庫,不支持兩臺機器同時對一個數據倉庫進行訪問,不適用於生產環境。
Hive的元數據存放在關係型數據庫中,如MySQL中,下圖就是存儲在Hive安裝目錄的與元數據相關的sql文件:
Meta ==> HA Database : MySQL主備 vip 。Hive、Spark SQL、impala等SQL on Hadoop使用同一套元數據。
爲何須要元數據?由於HDFS裏的數據是以文件的形式存在的,沒法使用SQL進行快速查詢,而元數據的做用就是給HDFS中的文件做用上Scheme信息。
3、外部表和內部表的區別
內部表:存儲目錄默認是/user/hive/warehouse,其存儲目錄能夠經過修改hive-site.xml文件的hive.metastore.dir參數進行配置。