Hive體系架構

Hive 是什麼

  1. 首先是一個構建在Hadoop之上的數據倉庫(它並不是一個真實的數據庫)
  2. 由Facebook開源,最初用於解決海量結構化的日誌數據統計問題
  3. Hive定義了一種類似於SQL查詢語言:HQL(非常類似於MySQL中的SQL語句,同時做了擴展)
  4. 通常用於離線數據處理(採用MapReduce)
  5. 可以認爲是一個HQL=>MapReduce的語言翻譯器
  6. 底層支持多種不同的執行引擎(默認是MapReduce)
  7. 支持不同的壓縮格式、存儲格式以及自定義函數
  8. Hive中的數據庫及表就是HDFS中的目錄/文件夾,數據是文件,元數據信息可以存儲在任意的一個關係型數據庫中(比如:MySQL、SqlServer、Oracle等,默認是Derby),數據存儲在HDFS中

Hive 的體系架構

這裏寫圖片描述
上圖爲Hive的體系架構圖,主要由如下幾部分組成
用戶接口:Client
Cli(Command-line shell),及shell 命令行,hive1的客戶端,hive server2 提供了新的命令beeline
JDBC/ODBC,通過Java來訪問hive,與傳統數據庫JDBC的方式類型,比如我們使用Java通過JDBC訪問操作MySQL
WebUI,瀏覽器中訪問hive
元數據:metastore
Hive 將元數據存儲在數據庫中(metastore),數據庫可以爲關係型數據庫中的任意一種,元數據包括:表名、表所屬數據庫、表的擁有者、列/分區字段、表的類型、表數據所在目錄。
元數據存儲在MySQL上
驅動器:driver
包含:解析器、編譯器、優化器、執行器
完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃(plan)的生成,生成的查詢計劃存儲在 HDFS 中,並在隨後有 MapReduce 調用執行
Hadoop
使用hdfs進行數據存儲,運行在yarn上,使用mapreduce進行計算

Hive 部署架構

在測試環境中

這裏寫圖片描述

Hive 是構建在Hadoop之上的一個數據倉庫,實際工作中,我們的Hadoop是肯定是集羣,但Hive我們只需要裝在一臺服務上即可,元數據默認存放在Derby中,Derby是一個單用戶,使用起來不是很方便,建議我們自己裝一個mysql數據庫,專門用於存放hive的元數據信息。

在生產環境中

這裏寫圖片描述
生產環境中與測試環境不相同的之處就是mysql用的是主備,當一臺mysql服務掛掉了,通過某種機制它會自動切換到另一臺,其實這樣做的好處就是爲了容錯,保證高可用,防止hive的元數據丟失

Hive與RDBM(關係型數據庫)的區別

Hive RDBM
面向SQL 面向SQL
關注於分析統計,延時性比較高 更專注於實時,延時性比較短的分析
支持事務(高版本) 支持事務
支持分區,隨機insert/update(高版本) 支持隨機insert/update
基於MapReduce的分佈式處理引擎 支持分佈式
成百上千個節點 很少超過20個
構建在廉價的機器上 通常情況是構建專用的機器上
能夠處理P級別的數據 到T…差不多了把…

hive的優缺點

優點:
容易上手、易用,比用MapReduce編程簡單很多
數據離線處理,比如日誌分析,海量數據結構化分析
底層基於hadoop,易於擴展,支持自定義函數UDF

缺點:
Hive執行延遲比較高,不適合實時查詢
Hive優勢在於處理大數據集,對於小數據集沒有優勢
因爲Hive啓動是需要時間的,提交MapReduce作業.如果數據量比較小.說不定啓動時間比計算時間還要長.
不單單是啓動,最後還要銷燬.這就佔用了非常多的時間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章