做者介紹:胡夢宇,知乎數據架構平臺開發工程師
Apache Hive 是基於 Apache Hadoop 的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,而且提供了 Hive SQL 進行查詢和分析,在離線數倉中被普遍使用。
Hive Metastore 是 Hive 的元信息管理工具,它提供了操做元數據的一系列接口,其後端存儲通常選用關係型數據庫如 Derby、 MySQL 等。如今不少除了 Hive 以外計算框架都支持以 Hive Metastore 爲元數據中心來查詢底層 Hadoop 生態的數據,好比 Presto、Spark、Flink 等等。
在知乎,咱們是將元信息存儲在 MySQL 內的,隨着業務數據的不斷增加,MySQL 內已經出現單表數據量兩千多萬的狀況,當用戶的任務出現 Metastore 密集操做的狀況時,每每會出現緩慢甚至超時的現象,極大影響了任務的穩定性。久而久之,MySQL 在將來的某一天必定會不堪重負,所以優化 Hive 的元數據庫勢在必行。
在去年,咱們作過數據治理,Hive 表生命週期管理,按期去刪除元數據,指望可以減小 MySQL 的數據量,緩解元數據庫的壓力。可是通過實踐,發現該方案有如下缺點:git
所以,咱們須要尋找新的技術方案來解決這個問題。github
業內目前有兩種方案可供借鑑:數據庫
可是通過調研,咱們發現兩種方案都有必定的缺陷:後端
其實問題主要在於,當數據量增長時,MySQL 受限於單機性能,很難有較好的表現,而將單臺 MySQL 擴展爲集羣,複雜度將會呈幾何倍上升。若是可以找到一款兼容 MySQL 協議的分佈式數據庫,就能完美解決這個問題。所以,咱們選擇了 TiDB。架構
TiDB 是 PingCAP 開源的分佈式 NewSQL 數據庫,它支持水平彈性擴展、ACID 事務、標準 SQL、MySQL 語法和 MySQL 協議,具備數據強一致的高可用特性,是一個不只適合 OLTP 場景還適 OLAP 場景的混合數據庫。併發
選用 TiDB 的理由以下:框架
其中 Zue 是知乎內部使用的可視化查詢界面。分佈式
在 Hive 的元數據庫遷移到 TiDB 了之後,架構幾乎沒有任何變化,只不過查詢的壓力由單臺 MySQL 節點分攤到了整個 TiDB 集羣,集羣越大,查詢效率越高,性能提高越明顯。工具
此遷移過程對業務幾乎無感,成功上線。oop
咱們從 Hive 層面對數據庫進行了測試,模擬業務高峯期,多併發對百萬分區級別的表增刪分區,所執行的 Hive SQL 以下:
ALTER TABLE '${table_name}' DROP IF EXISTS PARTITION(...); ALTER TABLE '${table_name}' ADD IF NOT EXISTS PARTITION(...);
花費時間從 45s-75s 下降到了 10s 如下。
SELECT `A0`.`PART_NAME`,`A0`.`PART_NAME` AS `NUCORDER0` FROM `PARTITIONS` `A0
當某個 Hive 表的分區數量十分巨大時,這條 SQL 會給元數據庫形成至關大的負擔。遷移前,此類 SQL 在 MySQL 運行時間約爲 30s - 40s,遷移後,在 TiDB 運行僅需 6s - 7s,提高至關明顯。
在 Hive Metastore 的場景下,咱們已經感覺到了 TiDB 在大數據應用場景下的魅力。後續咱們但願 TiDB 可以成爲跨數據中心的服務,經過數據副本的跨機房部署,打通離線與在線,讓離線場景可以在對在線服務無壓力的狀況下爲數據提供實時的 ETL 能力,解決離線 ETL 任務實時性差的問題。爲此,咱們正在開發 TiBigData。
目前其做爲 PingCAP Incubator 的孵化項目。由來自知乎的 TiKV Maintainer 孫曉光發起。PingCAP Incubator 旨在梳理一套相對完整的 TiDB 生態開源項目孵化體系,將關於 TiDB 開源生態的想法與實際生產環境中的需求相關聯,經過開源項目協做方式,共同將想法落地。力求想法項目化。從「我有一個想法」到「項目順利畢業」,PingCAP 提供一系列的資源支持,確保全部項目孵化的流程都有章可循,同時結合項目不一樣特徵及孵化目的,將項目劃分爲 Feature 類和 Project 類,針對性地給出孵化流程建議。PingCAP Incubator 中的項目有:TiDB Dashboard、TiUP、TinyKV,TiDB Wasm 等。
完整項目請查看:
https://github.com/pingcap-incubator
PingCAP Incubator 完整文檔參考:
https://github.com/pingcap/community/tree/master/incubator
目前 TiBigData 項目已經爲 TiDB 提供了 Presto 與 Flink 的只讀支持。後續咱們但願在 PingCAP Incubator 計劃的扶持下同社區一塊兒建設 TiBigData 項目,力圖爲 TiDB 帶來更加完整的大數據能力。