目錄
一 hive是什么?
1:hive是構建在hdfs上的一個數據倉庫(Data Warehouse)
2:hive是sql解析引擎,將sql語句轉化為MR Job,然后在hadoop平台上運行
3:hive中的表是純邏輯表,就只是表的定義,也就是表的元數據,本質上來說就是存儲在hdfs上的目錄/數據。數據和表的定義分離。
4:hive 本身不存儲數據,他完全依賴於HDFS和MapReduce。
5:hive是讀多少寫多少的,不支持對數據的改寫和刪除。
6:hive中沒有專門的數據格式,這個有用戶指定,一般需要三個屬性:
—— 行分割符:“\n”
——列分割符:"\t"
——讀取文件數據的方法
二 為什么會出現hive?
關於這一點,在《hive編程指南》中有明確說明:用戶如何從現有的一個數據基礎架構轉移到Hadoop上,而這個基礎架構是基於關系型數據庫和結構化查詢語句的。對於大量的sql用戶來說,這個問題又改如何解決呢?
此時就出現了hive,hive提供了一個被稱為Hive查詢語音的SQL方言,來查詢和存儲在Hadoop集群中的數據。這就會減低開發人員的學習成本,以一種熟悉的語言來操作和分析存儲在hadoop上的數據。
三 hive 為什么適合數據倉庫應用程序?
因為大多數數據倉庫應用程序是使用基於SQL的關系型數據庫實現的,所以hive降低了將這些程序應用移植到hadoop上的障礙。
四 hive與傳統關系型數據庫的比較
HQL | SQL | |
數據存儲 | Hadoop,HBASE | LocalFS |
數據格式 | 用戶自定義 | 系統決定 |
數據更新 | 不支持(覆蓋) | 支持 |
索引 | 有(0.8版本之后) | 有 |
執行延遲 | 高 | 低 |
可擴展性 | 高 | 低 |
執行 | MapReduce | Excutor |
數據規模 | 大(TB) | 小 |
數據檢查 | 讀時模式 | 寫時模式 |
五 hive的體系架構
hive的體系架構是遵從主從架構的設計模式。
hive體系架構的組成部分:
1 用戶接口
用戶接口包括三部分:
CLI(command line interface),交互式命令行,最常用的
JDBC/ODBC (Open Database Connectivity) 是hive基於開發人員通過連接zhi至hiveserver服務
Web UI 是通過瀏覽器訪問hive服務
2 跨語言服務 thrift server
Thtift Server 是Facebook提供的一終軟件框架,可以用來進行可擴展跨語言服務的框架,hive集成了該服務,能讓不用的語言調用該服務。
3 Driver (底層)
Driver組件完成了對HiveQL語句的語法分析,編譯,優化以及執行計划的生成,生成的邏輯執行計划存儲在HDFS 中,並隨后由MapReduce調用執行。
hive 的核心驅動引擎主要由四部分組成:
1 解釋器 是將HQL語句轉換成抽象的語法樹 (AST)
2 編譯器 將語法樹編譯為邏輯執行計划
3 優化器 是對邏輯執行計划進行優化
4 執行器 調用底層的運行框架執行邏輯計划
4 元數據存儲系統
元數據:是存儲在hive中數據的描述信息,如 表名,字段,表的所屬用戶,存儲目錄等信息。
Metastore 默認存在自帶的 Derby 數據庫中。缺點就是不適合多用戶操作,並且數據存儲目錄不固定。數據庫跟着Hive走,極度不方便管理。
解決方案:通常存我們自己創建的 MySQL 庫(本地 或 遠程)
Hive 和 MySQL 之間通過 MetaStore 服務交互
六 hive的執行流程
HiveQL 通過命令行或者客戶端提交,經過 Compiler 編譯器,運用 MetaStore 中的元數據進行類型檢測和語法分析,生成一個邏輯方案(Logical Plan),然后通過的優化處理,產生 一個 MapReduce 任務。