0
HBaseを用いたグラフDB「Hornet」	株式会社サイバーエージェント	  アメーバ事業本部	  Ameba	  Technology	  Laboratory	  鈴木 俊裕
自己紹介	•  鈴木 俊裕	  •  株式会社サイバーエージェント	     –  アメーバ事業本部	     –  Ameba	  Technology	  Laboratory	  •  Hadoop/Hiveを用いたデータ解析基盤の運用、...
話すこと	•  HBaseを用いたグラフDB「Hornet」について	   –  設計について	   –  運用について	  •  HBaseを知っている人向けです	  
Hornetについて
背景	•  昨年、「Ameba」のスマートフォン向けプラット   フォームをリリース	  
背景	•  デカグラフ構想	    –  各サービスのユーザー層を「ミニグラフ」と位置づ     け、1つの巨大なスマートフォン向けサービス(デ     カグラフ)を構築するという構想	                             ...
背景	•  そこで、ユーザのグラフ構造を保持するデー   タベースが必要	         –  データが大量になるのでスケールするデータベー          ス	  	             HBase
なぜHBaseか	•    スケールする	  •    書き込みが速い、そこそこの読み込み速度	  •    レンジスキャン	  •    CAS操作、インクリメント操作	  •    解析基盤にHadoopを用いていたため、ノウハ     ウ...
設計について
Hornetのデータモデル	                                                     リレーションシップ	              ノード	  •  プロパティグラフ	        リレーショ...
Hornetのアーキテクチャ	•  HBase	  +	  Gateway(Java)	                          Client                                   RPC        ...
Hornetのスキーマ(リレーションシップ)	•  RowKey:	  	      –  hash(startNodeId)	  +	  startNodeId	  +	  type	  +	  direcUon	  +	         (...
Hornetのスキーマ(リレーションシップ)	  •  例:リレーションシップの追加(1が2をフォローする)	  	                                                        2	      ...
Hornetのスキーマ(リレーションシップ)	•  例:リレーションシップの追加(1が2をフォローする)	  	         RowKey	     Column	     value	                      Key
Hornetのスキーマ(リレーションシップ)	    •  例:リレーションシップの追加(1が2をフォローする)	  	                                 RowKey	                      ...
Hornetのスキーマ(リレーションシップ)	  •  例:リレーションシップの追加(1が3をフォローする)	  	  	                                                             ...
Hornetのスキーマ(リレーションシップ)	    •  例:リレーションシップの追加(1が3をフォローする)	  	                                 RowKey	                      ...
Hornetのスキーマ(リレーションシップ)	    •  例:リレーションシップの追加(1が3をフォローする)	  	                                 RowKey	                      ...
Hornetのスキーマ(リレーションシップ)	  •  例:リレーションシップの取得(1がフォローしてる人を取得)	                                                                ...
Hornetのスキーマ(リレーションシップ)	  •  例:リレーションシップの取得(1がフォローしてる人を取得)	          hash(1)	  +	  1	  +	  follow	  +	  OUTGOING	  でプレフィックス...
Hornetのスキーマ(リレーションシップ)	  •  例:リレーションシップの取得(1がフォローしてる人を取得)	          hash(1)	  +	  1	  +	  follow	  +	  OUTGOING	  でプレフィックス...
Hornetのスキーマ	•  設計のポイント	    –  tall-­‐narrow	  table	        •  データの偏りが起こらないように	        	    –  ノードIDのhash値をプレフィックス	       ...
運用について
トピックス(1)	•  0.92.0系のHBaseと0.20.2系のHadoopを使っている(CDH)	  •  NNはFTサーバを使ってハードウェア冗長をしている	    –  当時はHAがなかった	  •  メジャーコンパクションは深夜に	...
トピックス(2)	•  Zookeeperのセッションタイムアウトは短くしてい   る(20秒)	    –  ダウンタイムとのトレードオフ	    –  重いGCが起きたらRSが落ちてしまうかも(今のところ     落ちてない)	  	  •...
障害事例(1)	•  ハードウェア障害でRSがダウン	   –  うまくフェイルオーバされた	     •  該当Regionのダウンタイムは1分くらい	  •  本番クラスタでMapReduceを行ったらRSが同   時に7台死亡	   – ...
障害事例(2)	•  アプリケーション側のバグで特定Rowに対す   る書き込み・読み込みが集中し、RSのCPUが   100%に張り付いて重くなった	   –  該当Regionにメジャーコンパクションをかけたら    CPU使用率が落ちた。...
ご清聴ありがとうございました
Upcoming SlideShare
Loading in...5
×

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

2,895

Published on

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,895
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
38
Comments
0
Likes
23
Embeds 0
No embeds

No notes for slide

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

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

    Clipping is a handy way to collect important slides you want to go back to later.

×