亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

HBase寫吞吐場景資源消耗量化分析及優(yōu)化

MarvinZhang / 1392人閱讀

摘要:通過機制將多個合并成一個以控制每個內(nèi)的的數(shù)目在一定范圍內(nèi),當(dāng)然還有其他的作用,比如數(shù)據(jù)本地化率,多版本數(shù)據(jù)的合并,數(shù)據(jù)刪除標(biāo)記的清理等等,本文不做展開。

一. 概述

HBase 是一個基于 Google BigTable 論文設(shè)計的高可靠性、高性能、可伸縮的分布式存儲系統(tǒng)。 網(wǎng)上關(guān)于 HBase 的文章很多,官方文檔介紹的也比較詳細(xì),本篇文章不介紹HBase基本的細(xì)節(jié)。

本文從 HBase 寫鏈路開始分析,然后針對少量隨機讀和海量隨機寫入場景入手,全方面量化分析各種資源的開銷, 從而做到以下兩點:

在給定業(yè)務(wù)量級的情況下,預(yù)先評估好集群的合理規(guī)模

在 HBase 的眾多參數(shù)中,選擇合理的配置組合

二. HBase 寫鏈路簡要分析

HBase 的寫入鏈路基于 LSM(Log-Structured Merge-Tree), 基本思想是把用戶的隨機寫入轉(zhuǎn)化為兩部分寫入:

Memstore 內(nèi)存中的 Map, 保存隨機的隨機寫入,待 memstore 達(dá)到一定量的時候會異步執(zhí)行 flush 操作,在 HDFS 中生成 HFile 中。 同時會按照寫入順序,把數(shù)據(jù)寫入一份到 HDFS 的 WAL(Write Ahead Log)中,用來保證數(shù)據(jù)的可靠性,即在異常(宕機,進(jìn)程異常退出)的場景下,能夠恢復(fù) Memstore 中還沒來得及持久化成 HFile 的數(shù)據(jù).

三. Flush & Compaction

上一節(jié)中,介紹了 HBase 的寫路徑,其中 HFile 是 HBase 數(shù)據(jù)持久化的最終形態(tài), 本節(jié)將介紹 HBase 如何生成 HFile 和管理 HFile。關(guān)于 HFile, 主要涉及到兩個核心操作:

Flushing

Compaction

上一節(jié)中提到,HBase 的寫入最先會放入內(nèi)存中,提供實時的查詢,當(dāng) Memstore 中數(shù)據(jù)達(dá)到一定量的閾值(128MB),會通過 Flush 操作生成 HFile 持久化到 HDFS 中,隨著用戶的寫入,生成的 HFile 數(shù)目會逐步增多,這會影響用戶的讀操作,同時也會系統(tǒng)占用(HDFS 層 block 的數(shù)目, regionserver 服務(wù)器的文件描述符占用), region split 操作,region reopen 操作也會受到不同程度影響。
HBase 通過 Compaction 機制將多個 HFile 合并成一個 HFile 以控制每個 Region 內(nèi)的 HFile 的數(shù)目在一定范圍內(nèi), 當(dāng)然 Compaction 還有其他的作用,比如數(shù)據(jù)本地化率,多版本數(shù)據(jù)的合并,數(shù)據(jù)刪除標(biāo)記的清理等等,本文不做展開。

另外還有一點需要知道的是,HBase 中 Flush 操作和 Compaction 操作和讀寫鏈路是由獨立線程完成的,互不干擾。

四. 系統(tǒng)開銷定量分析

為了簡化計算,本節(jié)針對事件類數(shù)據(jù)寫吞吐型場景,對 HBase 系統(tǒng)中的開銷做定量的分析,做以下假設(shè):

數(shù)據(jù)寫入的 Rowkey 是打散的,不存在寫熱點

數(shù)據(jù)寫入量及總量是可評估的,會對數(shù)據(jù)做預(yù)先分區(qū),定量分析基于 region 分布穩(wěn)定的情況下

假設(shè)隨機讀的數(shù)目很小,小到可以忽略 IO 開銷,且對讀 RT 不敏感

數(shù)據(jù)沒有更新,沒有刪除操作,有生命周期TTL設(shè)置

HBase 寫入鏈路中不存在隨機磁盤,所以隨機 IOPS 不會成為瓶頸

一般大數(shù)據(jù)機型的多個 SATA 盤的順序?qū)懲掏麓笥谌f兆網(wǎng)卡

忽略掉RPC帶來的額外的帶寬消耗

4.1 系統(tǒng)變量

單條數(shù)據(jù)大小 -> s (bytes)

峰值寫 TPS -> T

HFile 副本數(shù)→ R1 (一般為3)

WAL 副本數(shù) → R2 (一般為3)

WAL 數(shù)據(jù)壓縮比 → Cwal (一般是1)

HFile 壓縮比 → C (采用 DIFF + LZO, 日志場景壓縮比一般為 0.2左右)

FlushSize → F (這里跟 regionserver 的 memstore 內(nèi)存容量,region 數(shù)目,寫入是否平均和 flushsize 的配置有關(guān),簡化分析,認(rèn)為內(nèi)存是足夠的 128MB)

hbase.hstore.compaction.min → CT (默認(rèn)是 3, 一般情況下,決定了歸并系數(shù),即每次 compaction 參與的文件數(shù)目,在不存在 compaction 積壓的情況下, 實際運行時也是在 3 左右)

數(shù)據(jù)生命周期 → TTL (決定數(shù)據(jù)量的大小,一般寫吞吐場景,日志會有一定的保存周期, 單位天)

單機數(shù)據(jù)量水位 → D ( 單位 T,這里指 HDFS 上存放 HFile 數(shù)據(jù)的數(shù)據(jù)量平均分擔(dān)到每臺機器上)

MajorCompaction 周期 → M( hbase.hregion.majorcompaction 決定,默認(rèn) 20 天)

以上 11 個參數(shù),是本次量化分析中需要使用到的變量,系統(tǒng)資源方面主要量化以下兩個指標(biāo):

磁盤開銷

網(wǎng)絡(luò)開銷

4.2 磁盤容量開銷量化分析

這里只考慮磁盤空間方面的占用,相關(guān)的變量有:

單條數(shù)據(jù)大小 s

峰值寫入 TPS

HFile 副本數(shù) R1

HFile 壓縮比 c

數(shù)據(jù)生命周期 TTL

HFile的磁盤容量量化公式

V = TTL  86400  T  s  C * R1

假設(shè) s = 1000, TTL = 365, T = 200000, C = 0.2 , R1 = 3 的情況下,HFile 磁盤空間需求是:

  V = 30 * 86400 * 200000 * 1000 * 0.2 * 3  
    = 311040000000000.0 bytes
    = 282T 

在這里我們忽略了其他占用比較小的磁盤開銷,比如:

WAL的磁盤開銷,在沒有 Replication,寫入平均的情況下,WAL 的日志量約定于 (hbase.master.logcleaner.ttl /1000) s TPS + totalMemstoreSize

Compaction 臨時文件,Split 父 Region 文件等臨時文件

Snapshot 文件

等等

4.3 網(wǎng)絡(luò)開銷量化分析

HBase中會造成巨大網(wǎng)絡(luò)開銷的主要由一下三部分組成,他們是相互獨立,異步進(jìn)行的,這里做個比方,HBase 這三個操作和人吃飯很像,這里做個類比

回歸正題,下面按照發(fā)生順序,從三個角度分別分析:

寫路徑

Flush

Compaction

4.3.1 寫路徑

寫路徑的網(wǎng)絡(luò)開銷,主要是寫 WAL 日志方面, 相關(guān)的變量有:

單條數(shù)據(jù)大小 s

峰值寫入 TPS

WAL 副本數(shù) R2

WAL 壓縮比 Cwal

寫路徑中,產(chǎn)生的網(wǎng)絡(luò)流量分為兩部分,一部分是寫 WAL 產(chǎn)生的流量,一部分是外部用戶 RPC 寫入的流量, In 流量和 Out 流量計算公式為:

NInWrite = T  s   Cwal  (R2 - 1)  + (T  s )

NOutWrite = T s Cwal * (R2 - 1)

假設(shè) T = 20W,s = 1000, Cwal = 1.0, R2 = 3

      NInwrite = 200000 * 1000  * 1 * (3-1) + 200000 * 1000

               = 600000000 bytes/s

               = 572MB/s

     NOutwrite = 200000 * 1000* 1 * (3-1)

               = 400000000 bytes/s

               = 381MB/s
4.3.2 Flush

Flush 的網(wǎng)絡(luò)開銷,主要是生成 HFile 后,將 HFile 寫入到 HDFS 的過程,相關(guān)的變量有:

單條數(shù)據(jù)大小 s

峰值寫入 T

HFIle 副本數(shù) R1

HFile 壓縮比 C

Flush 產(chǎn)生的 In 流量和 Out 流量計算公式為:

NInWrite = s  T  (R1 - 1) * C

NOutWrite = s T (R1 - 1) * C

假設(shè) T = 20W, S = 1000, R1 = 3, C = 0.2

  NInwrite  = 200000 * 1000 * (3 - 1) * 0.2 

            = 80000000.0 bytes/s

            =76.3MB/s

 NOutwrite  = 200000 * 1000 * (3 - 1) * 0.2 

            = 120000000.0 bytes/s

            =76.3MB/s
4.3.3 Compaction

Compaction 比較復(fù)雜,在有預(yù)分區(qū)不考慮 Split 的情況下分為兩類:

Major Compaction

Minor Compaction

兩者是獨立的,下面將分別針對兩種 Compaction 做分析,最后取和:

4.3.3.1 Major Compaction

Major Compaction 的定義是由全部 HFile 參與的 Compaction, 一般在發(fā)生在 Split 后發(fā)生,或者到達(dá)系統(tǒng)的 MajorCompaction 周期, 默認(rèn)的 MajorCompaction 周期為 20 天,這里我們暫時忽略 Split 造成的 MajorCompaction 流量. 最終 Major Compaction 開銷相關(guān)的變量是:

單機數(shù)據(jù)量水位 D

HFIle 副本數(shù) R1

MajorCompaction 周期 → M (默認(rèn) 20 天)

這里假設(shè)數(shù)據(jù)是有本地化的,所以 MajorCompaction 的讀過程,走 ShortCircuit,不計算網(wǎng)絡(luò)開銷,并且寫 HFile 的第一副本是本地流量,也不做流量計算,所以 MajorCompaction 的網(wǎng)絡(luò)流量計算公式是:

NInMajor = D * (R1 - 1) / M

NOutMajor = D * (R1 - 1) / M

假設(shè) D = 10T, R1 = 3, M = 20

    NInMajor =  10 * 1024 * 1024 * 1024 * 1024 * (3 - 1) / (20 * 86400)

             = 12725829bytes/s 

             = 12MB/s

   NOutMajor =  10 * 1024 * 1024 * 1024 * 1024 * (3 - 1) / (20 * 86400)

             = 12725829bytes /s 

             = 12MB/s
4.3.3.2 Minor Compaction

量化之前,先問一個問題,每條數(shù)據(jù)在第一次 flush 成為 HFile 之后,會經(jīng)過多少次 Minor Compaction?

要回答這個問題之前,要先了解現(xiàn)在 HBase 默認(rèn)的 compaction 的文件選取策略,這里不展開,只做簡單分析,MinorCompaction 選擇的文件對象數(shù)目,一般處于 hbase.hstore.compaction.min(默認(rèn) 3)和 hbase.hstore.compaction.max(默認(rèn) 10)之間, 總文件大小小于 hbase.hstore.compaction.max.size(默認(rèn) Max), 如果文件的 Size 小于 hbase.hstore.compaction.min.size(默認(rèn)是 flushsize), 則一定會被選中; 并且被選中的文件size的差距不會過大, 這個由參數(shù) hbase.hstore.compaction.ratio 和 hbase.hstore.compaction.ratio.offpeak 控制,這里不做展開.

所以,在 Compaction 沒有積壓的情況下,每次 compaction 選中的文件數(shù)目會等于 hbase.hstore.compaction.min 并且文件 size 應(yīng)該相同量級, 對穩(wěn)定的表,對每條數(shù)據(jù)來說,經(jīng)過的 compaction 次數(shù)越多,其文件會越大. 其中每條數(shù)據(jù)參與 Minor Compaction 的最大次數(shù)可以用公式 math.log( 32000 / 25.6, 3) = 6 得到

這里用到的兩個變量是:

FlushSize 默認(rèn)是 128 MB

HFile 壓縮比例,假設(shè)是 0.2

所以剛剛 Flush 生成的 HFile 的大小在 25.6MB 左右,當(dāng)集齊三個 25.6MB 的 HFile 后,會觸發(fā)第一次 Minor Compaction, 生成一個 76.8MB 左右的 HFile

對于一般情況,單個 Region 的文件 Size 我們會根據(jù)容量預(yù)分區(qū)好,并且控制單個 Region 的 HFile 的總大小 在 32G 以內(nèi),對于一個 Memstore
128MB, HFile 壓縮比 0.2, 單個 Region 32G 的表,上表中各個 Size 的 HFile 數(shù)目不會超過 2 個(否則就滿足了觸發(fā) Minor Compaction 的條件)

32G = 18.6G + 6.2G + 6.2G + 690MB + 230MB + 76.8MB + 76.8MB

到這里,我們知道每條寫入的數(shù)據(jù),從寫入到 TTL 過期,經(jīng)過 Minor Compaction 的次數(shù)是可以計算出來的。 所以只要計算出每次 Compaction 的網(wǎng)絡(luò)開銷,就可以計算出,HBase 通過 Minor Compaction 消化每條數(shù)據(jù),所占用的總的開銷是多少,這里用到的變量有:

單條數(shù)據(jù)大小 s

峰值寫入 T

HFIle 副本數(shù) R1

HFile 壓縮比 C

計算公式如下:

NInMinor = S  T  (R1-1)  C  總次數(shù)

NOutMinor = S T (R1-1) C 總次數(shù)

假設(shè) S = 1000, T = 20W, R1 = 3, C = 0.2, 總次數(shù) = 6

    NInminor = 1000 * 200000 * (3 - 1) * 0.2 * 6

             = 480000000.0bytes/s

             = 457.8MB/s 

   NOutminor = 1000 * 200000 * (3 - 1) * 0.2 * 6

             = 480000000.0bytes/s

             = 457.8MB/s 
4.3.4 網(wǎng)絡(luò)資源定量分析小結(jié)

在用戶寫入 TPS 20W, 單條數(shù)據(jù)大小 1000 bytes的場景下,整體網(wǎng)絡(luò)吞吐為:

NIntotal   = NInwrite + NInflush + NInmajor + NInminor

           = 572MB/s + 76.3MB/s  + 12MB/s + 457.8MB/s

           = 1118.1MB/s

NOuttotal  = NOutwrite + NOutflush + NOutmajor + NOutminor

           = 381MB/s + 76.3MB/s  + 12MB/s + 457.8MB/s

           = 927.1MB

當(dāng)然這是理想情況下的最小開銷,有很多種情況,可以導(dǎo)致實際網(wǎng)絡(luò)開銷超過這個理論值, 以下情況都會導(dǎo)致實際流量的升高:

預(yù)分區(qū)不足或者業(yè)務(wù)量增長,導(dǎo)致 Region 發(fā)生 Split, Split 會導(dǎo)致額外的 Compaction 操作

分區(qū)寫入不平均,導(dǎo)致少量 region 不是因為到達(dá)了 flushsize 而進(jìn)行 flush,導(dǎo)致 flush 下來的文件 Size 偏小

HFile 因為 balance 等原因?qū)е卤镜鼗实?,也會?dǎo)致 compaciton 產(chǎn)生更多的網(wǎng)卡開銷

預(yù)分區(qū)數(shù)目過多,導(dǎo)致全局 memstore 水位高,memstore 沒辦法到達(dá) flushsize 進(jìn)行 flush,從而全局都 flush 出比較小的文件

等等

有了這個量化分析后,我們能做什么優(yōu)化呢? 這里不深入展開,簡單說幾點已經(jīng)在有贊生產(chǎn)環(huán)境得到驗證具有實效的優(yōu)化點:

業(yè)務(wù)接入初期,協(xié)助業(yè)務(wù)做 Rowkey 的設(shè)計,避免寫入熱點

增加 hbase.hstore.compaction.min,增加每次 Compaction參加的文件數(shù),相當(dāng)于減少了每條數(shù)據(jù)整個生命周期經(jīng)歷過的 Compaction 次數(shù)

根據(jù)業(yè)務(wù)穩(wěn)態(tài)的規(guī)模,做好預(yù)分區(qū),盡量減少 Split 造成的額外開銷

對于讀 RT 不敏感的業(yè)務(wù),可以設(shè)置 hbase.hstore.compaction.max.size 為 4g,盡可能減少過大的文件做 Compaction,因為大文件做 compaction 的 ROI 實在太低

對于沒有多版本并且有 TTL 的數(shù)據(jù),可以關(guān)閉系統(tǒng)的 MajorCompaction 周期,數(shù)據(jù)過期采用文件整體過期的方式,消除 MajorCompaction 的系統(tǒng)開銷

對于吞吐大的場景,用戶在寫入數(shù)據(jù)的時候就對數(shù)據(jù)做壓縮,減小寫路徑造成的網(wǎng)絡(luò)開銷,畢竟 WAL 是不能壓縮的(壓縮功能形同虛設(shè))

調(diào)整 Memstore 的內(nèi)存比例,保證單機上每個 Region 盡可能的分配到 Flushsize 大小的內(nèi)存,盡可能的 flush 大文件,從而減少后續(xù) Compaction 開銷

五. 總結(jié)

到這里,HBase 的寫吞吐場景的資源定量分析和優(yōu)化的介紹就算結(jié)束了,本文基于 HBase1.2.6 版本。 對很多 HBase 的細(xì)節(jié)沒有做展開說明,有些地方因為作者認(rèn)知有限,難免紕漏,歡迎各位同行指出。

最后打個小廣告,有贊大數(shù)據(jù)團(tuán)隊基礎(chǔ)設(shè)施團(tuán)隊,主要負(fù)責(zé)有贊的數(shù)據(jù)平臺(DP), 實時計算(Storm, Spark Streaming, Flink),離線計算(HDFS,YARN,HIVE, SPARK SQL),在線存儲(HBase),實時 OLAP(Druid) 等數(shù)個技術(shù)產(chǎn)品,歡迎感興趣的小伙伴聯(lián)系 hefei@youzan.com

參考文獻(xiàn)

Google BigTable

HBase 官方網(wǎng)站

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/19912.html

相關(guān)文章

  • HBase吞吐場景資源消耗量化分析優(yōu)化

    摘要:通過機制將多個合并成一個以控制每個內(nèi)的的數(shù)目在一定范圍內(nèi),當(dāng)然還有其他的作用,比如數(shù)據(jù)本地化率,多版本數(shù)據(jù)的合并,數(shù)據(jù)刪除標(biāo)記的清理等等,本文不做展開。 一. 概述 HBase 是一個基于 Google BigTable 論文設(shè)計的高可靠性、高性能、可伸縮的分布式存儲系統(tǒng)。 網(wǎng)上關(guān)于 HBase 的文章很多,官方文檔介紹的也比較詳細(xì),本篇文章不介紹HBase基本的細(xì)節(jié)。 本文從 HBa...

    Snailclimb 評論0 收藏0
  • 阿里HBase的數(shù)據(jù)管道設(shè)施實踐與演進(jìn)

    摘要:摘要第九屆中國數(shù)據(jù)庫技術(shù)大會,阿里巴巴技術(shù)專家孟慶義對阿里的數(shù)據(jù)管道設(shè)施實踐與演進(jìn)進(jìn)行了講解。它必須在把風(fēng)險做完,風(fēng)控是根據(jù)長期的歷史信息近期歷史的信息和實時的信息三個方向做綜合考量。 摘要:第九屆中國數(shù)據(jù)庫技術(shù)大會,阿里巴巴技術(shù)專家孟慶義對阿里HBase的數(shù)據(jù)管道設(shè)施實踐與演進(jìn)進(jìn)行了講解。主要從數(shù)據(jù)導(dǎo)入場景、 HBase Bulkload功能、HImporter系統(tǒng)、數(shù)據(jù)導(dǎo)出場景、H...

    LMou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<