SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
HBaseを用いたグラフDB「Hornet」	


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


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

•  Twi<er	
  @brfrn169	
  
話すこと	
•  HBaseを用いたグラフDB「Hornet」について	
  
 –  設計について	
  
 –  運用について	
  


•  HBaseを知っている人向けです	
  
Hornetについて
背景	
•  昨年、「Ameba」のスマートフォン向けプラット
   フォームをリリース	
  
背景	
•  デカグラフ構想	
  
  –  各サービスのユーザー層を「ミニグラフ」と位置づ
     け、1つの巨大なスマートフォン向けサービス(デ
     カグラフ)を構築するという構想	
  
                                             デカグラフ	


             ミニグラフ	
               ミニグラフ	


   ミニグラフ	
             ミニグラフ	

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

           HBase
なぜHBaseか	
•    スケールする	
  
•    書き込みが速い、そこそこの読み込み速度	
  
•    レンジスキャン	
  
•    CAS操作、インクリメント操作	
  
•    解析基盤にHadoopを用いていたため、ノウハ
     ウがあった
設計について
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
Hornetのアーキテクチャ	
•  HBase	
  +	
  Gateway(Java)	

                          Client
                                   RPC


           Gateway       Gateway   Gateway


                          HBase
                          HDFS
Hornetのスキーマ(リレーションシップ)	
•  RowKey:	
  	
  
    –  hash(startNodeId)	
  +	
  startNodeId	
  +	
  type	
  +	
  direcUon	
  +	
  
       (Long.MAX_VALUE	
  -­‐	
  Umestamp)	
  +	
  endNodeId	
  
•  ColumnFamily:	
  
    –  “h”	
  
•  Column:	
  
    –  “”	
  (空のバイト配列)	
  
•  Value:	
  
    –  シリアライズしたプロパティ	
  
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
Hornetのスキーマ(リレーションシップ)	
•  例:リレーションシップの追加(1が2をフォローする)	
  	
  

       RowKey	
     Column	
     value	
                      Key
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
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
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
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
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
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
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
Hornetのスキーマ	
•  設計のポイント	
  
  –  tall-­‐narrow	
  table	
  
      •  データの偏りが起こらないように	
  
      	
  
  –  ノードIDのhash値をプレフィックス	
  
      •  書き込み・読み込みの負荷分散	
  


  –  複数のプロパティの値をシリアライズして一行に	
  
      •  使用メモリの節約	
  
運用について
トピックス(1)	
•  0.92.0系のHBaseと0.20.2系のHadoopを使っている(CDH)	
  

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

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

•  オートスプリットをONにしている	
  
  –  一瞬レスポンスタイムが上がるが、現在のところ問題なし	
  
トピックス(2)	
•  Zookeeperのセッションタイムアウトは短くしてい
   る(20秒)	
  
  –  ダウンタイムとのトレードオフ	
  
  –  重いGCが起きたらRSが落ちてしまうかも(今のところ
     落ちてない)	
  
	
  
•  バックアップ	
  
  –  HBase-­‐0.92.0ではレプリケーションがバグってて使え
     なかった	
  
  –  スクリプトでWALをバックアップ用クラスタに転送して
     適用している
障害事例(1)	
•  ハードウェア障害でRSがダウン	
  
 –  うまくフェイルオーバされた	
  
   •  該当Regionのダウンタイムは1分くらい	
  


•  本番クラスタでMapReduceを行ったらRSが同
   時に7台死亡	
  
 –  FullGCが発生	
  
 –  本番クラスタではMapReduce禁止	
  
障害事例(2)	
•  アプリケーション側のバグで特定Rowに対す
   る書き込み・読み込みが集中し、RSのCPUが
   100%に張り付いて重くなった	
  
 –  該当Regionにメジャーコンパクションをかけたら
    CPU使用率が落ちた。KeyValueが増えすぎてScan
    のCPU負荷が上がった	
  
 –  アプリケーション側のバグフィックス	
  
ご清聴ありがとうございました

Contenu connexe

Plus de Toshihiro Suzuki

Kuduを調べてみた #dogenzakalt
Kuduを調べてみた #dogenzakaltKuduを調べてみた #dogenzakalt
Kuduを調べてみた #dogenzakaltToshihiro Suzuki
 
HBaseを用いたグラフDB「Hornet」の設計と運用
HBaseを用いたグラフDB「Hornet」の設計と運用HBaseを用いたグラフDB「Hornet」の設計と運用
HBaseを用いたグラフDB「Hornet」の設計と運用Toshihiro Suzuki
 
HBaseでグラフ構造を扱う(開発中)
HBaseでグラフ構造を扱う(開発中)HBaseでグラフ構造を扱う(開発中)
HBaseでグラフ構造を扱う(開発中)Toshihiro Suzuki
 
Amebaサービスのログ解析基盤
Amebaサービスのログ解析基盤Amebaサービスのログ解析基盤
Amebaサービスのログ解析基盤Toshihiro Suzuki
 
MySQLによってタフになる会12章
MySQLによってタフになる会12章MySQLによってタフになる会12章
MySQLによってタフになる会12章Toshihiro Suzuki
 
第2回 Hadoop 輪読会
第2回 Hadoop 輪読会第2回 Hadoop 輪読会
第2回 Hadoop 輪読会Toshihiro Suzuki
 

Plus de Toshihiro Suzuki (7)

Kuduを調べてみた #dogenzakalt
Kuduを調べてみた #dogenzakaltKuduを調べてみた #dogenzakalt
Kuduを調べてみた #dogenzakalt
 
HBaseを用いたグラフDB「Hornet」の設計と運用
HBaseを用いたグラフDB「Hornet」の設計と運用HBaseを用いたグラフDB「Hornet」の設計と運用
HBaseを用いたグラフDB「Hornet」の設計と運用
 
HBase at Ameba
HBase at AmebaHBase at Ameba
HBase at Ameba
 
HBaseでグラフ構造を扱う(開発中)
HBaseでグラフ構造を扱う(開発中)HBaseでグラフ構造を扱う(開発中)
HBaseでグラフ構造を扱う(開発中)
 
Amebaサービスのログ解析基盤
Amebaサービスのログ解析基盤Amebaサービスのログ解析基盤
Amebaサービスのログ解析基盤
 
MySQLによってタフになる会12章
MySQLによってタフになる会12章MySQLによってタフになる会12章
MySQLによってタフになる会12章
 
第2回 Hadoop 輪読会
第2回 Hadoop 輪読会第2回 Hadoop 輪読会
第2回 Hadoop 輪読会
 

Dernier

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Dernier (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

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

  • 2. 自己紹介 •  鈴木 俊裕   •  株式会社サイバーエージェント   –  アメーバ事業本部   –  Ameba  Technology  Laboratory   •  Hadoop/Hiveを用いたデータ解析基盤の運用、 HBaseを用いたグラフDB「Hornet」の運用   •  Twi<er  @brfrn169  
  • 3. 話すこと •  HBaseを用いたグラフDB「Hornet」について   –  設計について   –  運用について   •  HBaseを知っている人向けです  
  • 6. 背景 •  デカグラフ構想   –  各サービスのユーザー層を「ミニグラフ」と位置づ け、1つの巨大なスマートフォン向けサービス(デ カグラフ)を構築するという構想   デカグラフ ミニグラフ ミニグラフ ミニグラフ ミニグラフ ミニグラフ ミニグラフ
  • 7. 背景 •  そこで、ユーザのグラフ構造を保持するデー タベースが必要   –  データが大量になるのでスケールするデータベー ス     HBase
  • 8. なぜHBaseか •  スケールする   •  書き込みが速い、そこそこの読み込み速度   •  レンジスキャン   •  CAS操作、インクリメント操作   •  解析基盤にHadoopを用いていたため、ノウハ ウがあった
  • 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
  • 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値をプレフィックス   •  書き込み・読み込みの負荷分散   –  複数のプロパティの値をシリアライズして一行に   •  使用メモリの節約  
  • 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負荷が上がった   –  アプリケーション側のバグフィックス