天天看點

【Hive】Hive基礎認識

hive是基于hadoop的一個資料倉庫工具,可以将結構化的資料檔案映射為一張資料庫表,并提供類sql查詢功能,hive底層是将sql語句轉換為mapreduce任務運作(類似于插件pig\impala\spark sql)

直接使用 hadoop 所面臨的問題:

人員學習成本太高

項目周期要求太短

mapreduce 實作複雜查詢邏輯開發難度太大

為什麼要使用 hive

操作接口采用類 sql 的文法,提供快速開發的能力

避免了寫 mapreduce,減少開發人員的學習成本

功能擴充很友善

可擴充性(橫向擴充)。hive 可以自由的擴充叢集的規模,而且一般情況下不需要重新開機服務

延展性。hive 支援自定義函數,使用者可以根據自己的需求來實作自己的函數

容錯。良好的容錯性,可以保障即使有節點出現問題, sql 語句仍可完成執行

  

【Hive】Hive基礎認識

hive的主要元件包括ui元件、driver元件(complier、optimizer和executor)、metastore元件、cli(command line interface,指令行接口)、jdbc/odbc、thrift server和hive web interface(hwi)等。

drvier元件:該元件是hive的核心元件,該元件包括complier(編譯器)、optimizer(優化器)和executor(執行器),它們的作用是對hive sql語句進行解析、編譯優化、生成執行計劃,然後調用底層mapreduce計算架構。

metastore元件:該元件是hive用來負責管理中繼資料的元件。hive的中繼資料存儲在關系型資料庫中,其支援的關系型資料庫有derby和mysql,其中derby是hive預設情況下使用的資料庫,它内嵌在hive中,但是該資料庫隻支援單會話,也就是說隻允許一個會話連結,是以在生産中并不适用,在平時我們的測試環境中也很少使用。在我們日常的團隊開發中,需要支援多會話,是以需要一個獨立的中繼資料庫,用的最多的也就是mysql,而且hive内部對mysql提供了很好的支援。

cli:hive的指令行接口

thrift server:該元件提供jdbc和odbc接入的能力,用來進行可擴充且跨語言的服務開發。hive內建了該服務,能讓不同的程式設計語言調用hive的接口

hive web interface:該元件是hive用戶端提供的一種通過網頁方式通路hive所提供的服務。這個接口對應hive的hwi元件

hive通過cli,jdbc/odbc或hwi接受相關的hive sql查詢,并通過driver元件進行編譯,分析優化,最後程式設計可執行的mapreduce任務,如下圖示:

【Hive】Hive基礎認識
【Hive】Hive基礎認識

hive依賴hdfs存儲資料

hive将hql轉換成mapreduce執行

是以說hive是基于hadoop的一個資料倉庫工具,實質就是一款基于hdfs的mapreduce計算架構

【Hive】Hive基礎認識

hive中所有的資料都存儲在hdfs中,沒有專門的資料存儲格式(可支援text,sequencefile, parquetfile, rcfile 等),隻需要在建立表的時候告訴hive資料中的列分隔符和行分隔符,hive 就可以解析資料

hive包含以下資料模型:

db:在hdfs中表現為${hive. metastore.warehouse.dir}目錄下一個檔案夾

table:在hdfs中表現所屬db目錄下一個檔案夾

external table:與table 類似,不過其資料存放位置可以在任意指定路徑

partition:在hdfs中表現為table目錄下的子目錄

bucket:在hdfs中表現為同一個表目錄下根據hash散列之後的多個檔案

繼續閱讀