• Like
HBaseを用いたグラフDB「Hornet」
Upcoming SlideShare
Loading in...5
×

HBaseを用いたグラフDB「Hornet」

  • 2,594 views
Uploaded on

Hadoop Conference Japan 2013 WinterのLTで発表した資料です。

Hadoop Conference Japan 2013 WinterのLTで発表した資料です。

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,594
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
32
Comments
0
Likes
21

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. HBaseを用いたグラフDB「Hornet」 株式会社サイバーエージェント  アメーバ事業本部  Ameba  Technology  Laboratory  鈴木 俊裕
  • 2. 自己紹介 •  鈴木 俊裕  •  株式会社サイバーエージェント   –  アメーバ事業本部   –  Ameba  Technology  Laboratory  •  Hadoop/Hiveを用いたデータ解析基盤の運用、 HBaseを用いたグラフDB「Hornet」の運用  •  Twi<er  @brfrn169  
  • 3. 話すこと •  HBaseを用いたグラフDB「Hornet」について   –  設計について   –  運用について  •  HBaseを知っている人向けです  
  • 4. Hornetについて
  • 5. 背景 •  昨年、「Ameba」のスマートフォン向けプラット フォームをリリース  
  • 6. 背景 •  デカグラフ構想   –  各サービスのユーザー層を「ミニグラフ」と位置づ け、1つの巨大なスマートフォン向けサービス(デ カグラフ)を構築するという構想   デカグラフ ミニグラフ ミニグラフ ミニグラフ ミニグラフ ミニグラフ ミニグラフ
  • 7. 背景 •  そこで、ユーザのグラフ構造を保持するデー タベースが必要   –  データが大量になるのでスケールするデータベー ス     HBase
  • 8. なぜHBaseか •  スケールする  •  書き込みが速い、そこそこの読み込み速度  •  レンジスキャン  •  CAS操作、インクリメント操作  •  解析基盤にHadoopを用いていたため、ノウハ ウがあった
  • 9. 設計について
  • 10. Hornetのデータモデル リレーションシップ ノード •  プロパティグラフ リレーションシップのtype ノードID 2 follow 1 date 2013-­‐01-­‐01 Name Ichiro favorite true Age 29 Name Toshihiro follow age 29 date 2013-­‐01-­‐10 ノードの   favorite false 3 プロパティ リレーションシップの   Name Masahiro プロパティ Age 27
  • 11. Hornetのアーキテクチャ •  HBase  +  Gateway(Java) Client RPC Gateway Gateway Gateway HBase HDFS
  • 12. Hornetのスキーマ(リレーションシップ) •  RowKey:     –  hash(startNodeId)  +  startNodeId  +  type  +  direcUon  +   (Long.MAX_VALUE  -­‐  Umestamp)  +  endNodeId  •  ColumnFamily:   –  “h”  •  Column:   –  “”  (空のバイト配列)  •  Value:   –  シリアライズしたプロパティ  
  • 13. Hornetのスキーマ(リレーションシップ) •  例:リレーションシップの追加(1が2をフォローする)     2 follow 1 date 2013-­‐01-­‐01 Name Ichiro favorite true Age 29 Name Toshihiro age 29 3 Name Masahiro Age 27
  • 14. Hornetのスキーマ(リレーションシップ) •  例:リレーションシップの追加(1が2をフォローする)     RowKey Column   value Key
  • 15. Hornetのスキーマ(リレーションシップ) •  例:リレーションシップの追加(1が2をフォローする)     RowKey Column   value Key hash(1)  +  1  +  follow  +  OUTGOING  +  200  +  2 h: date=2013-­‐01-­‐01,  favorite=true hash(2)  +  2  +  follow  +  INCOMING  +  200  +  1 h: date=2013-­‐01-­‐01,  favorite=true 方向 ノードID ノードID プロパティの値 タイプ Long.MAX_VALUE  -­‐   ノードIDのハッシュ値 Umstamp
  • 16. Hornetのスキーマ(リレーションシップ) •  例:リレーションシップの追加(1が3をフォローする)       2 follow 1 date 2013-­‐01-­‐01 Name Ichiro favorite true Age 29 Name Toshihiro follow age 29 date 2013-­‐01-­‐10 favorite false 3 Name Masahiro Age 27
  • 17. Hornetのスキーマ(リレーションシップ) •  例:リレーションシップの追加(1が3をフォローする)     RowKey Column   value Key hash(1)  +  1  +  follow  +  OUTGOING  +  200  +  2 h: date=2013-­‐01-­‐01,  favorite=true hash(2)  +  2  +  follow  +  INCOMING  +  200  +  1 h: date=2013-­‐01-­‐01,  favorite=true
  • 18. Hornetのスキーマ(リレーションシップ) •  例:リレーションシップの追加(1が3をフォローする)     RowKey Column   value Key hash(1)  +  1  +  follow  +  OUTGOING  +  100  +  3 h: date=2013-­‐01-­‐10,  favorite=false hash(1)  +  1  +  follow  +  OUTGOING  +  200  +  2 h: date=2013-­‐01-­‐01,  favorite=true hash(3)  +  3  +  follow  +  INCOMING  +  100  +  1 h: date=2013-­‐01-­‐10,  favorite=false hash(2)  +  2  +  follow  +  INCOMING  +  200  +  1 h: date=2013-­‐01-­‐01,  favorite=true
  • 19. Hornetのスキーマ(リレーションシップ) •  例:リレーションシップの取得(1がフォローしてる人を取得)   2 follow 1 date 2013-­‐01-­‐01 Name Ichiro favorite true Age 29 Name Toshihiro follow age 29 date 2013-­‐01-­‐10 favorite false 3 Name Masahiro Age 27
  • 20. Hornetのスキーマ(リレーションシップ) •  例:リレーションシップの取得(1がフォローしてる人を取得)   hash(1)  +  1  +  follow  +  OUTGOING  でプレフィックススキャン RowKey Column   value Key hash(1)  +  1  +  follow  +  OUTGOING  +  100  +  3 h: date=2013-­‐01-­‐10,  favorite=false hash(1)  +  1  +  follow  +  OUTGOING  +  200  +  2 h: date=2013-­‐01-­‐01,  favorite=true hash(3)  +  3  +  follow  +  INCOMING  +  100  +  1 h: date=2013-­‐01-­‐10,  favorite=false hash(2)  +  2  +  follow  +  INCOMING  +  200  +  1 h: date=2013-­‐01-­‐01,  favorite=true
  • 21. Hornetのスキーマ(リレーションシップ) •  例:リレーションシップの取得(1がフォローしてる人を取得)   hash(1)  +  1  +  follow  +  OUTGOING  でプレフィックススキャン RowKey Column   value Key hash(1)  +  1  +  follow  +  OUTGOING  +  100  +  3 h: date=2013-­‐01-­‐10,  favorite=false hash(1)  +  1  +  follow  +  OUTGOING  +  200  +  2 h: date=2013-­‐01-­‐01,  favorite=true hash(3)  +  3  +  follow  +  INCOMING  +  100  +  1 h: date=2013-­‐01-­‐10,  favorite=false hash(2)  +  2  +  follow  +  INCOMING  +  200  +  1 h: date=2013-­‐01-­‐01,  favorite=true
  • 22. Hornetのスキーマ •  設計のポイント   –  tall-­‐narrow  table   •  データの偏りが起こらないように     –  ノードIDのhash値をプレフィックス   •  書き込み・読み込みの負荷分散   –  複数のプロパティの値をシリアライズして一行に   •  使用メモリの節約  
  • 23. 運用について
  • 24. トピックス(1) •  0.92.0系のHBaseと0.20.2系のHadoopを使っている(CDH)  •  NNはFTサーバを使ってハードウェア冗長をしている   –  当時はHAがなかった  •  メジャーコンパクションは深夜に   –  メジャーコンパクション中はレスポンスタイムが上がる  •  オートスプリットをONにしている   –  一瞬レスポンスタイムが上がるが、現在のところ問題なし  
  • 25. トピックス(2) •  Zookeeperのセッションタイムアウトは短くしてい る(20秒)   –  ダウンタイムとのトレードオフ   –  重いGCが起きたらRSが落ちてしまうかも(今のところ 落ちてない)    •  バックアップ   –  HBase-­‐0.92.0ではレプリケーションがバグってて使え なかった   –  スクリプトでWALをバックアップ用クラスタに転送して 適用している
  • 26. 障害事例(1) •  ハードウェア障害でRSがダウン   –  うまくフェイルオーバされた   •  該当Regionのダウンタイムは1分くらい  •  本番クラスタでMapReduceを行ったらRSが同 時に7台死亡   –  FullGCが発生   –  本番クラスタではMapReduce禁止  
  • 27. 障害事例(2) •  アプリケーション側のバグで特定Rowに対す る書き込み・読み込みが集中し、RSのCPUが 100%に張り付いて重くなった   –  該当Regionにメジャーコンパクションをかけたら CPU使用率が落ちた。KeyValueが増えすぎてScan のCPU負荷が上がった   –  アプリケーション側のバグフィックス  
  • 28. ご清聴ありがとうございました