【4.分佈式計算】hadoop-hive

hive對hdfs中數據進行抽象成表,能夠經過sql組裝m_p的過程。(更多大數據處理見:https://segmentfault.com/a/11...)。數據經過mysql和hdfs存儲,存儲格式用的現有文件格式,mysql存結構/hdfs存表數據(好比insert id name 4 ss,hdfs存 4ss)。只是sql到m_p的映射,這過程又比較複雜。因此這裏只介紹下hive的執行過程和框架,存儲的分層組織和事務的支持。mysql

官方:Apache Hive™數據倉庫軟件有助於使用SQL讀取,編寫和管理駐留在分佈式存儲中的大型數據集。能夠將結構投影到已存儲的數據中。提供了命令行工具和JDBC驅動程序以將用戶鏈接到Hive。
https://hive.apache.org/
適用:離線計算。用sql生成task調用map_Reduce。sql

clipboard.png

  • UI
  • driver
    會話和JDBC/ODBC接口
  • metadata
    Hive將元數據存儲在數據庫中,如mysql、derby。Hive中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否爲外部表等),表的數據所在目錄等。元數據提供數據的抽象和發現能力,存於database仍是文件,考慮到要隨機更新、可查詢,所以用database。表和元數據用來生成task
  • complier
    解釋器、編譯器、優化器完成HQL查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在HDFS中,並在隨後有MapReduce調用執行。
  • 執行引擎
    執行編譯器建立的執行計劃的組件。該計劃是一個階段的DAG。執行引擎管理計劃的這些不一樣階段之間的依賴關係,並在適當的系統組件上執行這些階段
  • 數據存儲/計算
    Hive的數據存儲在HDFS中,大部分的查詢、計算由MapReduce完成(包含的查詢,好比select from tbl不會生成MapRedcue任務)。
    將大多數查詢轉換爲mr組合的計算(select *等不須要)轉化過程比較複雜:
    https://blog.csdn.net/u010738...
    HDFS的存儲:表=》分區=》桶
    1)、表:Hive中的表和關係型數據庫中的表在概念上很相似,每一個表在HDFS中都有相應的目錄用來存儲表的數據,這個目錄能夠經過${HIVE_HOME}/conf/hive-site.xml配置文件中,若是我有一個表wyp,那麼在HDFS中會建立/user/hive/warehouse/wyp 目錄(這裏假定hive.metastore.warehouse.dir配置爲/user/hive/warehouse);wyp表全部的數據都存放在這個目錄中。
    2)、外部表:Hive中的外部表和表很相似,可是其數據不是放在本身表所屬的目錄中,而是存放到別處,這樣的好處是若是你要刪除這個外部表,該外部表所指向的數據是不會被刪除的,它只會刪除外部表對應的元數據;而若是你要刪除表,該表對應的全部數據包括元數據都會被刪除。
    3)、分區:在Hive中,表的每個分區對應表下的相應目錄,全部分區的數據都是存儲在對應的目錄中。好比wyp 表有dt和city兩個分區,則對應dt=20131218,city=BJ對應表的目錄爲/user/hive/warehouse /dt=20131218/city=BJ,全部屬於這個分區的數據都存放在這個目錄中。
    4)、桶:對指定的列計算其hash,根據hash值切分數據,目的是爲了並行,每個桶對應一個文件(注意和分區的區別)。好比將wyp表id列分散至16個桶中,首先對id列的值計算hash,對應hash值爲0和16的數據存儲的HDFS目錄爲:/user /hive/warehouse/wyp/part-00000;而hash值爲2的數據存儲的HDFS 目錄爲:/user/hive/warehouse/wyp/part-00002。
    表文件格式支持:text/avro/jsonfile/ORC等
    數據行支持:serde/json/csv
  • 執行流程
    UI調用驅動程序的執行接口(圖1中的步驟1)。
    驅動程序爲查詢建立會話句柄,並將查詢發送到編譯器以生成執行計劃(步驟2)。
    編譯器從Metastore獲取必要的元數據(步驟3和4)。此元數據用於檢查查詢樹中的表達式以及基於查詢謂詞修剪分區。由編譯器生成的計劃(步驟5)是階段的DAG,其中每一個階段是m/p做業,元數據操做或對HDFS的操做。
    執行引擎將這些階段提交給適當的組件(步驟6,6.1,6.2和6.3)。在每一個任務(m/p)中,與表或中間輸出相關聯的反序列化器用於從HDFS文件中讀取行,這些行經過關聯的運算符樹傳遞。生成輸出後,它將經過序列化程序寫入臨時HDFS文件(若是操做不須要減小,則會在映射器中發生)。臨時文件用於向計劃的m/p提供數據。對於DML操做,最終臨時文件將移動到表。此方案用於確保不讀取髒數據(文件重命名是HDFS中的原子操做)

https://cwiki.apache.org/conf...數據庫

  • 高可用
    hive提供了跨集羣(跨hadoop,通常部署須要hadoop,mysql,hive,hadoop對其中文件其實有3份備份的,爲了跨hadoop高可用)基於HCatalog的發佈訂閱(JMS)和EXPORT和IMPORT命令
  • 事務鎖+快照鎖:DbLockManager 在hive的metastore 中管理全部的鎖和事務。(鎖和事務的信息是持久化存儲的,即使server掛掉也不會有影響)這也意味着,一旦開啓式了事務,以前在zookeeper中的鎖行爲也不在支持。爲了防止客戶端由於掛掉而致使事務和鎖沒法釋放,在鎖的持有者和事務的初始化器到server的metastore 間會維持一個週期性的心跳。一旦心跳超時,鎖和事務就會被釋放。須要明確事務表只支持快照隔離級別。當一個給定的查詢啓動時,它會提供該數據的一致快照。必須分桶支持了單key的update/delete。新的記錄和更新,刪除都存在delta files。一次事務操做建立一系列的delta files。在讀取的時候,將基礎文件和修改,刪除合併,最後返回給查詢。涉及到delta的合併和刪除,Minor compaction :將已有的delta files重寫到一個單獨的delta file,每一個分桶一個。Major compaction: 將delta文件和base 重寫到一個新的base file,每一個分桶一個。
相關文章
相關標籤/搜索