...

講演資料ダウンロード - Cloudera World Tokyo 2016

by user

on
Category: Documents
31

views

Report

Comments

Transcript

講演資料ダウンロード - Cloudera World Tokyo 2016
HBaseで実現する
大量の特許文書データを扱うための
アーキテクチャとベストプラクティス
アスタミューゼ株式会社 開発・インフラ部 福田 信顕
自己紹介
•  福田 信顕 (ふくだ のぶあき)
•  アスタミューゼ株式会社 開発・インフラ部
•  ソフトウェアエンジニア
•  Hadoop歴5年、現在はSparkを愛用
•  ミドルウェアの導入と運用、大規模データ処理の設計と実装
2
弊社とCDHと私
CDH
3
Powered by
6
特許公報とastamuse.com
•  特許公報とは特許に関する正式な文書です
•  1,100万文書
•  1,700億文字
•  図面画像1.6億枚
7
8
課題
大量の特許公報データを処理する仕組みを構築する
13
取り扱うデータのスペック
• 数千個のtar.gzファイル
• 1ファイルあたり数GB
•  フォーマット
•  テキスト(XML、SGML)
•  画像(TIFF)
14
アーキテクチャ
システム構成
Spark
Hive
S3
PostgreSQL
YARN
HBase
WebApp
elasticsearch
HDFS
mongoDB
データの流れ
S3
render ¦ put
PNG
HDFS
XML, TIFF
load
HBase
XML, TIFF
analyze ¦ put
mongoDB
JSON
17
4つのプラクティス
4つのプラクティス
1. 『生データは不可変に』
2. 『疎な結合は蜜の味』
3. 『HBaseは褒めて使え』
4. 『ディストリビューションを活用する』
19
Practice 1
『生データは不可変に』
20
1-1 ケース「生ハムはどこへ消えた?」
•  生ハムメロンに関する特許があるとします。
•  ウェブページで、生ハムなしのメロン画像が表示される不具合が報告されました。
•  HBaseの該当行を調べると、生ハムありのメロン画像を確認できました。
HDFS
HBase
S3
21
1-1 ケース「生ハムはどこへ消えた?」
•  HDFS上の生データ(tar.gz)を調査したところ、生ハムありのメロン画像が確認できました。
•  さらなる調査の結果、原因は転送プログラムのバグであることが判明しました。
HDFS
HBase
S3
22
1-2 ケース「テーブルデータの喪失」
•  HBaseのテーブルを誤って削除するという事案が発生しました。
テーブルA
HBase
23
1-2 ケース「テーブルデータの喪失」
•  HDFS上の生データからデータを再生成し、復旧しました。
生データ
HDFS
テーブルA
HBase
24
Practice 1
『生データは不可変に』
•  データのトレーサビリティの確保
•  HDFS保管の生データからの再生成を可能に
•  巨大な永続化キャッシュとしてのHBase
25
Practice 2
『疎な結合は蜜の味』
26
ケース「影響の局所化」
•  データの調達先の変更に伴い、生データ(tar.gz)のレイアウトに変更が生じました。
•  この変更の影響を受けるのはどこでしょうか。
OLD
/foo/1/a
/foo/2/b
NEW
/bar/1/a
/bar/2/b
HDFS
Job B
画像処理
S3
Job C
テキスト処
理
mongoDB
HBase
Job A
StoreFile生
成
27
ケース「影響の局所化」
•  影響を受けるのはJob Aのみ。
•  実際に変更の必要性が生じたのは、カスタムのRecordReaderクラスのみでした。
OLD
/foo/1/a
/foo/2/b
NEW
/bar/1/a
/bar/2/b
HDFS
Job B
画像処理
S3
Job C
テキスト処
理
mongoDB
HBase
Job A
StoreFile生
成
28
Practice 2
『疎な結合は蜜の味』
•  原則1つの仕事は1つのジョブとして実装する
•  変更の影響範囲を局所化する設計
29
Practice 3
『HBaseは褒めて使え』
30
3-1 カラムファミリの活用
•  画像とテキストは、データの形式とアクセスパターンが異なります。
•  それぞれのデータを最適な形で格納する方法はあるでしょうか。
Job B
画像処理
S3
HBase
Job C
テキスト処
理
mongoDB
31
3-1 カラムファミリの活用
•  画像とテキストを、それぞれ別のカラムファミリに割り当てました。
•  カラムファミリ毎に格納領域が集約され、圧縮も利用でき、I/Oの最適化が図れます。
row-key1
row-key2
meta:
raw:
aux:
name: foo
date: 20161108
hash: xxxxxxxx
foo.xml: <xml>くぁwせdrftgyふじこlp</xml>
foo_1.tif:
xxxxxxxxxx
xxxxx
name: bar
date: 20161027
hash: yyyyyyyy
bar.xml: <xml>くぁwせdrftgyふじこlp</xml>
bar2.xml: <xml>くぁwせdrftgyふじこlp</xml>
baz_1.tif:
xxxxx
baz_2.tif:
xxxxxxxxx
32
3-2 バルクロードの活用
•  大量のデータをテーブルに書き込む際に、1件ずつPutをすると時間がかかりすぎます。
このままではリリースに間に合いそうもありません。
•  スループットを上げる方法はあるでしょうか。
HBase
Putするジョブ
HDFS
33
3-2 バルクロードの活用
•  HBaseのバルクロードの仕組みを使うことにしました。
•  高速かつ効率的にデータをテーブルにロードできます。
•  全体のリードタイムを短縮でき、スケジュールに間に合わせることができました。
HBase
StoreFile生成ジョブ
completebulkloadコマンド
HDFS
StroreFile
34
3-3 テーブル管理
Table
メジャーコンパクション
Region
Region
Region
Region
•  デフォルトで7日間隔で走る
•  StoreFileは1つの大きなファイルに統合される
Store
Store
Store
MemStore
MemStore
MemStore
StoreFile
StoreFile
StoreFile
StoreFile
StoreFile
StoreFile
StoreFile
3-3 テーブル管理
Table
リージョンの分割
•  StoreFileはサイズが一定の閾値を超えると
2つに分割される
Region
Region
Region
•  分割の度にリージョンの数が増える
Table
Region
Region
Region
Region
マニュアルでの制御
•  自動メジャーコンパクション機能の無効化
•  hbase.hregion.majorcompaction デフォルト7日 → 0
•  分割の抑制
•  hbase.hregion.max.filesize デフォルト10g → 大きな値
この2つの設定により、一定のリージョン数で運用
37
新しいデータの追加
運用でカバー
•  定期的にリージョンの状況をチェック
•  偏りが大きくなっている場合は手動で分割
•  バッド・ノウハウ疑惑
39
期待のルーキー Region Normalizer
(v1.2.0)
3-4 トラブルシューティング
•  リージョンサーバのダウン(OOMKillerやYouAreDeadException)
•  自動再起動は使用しない
•  リージョンサーバの再起動
•  メタデータ不整合が生じた場合はhbckコマンドを使用して調査・修復
•  ドキュメント重要
41
Practice 3
『HBaseは褒めて使え』
•  カラムファミリはデータの形式とアクセスパターン毎に
•  バルクロード爆速
•  テーブル管理のバッド・ノウハウ
•  hbckコマンド重要
42
Practice 4
『ディストリビューションを活用する』
43
Practice 4
『ディストリビューションを活用する』
•  大事なのは品質と時間
•  バージョンアップの恩恵
44
4つのプラクティス
1. 『生データは不可変に』
2. 『疎な結合は蜜の味』
3. 『HBaseは褒めて使え』
4. 『ディストリビューションを活用する』
45
今後の課題
•  クラウド環境への適応と最適化
•  アーキテクチャの見直し
46
アスタミューゼの舞台袖
@astamuseLab
アスタミューゼでは、開発・デザイン
の情報を発信しています。
47
ご清聴ありがとうございました。
Fly UP