調(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)整
更多建議: