hbaseサポート最前線 #hbase_ca

Post on 18-Jul-2015

1.009 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

HBaseサポート最前線HBase徹底入門刊行記念セミナー

Daisuke Kobayashi | Customer Operations Engineer

2© 2014 Cloudera, Inc. All rights reserved.

自己紹介

• 小林大輔

• 2012年入社

• カスタマーオペレーションズエンジニア• いわゆるカスタマーサポート

• 日本国内のすべてのお客様、海外のお客様(24x7)のトラブルシューティングのお手伝い

• 担当製品: HDFS, HBase, Cloudera Manager, Security, Solr etc.

• email: daisuke@cloudera.com

• twitter: d1ce_

3© 2014 Cloudera, Inc. All rights reserved.

今日話すこと

• ClouderaサポートとHBase

• クラスタ構築時の注意点

• HBaseトラブルシューティング例

(特に断りがない限り、CDH5.2.1をベースに話します)

4© 2014 Cloudera and/or its affiliates. All rights reserved.

ClouderaサポートとHBase

5© 2014 Cloudera, Inc. All rights reserved.

2010年からHBaseの製品サポートを開始。トラブルシューティングから機能改善まで多くの対応を行ってきた

HBaseはスケールアウトする。お客様のビジネスの発展により、総サポートノード数も増加中

サポートを購入したお客様の半数以上が利用。国内でも金融、製造業、ゲーム業界のお客様をサポート

HBaseサポートは5年目 総サポートノード数 HBaseの使用率

5年 20000ノード

60%

ClouderaサポートとHBase

6© 2014 Cloudera, Inc. All rights reserved.

CSI

全文検索システム

スタックトレース検索システム

ClouderaサポートとHBase

• Clouderaでは社内サポートシステムにHBaseを採用

参考: https://blog.cloudera.com/blog/2012/12/secrets-of-cloudera-support-the-champagne-strategy/

7© 2014 Cloudera, Inc. All rights reserved.

CSI

全文検索システム

スタックトレース検索システム

ClouderaサポートとHBase

• サポートエンジニアはまずCSIからクラスタの全体像を把握する

8© 2014 Cloudera, Inc. All rights reserved.

CSI

全文検索システム

スタックトレース検索システム

ClouderaサポートとHBase

• 過去事例は調査における貴重な資源

参考: http://blog.cloudera.com/blog/2013/09/secrets-of-cloudera-support-impala-and-search-make-the-customer-experience-even-better/

9© 2014 Cloudera, Inc. All rights reserved.

CSI

全文検索システム

スタックトレース検索システム

ClouderaサポートとHBase

• 類似のスタックトレースを検索できる仕組みもある

参考: http://blog.cloudera.com/blog/2014/02/secrets-of-cloudera-support-inside-our-own-enterprise-data-hub/

10© 2014 Cloudera and/or its affiliates. All rights reserved.

クラスタ構築時の注意点

11© 2014 Cloudera, Inc. All rights reserved.

クラスタ構築時の注意点

• THP(Transparent Huge Page)は無効にする• 有効になっていると深刻なパフォーマンス劣化を招きます [1]

• リージョン数の見積もり、モニタリングは慎重に• リージョンが多すぎるとMTTR (Mean Time to Recovery: 平均修復時間)の増加、パフォーマンス劣化につながります

• HBase徹底入門を読みましょう• 2015/01時点で最新の情報が網羅されている

• 実際の構築経験をベースに執筆されている

[1] http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cdh_admin_performance.htmlを確認

12© 2014 Cloudera, Inc. All rights reserved.

適切なリージョン数の見積もり

リージョンサーバヒープサイズ 10GB

フラッシュサイズ (hbase.hregion.memstore.flush.size) 128MB

Memstoreサイズ (hbase.regionserver.global.memstore.upperLimit) 0.4 4GB

Memstoreサイズ (4GB) / フラッシュサイズ (128MB)

• Memstoreサイズと書き込み量から見積もる

13© 2014 Cloudera, Inc. All rights reserved.

適切なリージョン数の見積もり

リージョンサーバヒープサイズ 10GB

フラッシュサイズ (hbase.hregion.memstore.flush.size) 128MB

Memstoreサイズ (hbase.regionserver.global.memstore.upperLimit) 0.4 4GB

Memstoreサイズ (4GB) / フラッシュサイズ (128MB)

= サーバあたりのリージョン数 (32)

• Memstoreサイズと書き込み量から見積もる

14© 2014 Cloudera, Inc. All rights reserved.

適切なリージョン数の見積もり

((全データ量 * 1024) / リージョンサイズ (10GB)) / リージョンサーバ数 (100台)

全データ量 50TB

リージョンサイズ (hbase.hregion.max.filesize) 10GB

リージョンサーバ数 100

• 全データ量とリージョンサーバ数から見積もる

15© 2014 Cloudera, Inc. All rights reserved.

適切なリージョン数の見積もり

((全データ量 * 1024) / リージョンサイズ (10GB)) / リージョンサーバ数 (100台)

= サーバあたりのリージョン数 (102)

全データ量 50TB

リージョンサイズ (hbase.hregion.max.filesize) 10GB

リージョンサーバ数 100

• 全データ量とリージョンサーバ数から見積もる

16© 2014 Cloudera, Inc. All rights reserved.

リージョンスプリットポリシー

• ConstantSizeRegionSplitPolicy

• CDH4.1 (0.92) までのスプリットポリシー

• 一定のサイズに達したリージョンを分割

• IncreasingToUpperBoundRegionSplitPolicy

• CDH4.2 (0.94) 以降でデフォルトのスプリットポリシー

• 以下の条件を比較し、小さい方を上限として採用1. リージョン数 (同一サーバ上、同一テーブル内) ^ 3 ([2]) * フラッシュサイズ * 2

2. hbase.hregion.max.filesizeの設定値

• リージョンをクラスタ全体へ分散し、パフォーマンスの向上を図ることが目的

• ローリング再起動 (デコミッション)時にリージョン数が増加する場合あり [3]

[2] CDH5.0以前、5.1以降で算出式が変更されているので注意。詳しくはHBASE-10501[3] 一時的にリージョン数が減ることが原因。詳しくはHBASE-12451

17© 2014 Cloudera, Inc. All rights reserved.

リージョンスプリットポリシー

• ConstantSizeRegionSplitPolicy

• CDH4.1 (0.92) までのスプリットポリシー

• 一定のサイズに達したリージョンを分割

• IncreasingToUpperBoundRegionSplitPolicy

• CDH4.2 (0.94) 以降でデフォルトのスプリットポリシー

• 以下の条件を比較し、小さい方を上限として採用1. リージョン数 (同一サーバ上、同一テーブル内) ^ 3 ([2]) * フラッシュサイズ * 2

2. hbase.hregion.max.filesizeの設定値

• リージョンをクラスタ全体へ分散し、パフォーマンスの向上を図ることが目的

• ローリング再起動 (デコミッション)時にリージョン数が増加する場合あり [3]

[2] CDH5.0以前、5.1以降で算出式が変更されているので注意。詳しくはHBASE-10501[3] 一時的にリージョン数が減ることが原因。詳しくはHBASE-12451

18© 2014 Cloudera, Inc. All rights reserved.

リージョンスプリットポリシー

• ConstantSizeRegionSplitPolicy

• CDH4.1 (0.92) までのスプリットポリシー

• 一定のサイズに達したリージョンを分割

• IncreasingToUpperBoundRegionSplitPolicy

• CDH4.2 (0.94) 以降でデフォルトのスプリットポリシー

• 以下の条件を比較し、小さい方を上限として採用1. リージョン数 (同一サーバ上、同一テーブル内) ^ 3 ([2]) * フラッシュサイズ * 2

2. hbase.hregion.max.filesizeの設定値

• リージョンをクラスタ全体へ分散し、パフォーマンスの向上を図ることが目的

• ローリング再起動 (デコミッション)時にリージョン数が増加する場合あり [3]

[2] CDH5.0以前、5.1以降で算出式が変更されているので注意。詳しくはHBASE-10501[3] 一時的にリージョン数が減ることが原因。詳しくはHBASE-12451

19© 2014 Cloudera and/or its affiliates. All rights reserved.

HBaseクラスタのトラブルシューティング

20© 2014 Cloudera, Inc. All rights reserved.

トラブルシューティング

• HBaseクラスタにおけるトラブルの種類1. リージョン不整合処理中に突然サーバの電源が落ち、メタ情報に食い違いが生じたなど

2. 高負荷時のGC特に書き込み過多の場合はGCチューニングが必要となる

3. ホットスポット

21© 2014 Cloudera, Inc. All rights reserved.

トラブルシューティング

• HBaseクラスタにおけるトラブルの種類1. リージョン不整合処理中に突然サーバの電源が落ち、メタ情報に食い違いが生じたなど

2. 高負荷時のGC特に書き込み過多の場合はGCチューニングが必要となる

3. ホットスポット

22© 2014 Cloudera, Inc. All rights reserved.

トラブルシューティング(1)

• リージョン不整合の検知

• hbckユーティリティ [1]• hbck -details > /tmp/hbase-`date`.txt

• 主に以下の検査を行う1. Region Consistency (一貫性)

• META、HDFS内の.regioninfo、実際のリージョンアサイン状況がすべて合致しているか

2. Integrity (整合性)

• 複数のリージョンでキーの範囲が重複していないか

• キーの順序が後退していないか

• リージョン間に穴が空いていないか

• 最後に表示される不整合件数が0であればOK0 inconsistencies detected

[1] 詳細は http://hbase.apache.org/book.html#hbck.in.depth

23© 2014 Cloudera, Inc. All rights reserved.

トラブルシューティング(1)

• まずはRegion Consistencyの確認、修復を行う

• 不整合の例1. Region X, key=Y, not on HDFS or in hbase:meta but deployed on Z

キーYで始まるリージョンXがHDFS/META上に存在しないにも関わらずリージョンサーバZにアサインされている

2. Region X on HDFS, but not listed in hbase:meta or deployed on any

region server

リージョンXはHDFSに存在するが、METAになくどのリージョンサーバにもアサインされていない

3. Region X should not be deployed according to META, but is deployed

on Z

METAの情報によるとリージョンXはアサインされるべきではないが、リージョンサーバZにデプロイされている

24© 2014 Cloudera, Inc. All rights reserved.

トラブルシューティング(1)

• 修復コマンド• hbck –fixAssignments -fixMeta

• 実行前に直前の状況をファイルに出力しておくこと

• 実行後は再度 hbck -details を実行してアサインの不整合が修復されているか確認する

注意: 0.90時代の -fix オプションは -fixAssignmentsに置き換えられました。後方互換性のためオプションとしては残っていますが、後者を利用すること。

25© 2014 Cloudera, Inc. All rights reserved.

トラブルシューティング(1)

• Integrityの確認、修復

• 不整合の例

ERROR ... Multiple regions have the same startkey

複数のリージョンが同じ開始キーを持っている

• 修復コマンド• hbase hbck -repairHoles

注意: hbckには他にもオプションがありますが、HDFSの内容を操作するオプションも含まれます。動作を把握しない状況で使用するのは危険です

26© 2014 Cloudera, Inc. All rights reserved.

トラブルシューティング(2)

• Garbage Collection

• リージョンサーバは高負荷時にGCの影響を受けやすい

• GCによる影響を疑うときのキーワード: slept

• 詳細発生時刻付近に以下のメッセージが出力されていないか確認する1. We slept 67160ms instead of 3000ms, this is likely due to a long garbage collecting pause

and it's usually bad

2. Detected pause in JVM or host machine (eg GC): pause of approximately 62182msGC pool 'ParNew' had collection(s): count=3 time=69msGC pool 'ConcurrentMarkSweep' had collection(s): count=2 time=62425ms

• old世代のGCに60秒以上かかっている

• GCログから詳細を確認する

27© 2014 Cloudera, Inc. All rights reserved.

トラブルシューティング(2)

• 下記オプションを追加することでより詳細なログを出力-XX:+PrintPromotionFailure (promotion failedの詳細出力)-XX:PrintFLSStatistics=1 (連続領域の最大サイズなど詳細を出力)-XX:+PrintTenuringDistribution (new領域のオブジェクトの遷移を出力)

• 典型的なFull GC発生のシナリオ• promotion failed

old領域に十分な連続領域が確保できず、new領域からのオブジェクトの移動に失敗した(断片化が原因)

• concurrent mode failureold世代の回収が間に合わず、空き領域が不足していると判断された

参考資料: http://shop.oreilly.com/product/0636920028499.dohttp://blog.cloudera.com/blog/2011/02/avoiding-full-gcs-in-hbase-with-memstore-local-allocation-buffers-part-1/

28© 2014 Cloudera, Inc. All rights reserved.

promotion failed

new generation

old generation

29© 2014 Cloudera, Inc. All rights reserved.

promotion failed

new generation

old generation

new世代のGC (Stop-the-World)

30© 2014 Cloudera, Inc. All rights reserved.

promotion failed

new generation

old generation

new世代のGC後

31© 2014 Cloudera, Inc. All rights reserved.

promotion failed

new generation

old generation

new世代のGC (Stop-the-World)、old世代のGC (アプリケーションと並行)を繰り返す

32© 2014 Cloudera, Inc. All rights reserved.

promotion failed

new generation

old generation

new世代のGC (Stop-the-World)、old世代のGC (アプリケーションと並行)を繰り返す

33© 2014 Cloudera, Inc. All rights reserved.

promotion failed

書き込み負荷が高まり、Memstoreのフラッシュが多発

34© 2014 Cloudera, Inc. All rights reserved.

promotion failed

オブジェクトの移動 (promotion) に失敗 (failed)

35© 2014 Cloudera, Inc. All rights reserved.

promotion failed

• CMSはオブジェクトのマージ(コンパクション)

を行わないため、断片化が発生する• new世代からのオブジェクトを配置できる連続領域がなくなる

• 全アプリケーションスレッドを止めFull GCが発生する

36© 2014 Cloudera, Inc. All rights reserved.

promotion failed対策

• グラフ化• x軸: 時刻

• y軸: GB

• 赤: 空き領域(free space)

• 青: 最大連続領域(max chunk)

• old世代の空き領域は6GB程度確保• 連続領域(max chunk)は1GB強で推移

37© 2014 Cloudera, Inc. All rights reserved.

promotion failed対策

• グラフ化• x軸: 時刻

• y軸: GB

• 赤: 空き領域(free space)

• 青: 最大連続領域(max chunk)

• max chunkが急減したタイミングでpromotion

failedが発生し、リージョンサーバが停止

38© 2014 Cloudera, Inc. All rights reserved.

promotion failed対策

1. GCログからmax chunkサイズの推移状況を確認

2. 障害発生時に残っていたchunk分では足りなかった• 今回のケースでは1GBほど

3. ヒープサイズを1GB-2GB増やし、再度経過観察を行う

39© 2014 Cloudera, Inc. All rights reserved.

Cloudera Managerのチャート機能

40© 2014 Cloudera, Inc. All rights reserved.

まとめ

41© 2014 Cloudera, Inc. All rights reserved.

まとめ祝!

42© 2014 Cloudera, Inc. All rights reserved.

Thank you

top related