hbaseサポート最前線 #hbase_ca

42
HBaseサポート最前線 HBase徹底入門刊行記念セミナー Daisuke Kobayashi | Customer Operations Engineer

Upload: cloudera-japan

Post on 18-Jul-2015

1.009 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: HBaseサポート最前線 #hbase_ca

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

Daisuke Kobayashi | Customer Operations Engineer

Page 2: HBaseサポート最前線 #hbase_ca

2© 2014 Cloudera, Inc. All rights reserved.

自己紹介

• 小林大輔

• 2012年入社

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

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

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

• email: [email protected]

• twitter: d1ce_

Page 3: HBaseサポート最前線 #hbase_ca

3© 2014 Cloudera, Inc. All rights reserved.

今日話すこと

• ClouderaサポートとHBase

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

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

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

Page 4: HBaseサポート最前線 #hbase_ca

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

ClouderaサポートとHBase

Page 5: HBaseサポート最前線 #hbase_ca

5© 2014 Cloudera, Inc. All rights reserved.

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

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

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

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

5年 20000ノード

60%

ClouderaサポートとHBase

Page 6: HBaseサポート最前線 #hbase_ca

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/

Page 7: HBaseサポート最前線 #hbase_ca

7© 2014 Cloudera, Inc. All rights reserved.

CSI

全文検索システム

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

ClouderaサポートとHBase

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

Page 8: HBaseサポート最前線 #hbase_ca

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/

Page 9: HBaseサポート最前線 #hbase_ca

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/

Page 10: HBaseサポート最前線 #hbase_ca

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

クラスタ構築時の注意点

Page 11: HBaseサポート最前線 #hbase_ca

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を確認

Page 12: HBaseサポート最前線 #hbase_ca

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サイズと書き込み量から見積もる

Page 13: HBaseサポート最前線 #hbase_ca

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サイズと書き込み量から見積もる

Page 14: HBaseサポート最前線 #hbase_ca

14© 2014 Cloudera, Inc. All rights reserved.

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

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

全データ量 50TB

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

リージョンサーバ数 100

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

Page 15: HBaseサポート最前線 #hbase_ca

15© 2014 Cloudera, Inc. All rights reserved.

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

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

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

全データ量 50TB

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

リージョンサーバ数 100

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

Page 16: HBaseサポート最前線 #hbase_ca

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

Page 17: HBaseサポート最前線 #hbase_ca

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

Page 18: HBaseサポート最前線 #hbase_ca

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

Page 19: HBaseサポート最前線 #hbase_ca

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

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

Page 20: HBaseサポート最前線 #hbase_ca

20© 2014 Cloudera, Inc. All rights reserved.

トラブルシューティング

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

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

3. ホットスポット

Page 21: HBaseサポート最前線 #hbase_ca

21© 2014 Cloudera, Inc. All rights reserved.

トラブルシューティング

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

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

3. ホットスポット

Page 22: HBaseサポート最前線 #hbase_ca

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

Page 23: HBaseサポート最前線 #hbase_ca

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にデプロイされている

Page 24: HBaseサポート最前線 #hbase_ca

24© 2014 Cloudera, Inc. All rights reserved.

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

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

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

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

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

Page 25: HBaseサポート最前線 #hbase_ca

25© 2014 Cloudera, Inc. All rights reserved.

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

• Integrityの確認、修復

• 不整合の例

ERROR ... Multiple regions have the same startkey

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

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

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

Page 26: HBaseサポート最前線 #hbase_ca

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ログから詳細を確認する

Page 27: HBaseサポート最前線 #hbase_ca

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/

Page 28: HBaseサポート最前線 #hbase_ca

28© 2014 Cloudera, Inc. All rights reserved.

promotion failed

new generation

old generation

Page 29: HBaseサポート最前線 #hbase_ca

29© 2014 Cloudera, Inc. All rights reserved.

promotion failed

new generation

old generation

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

Page 30: HBaseサポート最前線 #hbase_ca

30© 2014 Cloudera, Inc. All rights reserved.

promotion failed

new generation

old generation

new世代のGC後

Page 31: HBaseサポート最前線 #hbase_ca

31© 2014 Cloudera, Inc. All rights reserved.

promotion failed

new generation

old generation

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

Page 32: HBaseサポート最前線 #hbase_ca

32© 2014 Cloudera, Inc. All rights reserved.

promotion failed

new generation

old generation

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

Page 33: HBaseサポート最前線 #hbase_ca

33© 2014 Cloudera, Inc. All rights reserved.

promotion failed

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

Page 34: HBaseサポート最前線 #hbase_ca

34© 2014 Cloudera, Inc. All rights reserved.

promotion failed

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

Page 35: HBaseサポート最前線 #hbase_ca

35© 2014 Cloudera, Inc. All rights reserved.

promotion failed

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

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

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

Page 36: HBaseサポート最前線 #hbase_ca

36© 2014 Cloudera, Inc. All rights reserved.

promotion failed対策

• グラフ化• x軸: 時刻

• y軸: GB

• 赤: 空き領域(free space)

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

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

Page 37: HBaseサポート最前線 #hbase_ca

37© 2014 Cloudera, Inc. All rights reserved.

promotion failed対策

• グラフ化• x軸: 時刻

• y軸: GB

• 赤: 空き領域(free space)

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

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

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

Page 38: HBaseサポート最前線 #hbase_ca

38© 2014 Cloudera, Inc. All rights reserved.

promotion failed対策

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

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

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

Page 39: HBaseサポート最前線 #hbase_ca

39© 2014 Cloudera, Inc. All rights reserved.

Cloudera Managerのチャート機能

Page 40: HBaseサポート最前線 #hbase_ca

40© 2014 Cloudera, Inc. All rights reserved.

まとめ

Page 41: HBaseサポート最前線 #hbase_ca

41© 2014 Cloudera, Inc. All rights reserved.

まとめ祝!

Page 42: HBaseサポート最前線 #hbase_ca

42© 2014 Cloudera, Inc. All rights reserved.

Thank you