19
HBase, no trouble 鶴原翔夢, LINE株式会社 LINE開発1室

HBase, no trouble

Embed Size (px)

Citation preview

Page 1: HBase, no trouble

HBase, no trouble鶴原翔夢, LINE株式会社 LINE開発1室

Page 2: HBase, no trouble

自己紹介

名前: 鶴原翔夢 (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

Page 3: HBase, no trouble

HBase使ってますか?

Page 4: HBase, no trouble

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台以上のサーバー

Page 5: HBase, no trouble

Dual Cluster

HBase BHBase A

talk-server(application server)

RegionServerはときどき死ぬ

一部のRegionに対して最悪の場合

で数分間書き込みができない状態

になる

application serverのthreadが全

てblockする

LINEが止まる> 1M QPS > 1M QPS

Page 6: HBase, no trouble

Dual Cluster

HBase BHBase A

talk-server(application server)

読むときも両方に同時にリクエス

トを投げる

返ってきたデータを見て、stale

dataだったらもう片方の結果を待

> 1M QPS > 1M QPS

Page 7: HBase, no trouble

LINE HBase History

2014

20122016

20152018

https://www.slideshare.net/sunsuk7tp/hbase-at-line

https://www.slideshare.net/linecorp/hbase-at-line-2017

Page 8: HBase, no trouble

HBase, no trouble?

Page 9: HBase, no trouble

Trouble1: 突然のperformance悪化

Page 10: HBase, no trouble

原因

G1GC + 絶妙な寿命の

ThreadLocalオブジェクト

=> 巨大なThreadLocalMap

Page 11: HBase, no trouble

解決策

失敗策 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

Page 12: HBase, no trouble

Trouble2: snapshotデータに欠損

Page 13: HBase, no trouble

原因

snapshotをとると、各

Regionはmemstoreを

flushする

自然発生するflushとタイミ

ングがかぶるとsnapshot由

来のflushがskipされる

snapshotの結果にflushの

結果が含まれない

Page 14: HBase, no trouble

解決策

snapshotをとるときにすでに走っているflushがあったらそれが終わるのを待つ https://issues.apache.org/jira/browse/HBASE-

18099 あるいは、snapshotを取る前に自前でflushしておくことでwork around

Page 15: HBase, no trouble

Trouble3: OutOfMemoryErrorでRegionServerが次々と死亡

Page 16: HBase, no trouble

原因

特定のregionをcompactionしよ

うとしてOOME

Table#delete(List<Delete>)

に巨大なリストを渡していた

Replicationが一定時間内に終わ

らず、永遠にretryを続けていた

HBase

Backup HBase

Replication

ApplicationServer

巨大List

Heap: 31GB

Heap: 16GB

Page 17: HBase, no trouble

解決策

アプリケーション側を修正して大きなリクエストがいかないようにする (batchを分割する)

“hbase.ipc.max.request.size” を設定する https://issues.apache.org/jira/browse/HBASE-

15212

Page 18: HBase, no trouble

まとめ

火山とまではいかなくても、トラブルはいろいろある

大規模に実運用しないと出てこない問題もたくさん

トラブル = チャレンジ => 楽しむことが重要

Page 19: HBase, no trouble

Thank you