1. 程式人生 > >HBase 線上問題分析小記

HBase 線上問題分析小記

在7月初Tcon分散式系統測試實踐的分享中,筆者提到了測試人員參與線上問題分析的必要性:1、測試工作中的問題定位提供了大量經驗,可以直接應用於線上。2、快速的解決問題可以避免大故障的發生。3、從線上的問題可以幫助我們準確抓住測試的重點和不足。因此在日常的線上維護工作中,積累和很多HBase的問題分析經驗,這裡於大家分享一下,如有錯誤和不足請指出。

問題分析的主要手段

1、監控系統:首先用於判斷系統各項指標是否正常,明確系統目前狀況
2、服務端日誌:檢視例如region移動軌跡,發生了什麼動作,服務端接受處理了哪些客戶端請求。
3、gc日誌:gc情況是否正常
4、作業系統日誌和命令:作業系統層面、硬體是否故障,當前狀況如何
5、btrace:實時跟蹤目前服務端的請求和處理情況
6、運維工具:通過內置於系統中的功能,檢視伺服器實時處理狀況

其實以上手段,大部分系統都具備,不過各有各的用法,下面我會通過常見的問題來梳理這6大手段。

常見問題1:個別請求為什麼很慢?

個別請求慢是使用者遇到最多的問題,首先需要明確是客戶端還是服務端原因,進而分析服務端狀況以及捕獲這些請求來明確定位。

1、通過客戶端日誌來初步分析下慢請求的規律,嘗試在客戶端確定請求的rowkey和操作型別。

2、確定是不是一段時間內集中出現慢請求,如果是那麼可以參考常見問題2來解決。

3、檢視服務端監控,觀察響應時間是否平穩,maxResponseTime是否出現峰值。如果存在,那麼可以初步確定是服務端問題。

4、客戶端分析無效,可以通過運維工具在服務端捕獲慢請求的rowkey和操作型別。

5、確定rowkey對應的region,初步檢視是否存在資料表引數配置不合理(例如version設定過多、blockcache、bloomfilter型別不正確)、storefile過多、命中率過低等問題。

6、嘗試重試這些請求或者直接分析hfile來檢視返回結果是否過大,請求是否耗費資源過多。

7、檢視服務端關於hdfs的監控和日誌,以及datanode日誌,來分析是否存在hdfs塊讀取慢或者磁碟故障。

常見問題2:客戶端讀寫請求為什麼大量出錯?

讀寫請求大量出錯的現象主要有兩類:1、大量出現服務端exception 2、大量超時。其中第一種有異常資訊較好判斷問題所在。

1、大量服務端exception一般是region不線上導致的,可能是region在split但是時間很長超過預期,或是meta資料錯誤導致客戶端獲取region location錯誤。以上現象均可通過日誌來定位。

2、遇到大量超時,首先應該排除服務端是否出現了fullgc或者ygc時間過長。前者可能由於記憶體碎片、cms gc速度來不及導致,後者一般是由於系統使用了swap記憶體。

3、通過系統命令和日誌來檢視是否有機器load過高,磁碟壓力過大,磁碟故障。

4、檢視監控是否出現callqueue積壓,請求無法得到及時處理,進一步通過call檢視工具或者jstack可以檢視正在處理的call和程序堆疊資訊。

5、通過datanode日誌和hbase訪問dfs的時間,來判斷問題是否在hdfs層。

6、檢視監控判斷是否出現blocking update,memstore是否已接近系統設定的上限。

常見問題3:系統為什麼越來越慢了?

系統原來挺快的,為什麼越來越慢?多數是不合理的服務端配置導致的,可以通過以下幾個方面來分析。

1、磁碟讀寫和系統load是不是比以前高了,初步判斷導致系統變慢的原因。

2、如果磁碟讀寫加劇,重點檢視flush是否過小,compact是否過頻,尤其是major compact是否有必要,從測試結果來看compact產生的磁碟io對系統性能影響很大。

3、單個region的storefile個數是否有成倍提高

4、命中率是否有下降趨勢

5、regionserver是否存在region分配不均衡導致的讀寫集中,或者讀寫handler的競爭

6、datablock的本地化率是否出現下降

7、是否存在datanode執行不正常,可以通過監控檢視是否有個別機器讀取block時間明顯偏高

常見問題4:資料為什麼沒了,明明寫進去過?

資料丟失也是HBase的常見bug,分為臨時性和永久性兩類。臨時性的丟失往往是由於hbase本身的正確性問題導致瞬間讀取資料錯誤。永久性丟失一般是日誌恢復bug或者region的二次分配。

1、首先可以通過hbck或者master日誌排查丟失的資料所在region是否發生過二次分配

2、叢集中的regionserver是否出現過abort,日誌是否正確恢復。

3、掃描storefile確定目前資料情況

4、掃描logs或者oldlogs中的檔案來確定是否寫入過這些資料,以及寫入資料的時間,配合rs的日誌來確定當時server的行為

5、根據寫入資料的時間,確定regionserver是否正確完成了flush並且將資料寫入磁碟

常見問題5:為什麼有伺服器程序掛了?

regionserver發生abort的場景很多,除了系統bug引起的以外,線上遇到最多的就是fullgc引起的zk節點超時和檔案系統異常。

1、檢視regionserver日誌查詢FATAL異常,確定異常型別

2、檢視gc日誌確定是否發生fullgc或者ygc時間過長

3、如果沒有徵兆,日誌突然中斷,首先需要考慮是否發生了OOM(0.94版本會直接kill -9)。

4、可以通過系統記憶體監控判斷是否出現被佔滿的情況

5、檢視datanode是否出現異常日誌,regionserver可能由於roll log或者flush時的檔案系統異常導致abort

6、排除人為呼叫stop的情況

HBase健康體檢

一個叢集似乎否健康,大體可以從以下幾個方面來判斷

1、單region的storefile數量是否合理

2、memstore是否得到合理的利用,此項指標與hlog的數量和大小相關

3、compact和flush的流量比值是否合理,如果每天僅flush 1G卻要compact幾十上百G就是明顯的浪費

4、split似乎否過頻,能否採取pre-sharding的方式來預分配region

5、叢集的region是否過多,zk在預設引數下無法支撐12w以上的region個數,並且region過多也會影響regionserver failover的時間

6、讀寫相應時間是否合理,datablock的讀取延時是否符合預期

7、flush佇列、callqueue長度、compact佇列是否符合預期。前兩者的積壓都會造成系統不穩定。

8、failedRequest和maxResponseTime

9、gc狀況,過長的ygc和過頻的cms都需要警惕

運維工具

HBase官方版本的可運維性的確很差,為了能最大限度的保證線上系統安全,快速定位故障原因,阿里做了很多建設性的工作。

1、建立了完整的監控體系,根據日常測試和線上執行經驗,加入了很多監控點。

2、監控的粒度達到region級別

3、call dump和線上慢請求追蹤功能

4、btrace指令碼體系,出現問題直接執行檢視程式內部資訊

5、日誌收集和報警

6、線上表維護工具和storefile、logs分析工具

相關推薦

HBase 線上問題分析小記

在7月初Tcon分散式系統測試實踐的分享中,筆者提到了測試人員參與線上問題分析的必要性:1、測試工作中的問題定位提供了大量經驗,可以直接應用於線上。2、快速的解決問題可以避免大故障的發生。3、從線上的問題可以幫助我們準確抓住測試的重點和不足。因此在日常的線上維護工作中,積

HBase ProcedureV2 分析

集群 新建 需要 修復 3.3 hand png 流程 exceptio Procedure V2, 是hbase1.1版本引入的一套fault-tolerant的執行multi-steps-job的框架, 目前主要用在Master中, 比如創建表,刪除表等操作

大資料線上分析處理和常用工具

大資料線上分析處理的特點 . 資料來源源不斷的到來; 資料需要儘快的得到處理,不能產生積壓; 處理之後的資料量依然巨大,仍然後TB級甚至PB級的資料量; 處理的結果能夠儘快的展現; 以上四個特點可以總結為資料的收集->資料的傳輸->資料的處理-&g

openTSDB詳解之底層HBase分析

openTSDB詳解之底層HBase表分析 【Updating】 檢視hbase的表負載情況 hbase(main):001:0> status 1 active master, 0 backup masters, 3 servers, 0 dead, 2.3

LDA EffectSize線上分析流程

LDA EffectSize 組間群落差異分析 分析網站: http://huttenhower.sph.harvard.edu/galaxy/ 線上分析流程 一、上傳資料 資料格式 二、開始Lefse分析

HBase原始碼分析之HRegion上compact流程分析(二)

  2016年03月03日 21:38:04 辰辰爸的技術部落格 閱讀數:2767 版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/lipeng_bigdata/article/details/50791205

HBase原始碼分析 -- HBase Region 拆分(split)

程式碼版本:hbase-1.2.6 工程:hbase-server 類:org.apache.hadoop.hbase.regionserver.HRegion 需要解決的問題: 1、什麼時候觸發拆分? 2、拆分的策略是什麼? 1、判斷是否需要切分 方法: check

HBase原始碼分析之HRegionServer上compact流程分析

        前面三篇文章中,我們詳細敘述了compact流程是如何在HRegion上進行的,瞭解了它的很多細節方面的問題。但是,這個compact在HRegionServer上是如何進行的?合併時檔案是如何選擇的呢?在這篇文章中,你將找到答案!         首先,在

HBase Split分析

 HBase Split分析 HBase split概述 HBasesplit是HBase根據一定的觸發條件和一定的分裂策略將HBase的一個region進行分裂成兩個子region並對父region進行清除處理的過程。Region是HBase中一個非常核心的組織

hbase-來源分析

隨著網際網路的發展,網路服務領域得到了高速發展。同時資料資產也是爆炸性的增長,這是資料的型別主要是非結構化和半結構化為主,在大資料時代如何低成本高效率的處理這些PB甚至EB量級的資料就成為了一個很大的挑戰 於是,Google公司就提出了MapReduce程式設

常見HBase故障分析和解決方法

1. java.net.SocketException: Too many open files 問題原因: 問題現象:所有節點region server程序掛掉,hbase不可訪問,檢視日誌有如下資訊 tail hbase-hbase-regionserver-ip-10

阿里重磅開源線上分析診斷工具Arthas(阿爾薩斯)

github地址: Arthas English version goes here. Arthas 是Alibaba開源的Java診斷工具,深受開發者喜愛。 當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決: 這個類從哪個 jar 包載入的?為什麼

Hadoop-HBASE案例分析-Hadoop學習筆記<二>

HBase在實際問題中的應用: 當資料需要隨機讀寫應用,或者高併發操作(大資料多次操作),或者當資料結構簡單,但是量大(非關係型需要大量應用join操作) HBase對關係型查詢,如join等比較難操作 關鍵要設計Rowkey,可加快查詢 常用語言有Java, thrift引用其他語言操作 在rowk

hbase 原始碼分析(6)get 過程 詳解

上一個章節將getregionLocator的客戶端分析完了,服務端就是一個scan方法,這個等到分析SCAN的時候再做說明。 這一章節將分析GET過程。 **GET過程, 1)找到zk,拿到MATA裡的RegionService地址。 2)訪問第一

Hbase 原始碼分析之 Regionserver上的 Get 全流程

當regionserver收到來自客戶端的Get請求時,呼叫介面 public Result get(byte[] regionName, Get get) { ... HRegion region = getRegion(regionName); return regio

hbase 原始碼分析(20) 總結

放在最後的話 第一次寫這麼長時間的部落格。有點辛苦,主要是白天上班還不能寫。晚上會寫到一兩點。還好沒有放棄,hbase的基本寫完了。之後會不斷補充,完善。 第一次寫,很多地方可能沒有考慮清楚。 第一次寫,帶著學習的目的。不好請大家多擔待。 第一次寫,學到

hbase 原始碼分析 (15)compact 過程

上一個章節分析了spit過程。當時遺留了compact問題沒有分析。這個章節將重點分析一下。 compact流程:  這個流程沒有寫完,涉及都行太多了,都沒有心情寫了。先留著吧, 入口:HStore.java 結束flush之後,會做這樣一個判斷。 p

HBase原始碼分析2 – RPC機制:客戶端

先澄清一些本文中術語的涵意 客戶端 – 指的是HBase client API.提供了從使用者程式連線到HBase後臺伺服器即Master server及Region server的功能 服務端 – 即指的是HBase的Master server 及 Region serv

HBase shell命令小記

最近,在用Java api讀寫Hbase資料庫,時常需要用Hbase shell在命令列校驗結果是否準確,在這裡簡單記錄下一些常用的Hbase shell命令,以作備忘。 (1)建立表  create ‘tableName’,‘familyName1’,...,'famil

HBase線上系統性能優化

一、手工進行Major Compaction 實時系統最好關閉HBase的自動Major Compaction,HBase在進行Major Compaction時會合並所有的儲存檔案,整個Region都不可用。HBase預設大約每天執行一次Compaction,最好把