Hive學習筆記(一)——原理和體系架構


目錄

一 hive是什么?

二 為什么會出現hive?

三 hive 為什么適合數據倉庫應用程序?

四 hive與傳統關系型數據庫的比較

五 hive的體系架構

hive體系架構的組成部分:

1 用戶接口

2 跨語言服務 thrift server

3 Driver (底層)

4 元數據存儲系統 

六 hive的執行流程


一 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 任務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM