HBase操作和性能配置選項(xiàng)

2018-03-28 14:27 更新

調(diào)試HBase服務(wù)器RPC處理

  • 設(shè)置 hbase.regionserver.handler.count(在 hbase-site.xml)為用于并發(fā)的核心 x 軸。
  • 可選地,將調(diào)用隊(duì)列分成單獨(dú)的讀取和寫入隊(duì)列以用于區(qū)分服務(wù)。該參數(shù) hbase.ipc.server.callqueue.handler.factor 指定調(diào)用隊(duì)列的數(shù)量:
    • 0 意味著單個(gè)共享隊(duì)列。
    • 1 意味著每個(gè)處理程序的一個(gè)隊(duì)列。
    • 一個(gè)0和1之間的值,按處理程序的數(shù)量成比例地分配隊(duì)列數(shù)。例如,0.5 的值在每個(gè)處理程序之間共享一個(gè)隊(duì)列。
  • 使用 hbase.ipc.server.callqueue.read.ratio(hbase.ipc.server.callqueue.read.share在0.98中)將調(diào)用隊(duì)列分成讀寫隊(duì)列:
    • 0.5 意味著將有相同數(shù)量的讀寫隊(duì)列。
    • <0.5 表示為讀多于寫。
    • >0.5 表示寫多于讀。
  • 設(shè)置 hbase.ipc.server.callqueue.scan.ratio(HBase 1.0+)將讀取調(diào)用隊(duì)列分為短讀取和長(zhǎng)讀取隊(duì)列:
    • 0.5 意味著將有相同數(shù)量的短讀取和長(zhǎng)讀取隊(duì)列。
    • <0.5表示更多的短讀取隊(duì)列。
    • >0.5表示更多的長(zhǎng)讀取隊(duì)列。

禁用RPC的Nagle

禁用 Nagle 的算法。延遲的 ACKs 可以增加到200毫秒的 RPC 往返時(shí)間。設(shè)置以下參數(shù):

  • 在 Hadoop 的 core-site.xml 中:
    • ipc.server.tcpnodelay = true
    • ipc.client.tcpnodelay = true
  • 在 HBase 的 hbase-site.xml 中:
    • hbase.ipc.client.tcpnodelay = true
    • hbase.ipc.server.tcpnodelay = true

限制服務(wù)器故障影響

盡可能快地檢測(cè)區(qū)域服務(wù)器故障。設(shè)置以下參數(shù):

  • 在 hbase-site.xml 中設(shè)置 zookeeper.session.timeout 為30秒或更短的時(shí)間內(nèi)進(jìn)行故障檢測(cè)(20-30秒是一個(gè)好的開始)。
  • 檢測(cè)并避免不健康或失敗的 HDFS 數(shù)據(jù)節(jié)點(diǎn):in hdfs-site.xml 和 hbase-site.xml 設(shè)置以下參數(shù):
    • dfs.namenode.avoid.read.stale.datanode = true
    • dfs.namenode.avoid.write.stale.datanode = true

針對(duì)低延遲優(yōu)化服務(wù)器端

  • 跳過本地塊的網(wǎng)絡(luò)。在 hbase-site.xml 中,設(shè)置以下參數(shù):
    • dfs.client.read.shortcircuit = true
    • dfs.client.read.shortcircuit.buffer.size = 131072 (重要的是避免 OOME)
  • 確保數(shù)據(jù)局部性。在 hbase-site.xml 中,設(shè)置 hbase.hstore.min.locality.to.skip.major.compact = 0.7(意味著 0.7 <= n <= 1)
  • 確保 DataNode 有足夠的處理程序進(jìn)行塊傳輸。在 hdfs-site.xml 中,設(shè)置以下參數(shù):
    • dfs.datanode.max.xcievers >= 8192
    • dfs.datanode.handler.count = 主軸數(shù)量

JVM調(diào)優(yōu)

調(diào)整JVM GC以獲取低收集延遲

  • 使用 CMS 收集器: -XX:+UseConcMarkSweepGC
  • 保持 eden 空間盡可能小,以減少平均收集時(shí)間。例:-XX:CMSInitiatingOccupancyFraction = 70
  • 優(yōu)化低收集延遲而不是吞吐量: -Xmn512m
  • 并行收集 eden: -XX:+UseParNewGC
  • 避免在壓力下收集: -XX:+UseCMSInitiatingOccupancyOnly
  • 限制每個(gè)請(qǐng)求掃描器的結(jié)果大小,所以一切都適合幸存者空間,但沒有任職期限。在 hbase-site.xml 中,設(shè)置 hbase.client.scanner.max.result.size 為 eden 空間的1/8(使用 - Xmn512m,這里是?51MB)
  • 設(shè)置 max.result.sizex handler.count 小于 survivor 空間

OS級(jí)調(diào)整

  • 關(guān)閉透明的大頁(yè)面(THP):
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
  • 設(shè)置 vm.swappiness = 0
  • 設(shè)置 vm.min_free_kbytes 為至少 1GB(較大內(nèi)存系統(tǒng)為 8GB)
  • 使用 vm.zone_reclaim_mode = 0 禁用 NUMA 區(qū)域回收。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)