您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

HBase列族設(shè)計(jì)優(yōu)化實(shí)踐分析

大?。?/span>0.7 MB 人氣: 2017-10-10 需要積分:1
 現(xiàn)在,網(wǎng)易視頻云與大家分享一下HBase最佳實(shí)踐-列族設(shè)計(jì)優(yōu)化。
  隨著大數(shù)據(jù)的越來越普及,HBase也變得越來越流行。會(huì)用HBase現(xiàn)在已經(jīng)變的并不困難,然而,怎么把它用的更好卻并不簡(jiǎn)單。那怎么定義‘用的好’呢?很簡(jiǎn)單,在保證系統(tǒng)穩(wěn)定性、可用性的基礎(chǔ)上能夠用最少的系統(tǒng)資源(CPU,IO等)獲得最好的性能(吞吐量,讀寫延遲)就是’用的好’。HBase是一個(gè)龐大的體系,涉及到很多方面,很多因素都會(huì)影響到系統(tǒng)性能和系統(tǒng)資源使用率,根據(jù)場(chǎng)景對(duì)這些配置進(jìn)行優(yōu)化會(huì)很大程度上提升系統(tǒng)的性能。筆者總結(jié)至少有如下幾個(gè)方面:HDFS相關(guān)配置優(yōu)化,HBase服務(wù)器端優(yōu)化(GC優(yōu)化、Compaction優(yōu)化、硬件配置優(yōu)化),列族設(shè)計(jì)優(yōu)化,客戶端優(yōu)化等,其中客戶端優(yōu)化在前面已經(jīng)通過超時(shí)機(jī)制、重試機(jī)制講過,后面筆者會(huì)繼續(xù)分別介紹其他三個(gè)優(yōu)化重點(diǎn)。
  本節(jié)重點(diǎn)介紹列族設(shè)計(jì)優(yōu)化,HBase中基本屬性都是以列族為單位進(jìn)行設(shè)置的,如下示例,用戶創(chuàng)建了一張稱為‘ NewsClickFeedback’的表,表中只有一個(gè)列族’Toutiao’,緊接著的屬性都是對(duì)此列族進(jìn)行的設(shè)置。這些屬性基本都會(huì)或多或少地影響該表的讀寫性能,但有些屬性用戶只需要理解其意義就知道如何設(shè)置,而有些屬性卻需要根據(jù)場(chǎng)景、根據(jù)業(yè)務(wù)來設(shè)置,比如BLOCKSIZE屬性在不同場(chǎng)景下應(yīng)該如何設(shè)置?還有COMPRESSION屬性和DATA_BLOCK_ENCODING屬性,兩者都可以提供壓縮功能,那到底應(yīng)該選擇哪個(gè),還是兩個(gè)都需要進(jìn)行設(shè)置?本文就重點(diǎn)介紹這三個(gè)屬性的設(shè)計(jì)原則。
  HBase列族設(shè)計(jì)優(yōu)化實(shí)踐分析
  BlockSize設(shè)置
  塊大小是HBase的一個(gè)重要配置選項(xiàng),默認(rèn)塊大小為64M。對(duì)于不同的業(yè)務(wù)數(shù)據(jù),塊大小的合理設(shè)置對(duì)讀寫性能有很大的影響。而對(duì)塊大小的調(diào)整,主要取決于兩點(diǎn):
  1. 用戶平均讀取數(shù)據(jù)的大小。理論上講,如果用戶平均讀取數(shù)據(jù)的大小較小,建議將塊大小設(shè)置較小,這樣可以使得內(nèi)存可以緩存更多block,讀性能自然會(huì)更好。相反,建議將塊大小設(shè)置較大。
  為了更好說明上述原理,筆者使用YCSB做了一個(gè)測(cè)試,分別在Get、Scan兩種場(chǎng)景下測(cè)試不同BlockSize大?。?6K,64K,128K)對(duì)性能的影響。測(cè)試結(jié)果分別如下面兩圖:
  HBase列族設(shè)計(jì)優(yōu)化實(shí)踐分析
  隨著BlockSize的增大,系統(tǒng)隨機(jī)讀的吞吐量不斷降低,延遲不斷增大。64K大小比16K大小的吞吐量大約降低13%,延遲增大13%。同樣的,128K大小比64K大小的吞吐量降低約22%,延遲增大27%。因此,對(duì)于以隨機(jī)讀為主的業(yè)務(wù),可以適當(dāng)調(diào)低BlockSize的大小,以獲得更好的讀性能。
  HBase列族設(shè)計(jì)優(yōu)化實(shí)踐分析
  隨著BlockSize增大,scan的吞吐量逐漸增大,延遲不斷降低。64K大小BlockSize比16K大小的吞吐量增加了33%,延遲降低了24%;128K大小比64K大小吞吐量增加了7%,延遲降低了7%;因此,對(duì)于以scan為主的業(yè)務(wù),可以適當(dāng)增大BlockSize的大小,以獲得更好的讀性能。
  可見,如果業(yè)務(wù)請(qǐng)求以Get請(qǐng)求為主,可以考慮將塊大小設(shè)置較小;如果以Scan請(qǐng)求為主,可以將塊大小調(diào)大;默認(rèn)的64M塊大小是在Scan和Get之間取得的一個(gè)平衡。

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?