Your SlideShare is downloading. ×
HBaseを用いたグラフDB「Hornet」
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

2,711
views

Published on

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

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

Published in: Technology

0 Comments
23 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,711
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
36
Comments
0
Likes
23
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. ご清聴ありがとうございました