Slide 1

Slide 1 text

グリーにおけるHiveの運⽤用 ⻑⾧長⾕谷川 貴之 2015/05/26 LIVESENSE TechNight 1

Slide 2

Slide 2 text

⾃自⼰己紹介 グリー株式会社 / データエンジニアリングG Hive/Prestoを含むHadoop周りの保守 –  ツールの開発/改善 •  Job管理理コンソール, ジョブスケジューラ, … –  利利⽤用者のサポート •  データ投⼊入の準備, 使い⽅方の説明 2015/05/26 LIVESENSE TechNight 2

Slide 3

Slide 3 text

グリーにおける分析基盤 (簡略略版) 2015/05/26 LIVESENSE TechNight 3 Game SNS

Slide 4

Slide 4 text

グリーにおける分析基盤 (簡略略版) 2015/05/26 LIVESENSE TechNight 4 Game SNS

Slide 5

Slide 5 text

Hive Hadoop上のデータをSQL-likeに扱える 弊社ではv0.12, v0.13, v0.14を利利⽤用中(!?) 2015/05/26 LIVESENSE TechNight 5 select page, count(distinct(uid)) uu, count(1) pv from access where day = ʻ‘2015-‐‑‒05-‐‑‒26ʼ’ group by page ページごとのUUとPVを算出

Slide 6

Slide 6 text

マルチバージョンなHive •  v0.12 –  今動いてる中で1番古いバージョン –  最も安定、ただし遅い •  v0.13.1 –  最も利利⽤用されているバージョン –  v0.12から移⾏行行する場合はクエリの書き換えが必要 •  UDFがそのままだと動かない •  v0.14 –  単純なバッチしか流流していないバージョン –  速いが… 2015/05/26 LIVESENSE TechNight 6

Slide 7

Slide 7 text

運⽤用でありそうな話 •  異異常により再起動せざるおえない •  ストレージが圧迫される •  データに型の違う値がある •  バグでそもそも違う値が返ってくる 2015/05/26 LIVESENSE TechNight 7 hard

Slide 8

Slide 8 text

運⽤用でありそうな話 •  異異常により再起動せざるおえない •  ストレージが圧迫される •  データに型の違う値がある •  バグでそもそも違う値が返ってくる 2015/05/26 LIVESENSE TechNight 8 hard

Slide 9

Slide 9 text

⼀一時ファイルが消えず… /tmpにできる⼀一時ファイルが消えず定期的に再起 動をしている 2015/05/26 LIVESENSE TechNight 9 $ ls -lt /tmp total 3721552 drwxr-xr-x 2 hive hive 4096 May 25 10:57 1826d22e-cbbf-4e7b-8e9a- e5d1a300994e_resources drwxr-xr-x 2 hive hive 4096 May 25 10:08 08df2afb-779e-425c-9cf3- cedca2cc051a_resources drwxr-xr-x 2 hive hive 4096 May 25 10:04 4d1edc92- ddd4-4aa2-904b-4b19182adf4f_resources Disk Usage 再起動

Slide 10

Slide 10 text

Hive Serverの冗⻑⾧長化 再起動時にRUNNINGのクエリを殺さない 負荷がかかり過ぎた場合に切切り替えられる 2015/05/26 LIVESENSE TechNight 10 API Server Clients Web UI

Slide 11

Slide 11 text

運⽤用でありそうな話 •  異異常により再起動せざるおえない •  ストレージが圧迫される •  データに型の違う値がある •  バグでそもそも違う値が返ってくる 2015/05/26 LIVESENSE TechNight 11 hard

Slide 12

Slide 12 text

⻑⾧長期保存に向けデータの⼊入れ直し 定期的に列列指向フォーマットでデータを⼊入れ直す –  ファイル数を減らしNameNodeの負担を減らす –  効率率率の良良いディスク利利⽤用 2015/05/26 LIVESENSE TechNight 12 RCFile, ORCFile JSON.gz INSERT hourly, daily

Slide 13

Slide 13 text

運⽤用でありそうな話 •  異異常により再起動せざるおえない •  ストレージが圧迫される •  データに型の違う値がある •  バグでそもそも違う値が返ってくる 2015/05/26 LIVESENSE TechNight 13 hard

Slide 14

Slide 14 text

データに型の違う値がある Hiveはschema-on-read –  それに対しMySQLはschema-on-write 弊社ではExternal tableの利利⽤用が多い –  Fluentd → HDFSに保存したJSONを参照している –  このJSONが不不正な状態で作成されている 全部 PHP のせいだ(嘘です、ごめんなさい 2015/05/26 LIVESENSE TechNight 14

Slide 15

Slide 15 text

2015/05/26 LIVESENSE TechNight 15 CREATE EXTERNAL TABLE `item_consume`( `time` bigint, `uid` int, `device` string, `request_status` int ) {“time”: 1432134000, “uid”: “22275”, “device”: “android”, “request_status”: 1} {“time”: 1432167000, “uid”: 22275, “device”: “iphone”, “request_status”: false} 例例)テーブル定義 データ(JSON)

Slide 16

Slide 16 text

2015/05/26 LIVESENSE TechNight 16 CREATE EXTERNAL TABLE `item_consume`( `time` bigint, `uid` int, `device` string, `request_status` int ) {“time”: 1432134000, “uid”: “22275”, “device”: “android”, “request_status”: 1} {“time”: 1432167000, “uid”: 22275, “device”: “iphone”, “request_status”: false} 例例)テーブル定義 データ(JSON)

Slide 17

Slide 17 text

2015/05/26 LIVESENSE TechNight 17 _⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人_ > ClassCastException <  ̄Y^Y^Y^Y^Y^Y^Y^Y^ ̄ ※ NumberFormatExceptionが起きるケースもある

Slide 18

Slide 18 text

違う型のデータへの取り組み •  できるだけ変換、出来ない場合はNULL –  SerDeの箇所に変更更を加える –  “22275”→22275, false → 0, “” → NULL •  Schemaの変更更をしてもらう –  intのカラムにfloatが⼊入ってるケースなど –  変更更しないとNULLしかでてこない 2015/05/26 LIVESENSE TechNight 18

Slide 19

Slide 19 text

運⽤用でありそうな話 •  異異常により再起動せざるおえない •  ストレージが圧迫される •  データに型の違う値がある •  バグでそもそも違う値が返ってくる 2015/05/26 LIVESENSE TechNight 19 hard

Slide 20

Slide 20 text

そもそも違う値が返ってくる(1/2) [HIVE-9753] Wrong results when using multiple levels of Joins. When table alias of one of the table is null with left outer joins. 何回かJOINするクエリを投げたときに発覚 異異なるaliasがなぜか同じaliasになってた このチケットは放置されたまま… 2015/05/26 LIVESENSE TechNight 20

Slide 21

Slide 21 text

そもそも違う値が返ってくる(2/2) [HIVE-9743] Incorrect result set for vectorized left outer join 正しくJOINできてなくて0になるカラムが多数 EXPLAINを⾒見見ると明らかにおかしくなってた v1.2.0で修正済み (実際に投げて確認済み 2015/05/26 LIVESENSE TechNight 21

Slide 22

Slide 22 text

まとめ •  Hiveはバギーなので運⽤用する際は要注意 –  特にアップグレードは⼗十分な検証が必要 –  パッチを当てる運⽤用も覚悟 –  v1.2.0は多くのバグが直っているので期待 •  ログはちゃんとした形式で出⼒力力しましょう –  どこかに困る⼈人達がいます •  ⼈人数が多くない場合、⾃自社運⽤用はやめましょう –  Redshift, BigQuery, TreasureDataを使おう –  バグはその⼈人達が直してくれる 2015/05/26 LIVESENSE TechNight 22

Slide 23

Slide 23 text

2015/05/26 LIVESENSE TechNight 23 HAPPY HACKING