HBase, no trouble
-
Upload
line-corporation -
Category
Technology
-
view
322 -
download
0
Transcript of HBase, no trouble
HBase, no trouble鶴原翔夢, LINE株式会社 LINE開発1室
自己紹介
名前: 鶴原翔夢 (Tsuruhara Tomu) 所属: LINE株式会社 LINE開発1室 Z Partチーム 仕事: HBaseの運用、メッセージングサーバーの開発 以前の発表
HBase at LINE 2017 http://linedevday.linecorp.com/jp/2017/#A-6 LINE Platform Development Chronicle
https://engineering.linecorp.com/ja/blog/detail/59
HBase使ってますか?
LINE
LEGY(reverse proxy)
LINE Client App
メッセージングサービスの例
talk-server(application
server)
HBase
Redis
HBaseHBase
HBase
RedisRedis
Redis
HBase(Backup)
HBase(Stats) ReplicationReplication
Multi Cluster 合計1000台以上のサーバー
Dual Cluster
HBase BHBase A
talk-server(application server)
RegionServerはときどき死ぬ
一部のRegionに対して最悪の場合
で数分間書き込みができない状態
になる
application serverのthreadが全
てblockする
LINEが止まる> 1M QPS > 1M QPS
Dual Cluster
HBase BHBase A
talk-server(application server)
読むときも両方に同時にリクエス
トを投げる
返ってきたデータを見て、stale
dataだったらもう片方の結果を待
つ
> 1M QPS > 1M QPS
LINE HBase History
2014
20122016
20152018
https://www.slideshare.net/sunsuk7tp/hbase-at-line
https://www.slideshare.net/linecorp/hbase-at-line-2017
HBase, no trouble?
Trouble1: 突然のperformance悪化
原因
G1GC + 絶妙な寿命の
ThreadLocalオブジェクト
=> 巨大なThreadLocalMap
解決策
失敗策 ThreadLocal#removeを呼ぶ https://issues.apache.org/jira/browse/HBASE-16616
解決策1 ConnectionをはるときのThreadLocalをなくす https://issues.apache.org/jira/browse/HBASE-16146
解決策2 HFileBlock内のThreadLocalもなくす https://issues.apache.org/jira/browse/HBASE-17072
Trouble2: snapshotデータに欠損
原因
snapshotをとると、各
Regionはmemstoreを
flushする
自然発生するflushとタイミ
ングがかぶるとsnapshot由
来のflushがskipされる
snapshotの結果にflushの
結果が含まれない
解決策
snapshotをとるときにすでに走っているflushがあったらそれが終わるのを待つ https://issues.apache.org/jira/browse/HBASE-
18099 あるいは、snapshotを取る前に自前でflushしておくことでwork around
Trouble3: OutOfMemoryErrorでRegionServerが次々と死亡
原因
特定のregionをcompactionしよ
うとしてOOME
Table#delete(List<Delete>)
に巨大なリストを渡していた
Replicationが一定時間内に終わ
らず、永遠にretryを続けていた
HBase
Backup HBase
Replication
ApplicationServer
巨大List
Heap: 31GB
Heap: 16GB
解決策
アプリケーション側を修正して大きなリクエストがいかないようにする (batchを分割する)
“hbase.ipc.max.request.size” を設定する https://issues.apache.org/jira/browse/HBASE-
15212
まとめ
火山とまではいかなくても、トラブルはいろいろある
大規模に実運用しないと出てこない問題もたくさん
トラブル = チャレンジ => 楽しむことが重要
Thank you