hbaseを用いたグラフdb「hornet」

28
HBaseを用いたグラフDBHornet株式会社サイバーエージェント アメーバ事業本部 Ameba Technology Laboratory 鈴木 俊裕

Upload: toshihiro-suzuki

Post on 28-May-2015

2.824 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

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

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

株式会社サイバーエージェント  アメーバ事業本部  Ameba  Technology  Laboratory  鈴木 俊裕

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

自己紹介

•  鈴木 俊裕  •  株式会社サイバーエージェント  – アメーバ事業本部  – Ameba  Technology  Laboratory  

•  Hadoop/Hiveを用いたデータ解析基盤の運用、HBaseを用いたグラフDB「Hornet」の運用  

•  Twi<er  @brfrn169  

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

話すこと

•  HBaseを用いたグラフDB「Hornet」について  – 設計について  – 運用について  

•  HBaseを知っている人向けです  

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

Hornetについて

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

背景

•  昨年、「Ameba」のスマートフォン向けプラットフォームをリリース  

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

背景

•  デカグラフ構想  – 各サービスのユーザー層を「ミニグラフ」と位置づ

け、1つの巨大なスマートフォン向けサービス(デカグラフ)を構築するという構想  

ミニグラフ

ミニグラフ

ミニグラフ

ミニグラフ

ミニグラフ

ミニグラフ

デカグラフ

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

背景

•  そこで、ユーザのグラフ構造を保持するデータベースが必要  – データが大量になるのでスケールするデータベー

ス  

 

HBase

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

なぜHBaseか

•  スケールする  •  書き込みが速い、そこそこの読み込み速度  •  レンジスキャン  •  CAS操作、インクリメント操作  •  解析基盤にHadoopを用いていたため、ノウハ

ウがあった

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

設計について

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

Hornetのデータモデル

•  プロパティグラフ

1

2

3

ノード リレーションシップ

follow

follow Name Toshihiro

age 29

ノードの  プロパティ

Name Ichiro

Age 29

Name Masahiro

Age 27

date 2013-­‐01-­‐01

favorite true

date 2013-­‐01-­‐10

favorite false

リレーションシップの  プロパティ

ノードID リレーションシップのtype

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

Hornetのアーキテクチャ

•  HBase  +  Gateway(Java)

Client

Gateway Gateway Gateway

RPC

HBase

HDFS

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

Hornetのスキーマ(リレーションシップ)

•  RowKey:    – hash(startNodeId)  +  startNodeId  +  type  +  direcUon  +  (Long.MAX_VALUE  -­‐  Umestamp)  +  endNodeId  

•  ColumnFamily:  – “h”  

•  Column:  – “”  (空のバイト配列)  

•  Value:  – シリアライズしたプロパティ  

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

Hornetのスキーマ(リレーションシップ)

•  例:リレーションシップの追加(1が2をフォローする)    

1

2

3

follow

Name Toshihiro

age 29

Name Ichiro

Age 29

Name Masahiro

Age 27

date 2013-­‐01-­‐01

favorite true

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

Hornetのスキーマ(リレーションシップ)

•  例:リレーションシップの追加(1が2をフォローする)    

RowKey Column  Key

value

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

Hornetのスキーマ(リレーションシップ)

•  例:リレーションシップの追加(1が2をフォローする)    

RowKey Column  Key

value

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  -­‐  Umstamp

ノードID

タイプ

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

Hornetのスキーマ(リレーションシップ)

•  例:リレーションシップの追加(1が3をフォローする)      

1

2

3

follow

follow Name Toshihiro

age 29

Name Ichiro

Age 29

Name Masahiro

Age 27

date 2013-­‐01-­‐01

favorite true

date 2013-­‐01-­‐10

favorite false

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

Hornetのスキーマ(リレーションシップ)

•  例:リレーションシップの追加(1が3をフォローする)    

RowKey Column  Key

value

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

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

Hornetのスキーマ(リレーションシップ)

•  例:リレーションシップの追加(1が3をフォローする)    

RowKey Column  Key

value

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

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

Hornetのスキーマ(リレーションシップ)

•  例:リレーションシップの取得(1がフォローしてる人を取得)  

1

2

3

follow

follow Name Toshihiro

age 29

Name Ichiro

Age 29

Name Masahiro

Age 27

date 2013-­‐01-­‐01

favorite true

date 2013-­‐01-­‐10

favorite false

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

Hornetのスキーマ(リレーションシップ)

•  例:リレーションシップの取得(1がフォローしてる人を取得)  

RowKey Column  Key

value

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

hash(1)  +  1  +  follow  +  OUTGOING  でプレフィックススキャン

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

Hornetのスキーマ(リレーションシップ)

•  例:リレーションシップの取得(1がフォローしてる人を取得)  

RowKey Column  Key

value

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

hash(1)  +  1  +  follow  +  OUTGOING  でプレフィックススキャン

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

Hornetのスキーマ

•  設計のポイント  –  tall-­‐narrow  table  

•  データの偏りが起こらないように    

– ノードIDのhash値をプレフィックス  •  書き込み・読み込みの負荷分散  

– 複数のプロパティの値をシリアライズして一行に  •  使用メモリの節約  

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

運用について

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

トピックス(1)

•  0.92.0系のHBaseと0.20.2系のHadoopを使っている(CDH)  

•  NNはFTサーバを使ってハードウェア冗長をしている  –  当時はHAがなかった  

•  メジャーコンパクションは深夜に  –  メジャーコンパクション中はレスポンスタイムが上がる  

•  オートスプリットをONにしている  –  一瞬レスポンスタイムが上がるが、現在のところ問題なし  

 

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

トピックス(2)

•  Zookeeperのセッションタイムアウトは短くしている(20秒)  – ダウンタイムとのトレードオフ  – 重いGCが起きたらRSが落ちてしまうかも(今のところ

落ちてない)    •  バックアップ  – HBase-­‐0.92.0ではレプリケーションがバグってて使え

なかった  – スクリプトでWALをバックアップ用クラスタに転送して

適用している

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

障害事例(1)

•  ハードウェア障害でRSがダウン  – うまくフェイルオーバされた  

•  該当Regionのダウンタイムは1分くらい  

•  本番クラスタでMapReduceを行ったらRSが同時に7台死亡  – FullGCが発生  – 本番クラスタではMapReduce禁止  

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

障害事例(2)

•  アプリケーション側のバグで特定Rowに対する書き込み・読み込みが集中し、RSのCPUが100%に張り付いて重くなった  – 該当RegionにメジャーコンパクションをかけたらCPU使用率が落ちた。KeyValueが増えすぎてScanのCPU負荷が上がった  

– アプリケーション側のバグフィックス  

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

ご清聴ありがとうございました