hive是基于hadoop的一個資料倉庫工具,可以将結構化的資料檔案映射為一張資料庫表,并提供類sql查詢功能,hive底層是将sql語句轉換為mapreduce任務運作(類似于插件pig\impala\spark sql)
直接使用 hadoop 所面臨的問題:
人員學習成本太高
項目周期要求太短
mapreduce 實作複雜查詢邏輯開發難度太大
為什麼要使用 hive
操作接口采用類 sql 的文法,提供快速開發的能力
避免了寫 mapreduce,減少開發人員的學習成本
功能擴充很友善
可擴充性(橫向擴充)。hive 可以自由的擴充叢集的規模,而且一般情況下不需要重新開機服務
延展性。hive 支援自定義函數,使用者可以根據自己的需求來實作自己的函數
容錯。良好的容錯性,可以保障即使有節點出現問題, sql 語句仍可完成執行
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依賴hdfs存儲資料
hive将hql轉換成mapreduce執行
是以說hive是基于hadoop的一個資料倉庫工具,實質就是一款基于hdfs的mapreduce計算架構
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散列之後的多個檔案