Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[Livesence Tech Night] グリーにおけるHiveの運用

1,574 views

Published on

グリーにおけるHiveの運用
グリー株式会社 ⻑谷川 貴之

※2015/05/26 LIVESENSE TechNightでの発表資料です

Published in: Technology
  • Login to see the comments

[Livesence Tech Night] グリーにおけるHiveの運用

  1. 1. グリーにおけるHiveの運⽤用 ⻑⾧長⾕谷川  貴之 2015/05/26 LIVESENSE TechNight 1
  2. 2. ⾃自⼰己紹介 グリー株式会社 / データエンジニアリングG Hive/Prestoを含むHadoop周りの保守 –  ツールの開発/改善 •  Job管理理コンソール, ジョブスケジューラ, … –  利利⽤用者のサポート •  データ投⼊入の準備, 使い⽅方の説明 2015/05/26 LIVESENSE TechNight 2
  3. 3. グリーにおける分析基盤 (簡略略版) 2015/05/26 LIVESENSE TechNight 3 Game SNS
  4. 4. グリーにおける分析基盤 (簡略略版) 2015/05/26 LIVESENSE TechNight 4 Game SNS
  5. 5. 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を算出
  6. 6. マルチバージョンなHive •  v0.12 –  今動いてる中で1番古いバージョン –  最も安定、ただし遅い •  v0.13.1 –  最も利利⽤用されているバージョン –  v0.12から移⾏行行する場合はクエリの書き換えが必要 •  UDFがそのままだと動かない •  v0.14 –  単純なバッチしか流流していないバージョン –  速いが… 2015/05/26 LIVESENSE TechNight 6
  7. 7. 運⽤用でありそうな話 •  異異常により再起動せざるおえない •  ストレージが圧迫される •  データに型の違う値がある •  バグでそもそも違う値が返ってくる 2015/05/26 LIVESENSE TechNight 7 hard
  8. 8. 運⽤用でありそうな話 •  異異常により再起動せざるおえない •  ストレージが圧迫される •  データに型の違う値がある •  バグでそもそも違う値が返ってくる 2015/05/26 LIVESENSE TechNight 8 hard
  9. 9. ⼀一時ファイルが消えず… /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 再起動
  10. 10. Hive Serverの冗⻑⾧長化 再起動時にRUNNINGのクエリを殺さない 負荷がかかり過ぎた場合に切切り替えられる 2015/05/26 LIVESENSE TechNight 10 API Server Clients Web UI
  11. 11. 運⽤用でありそうな話 •  異異常により再起動せざるおえない •  ストレージが圧迫される •  データに型の違う値がある •  バグでそもそも違う値が返ってくる 2015/05/26 LIVESENSE TechNight 11 hard
  12. 12. ⻑⾧長期保存に向けデータの⼊入れ直し 定期的に列列指向フォーマットでデータを⼊入れ直す –  ファイル数を減らしNameNodeの負担を減らす –  効率率率の良良いディスク利利⽤用 2015/05/26 LIVESENSE TechNight 12 RCFile, ORCFileJSON.gz INSERT hourly, daily
  13. 13. 運⽤用でありそうな話 •  異異常により再起動せざるおえない •  ストレージが圧迫される •  データに型の違う値がある •  バグでそもそも違う値が返ってくる 2015/05/26 LIVESENSE TechNight 13 hard
  14. 14. データに型の違う値がある Hiveはschema-on-read –  それに対しMySQLはschema-on-write 弊社ではExternal tableの利利⽤用が多い –  Fluentd → HDFSに保存したJSONを参照している –  このJSONが不不正な状態で作成されている 全部 PHP のせいだ(嘘です、ごめんなさい 2015/05/26 LIVESENSE TechNight 14
  15. 15. 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)
  16. 16. 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)
  17. 17. 2015/05/26 LIVESENSE TechNight 17 _⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人_   >  ClassCastException <  ̄Y^Y^Y^Y^Y^Y^Y^Y^ ̄ ※ NumberFormatExceptionが起きるケースもある
  18. 18. 違う型のデータへの取り組み •  できるだけ変換、出来ない場合はNULL –  SerDeの箇所に変更更を加える –  “22275”→22275, false → 0, “” → NULL •  Schemaの変更更をしてもらう –  intのカラムにfloatが⼊入ってるケースなど –  変更更しないとNULLしかでてこない 2015/05/26 LIVESENSE TechNight 18
  19. 19. 運⽤用でありそうな話 •  異異常により再起動せざるおえない •  ストレージが圧迫される •  データに型の違う値がある •  バグでそもそも違う値が返ってくる 2015/05/26 LIVESENSE TechNight 19 hard
  20. 20. そもそも違う値が返ってくる(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
  21. 21. そもそも違う値が返ってくる(2/2) [HIVE-9743] Incorrect result set for vectorized left outer join 正しくJOINできてなくて0になるカラムが多数 EXPLAINを⾒見見ると明らかにおかしくなってた v1.2.0で修正済み (実際に投げて確認済み 2015/05/26 LIVESENSE TechNight 21
  22. 22. まとめ •  Hiveはバギーなので運⽤用する際は要注意 –  特にアップグレードは⼗十分な検証が必要 –  パッチを当てる運⽤用も覚悟 –  v1.2.0は多くのバグが直っているので期待 •  ログはちゃんとした形式で出⼒力力しましょう –  どこかに困る⼈人達がいます •  ⼈人数が多くない場合、⾃自社運⽤用はやめましょう –  Redshift, BigQuery, TreasureDataを使おう –  バグはその⼈人達が直してくれる 2015/05/26 LIVESENSE TechNight 22
  23. 23. 2015/05/26 LIVESENSE TechNight 23 HAPPY  HACKING

×