Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

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

gree_tech

June 02, 2015
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. 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を算出
  2. マルチバージョンなHive •  v0.12 –  今動いてる中で1番古いバージョン –  最も安定、ただし遅い •  v0.13.1 – 

    最も利利⽤用されているバージョン –  v0.12から移⾏行行する場合はクエリの書き換えが必要 •  UDFがそのままだと動かない •  v0.14 –  単純なバッチしか流流していないバージョン –  速いが… 2015/05/26 LIVESENSE TechNight 6
  3. ⼀一時ファイルが消えず… /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 再起動
  4. データに型の違う値がある Hiveはschema-on-read –  それに対しMySQLはschema-on-write 弊社ではExternal tableの利利⽤用が多い –  Fluentd → HDFSに保存したJSONを参照している

    –  このJSONが不不正な状態で作成されている 全部 PHP のせいだ(嘘です、ごめんなさい 2015/05/26 LIVESENSE TechNight 14
  5. 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)
  6. 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)
  7. 違う型のデータへの取り組み •  できるだけ変換、出来ない場合はNULL –  SerDeの箇所に変更更を加える –  “22275”→22275, false → 0,

    “” → NULL •  Schemaの変更更をしてもらう –  intのカラムにfloatが⼊入ってるケースなど –  変更更しないとNULLしかでてこない 2015/05/26 LIVESENSE TechNight 18
  8. そもそも違う値が返ってくる(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
  9. そもそも違う値が返ってくる(2/2) [HIVE-9743] Incorrect result set for vectorized left outer join

    正しくJOINできてなくて0になるカラムが多数 EXPLAINを⾒見見ると明らかにおかしくなってた v1.2.0で修正済み (実際に投げて確認済み 2015/05/26 LIVESENSE TechNight 21
  10. まとめ •  Hiveはバギーなので運⽤用する際は要注意 –  特にアップグレードは⼗十分な検証が必要 –  パッチを当てる運⽤用も覚悟 –  v1.2.0は多くのバグが直っているので期待 • 

    ログはちゃんとした形式で出⼒力力しましょう –  どこかに困る⼈人達がいます •  ⼈人数が多くない場合、⾃自社運⽤用はやめましょう –  Redshift, BigQuery, TreasureDataを使おう –  バグはその⼈人達が直してくれる 2015/05/26 LIVESENSE TechNight 22