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.

Hiveを高速化するLLAP

5,254 views

Published on

Hadoop/Spark Conference Japan 2016( http://hcj2016.eventbrite.com )で発表した資料

Published in: Technology

Hiveを高速化するLLAP

  1. 1. Hiveを高速化するLLAP ヤフー株式会社 小澤 祐也 @__john_smith__
  2. 2. About me • 小澤 祐也( @__john_smith__ ) • ヤフー株式会社 • データ&サイエンスソリューション統括本部 • データインフラ本部 開発2部 OSS開発 ←平常時の自己紹介
  3. 3. アジェンダ Hiveの復習 – MR, Tez, Spark – Hiveの限界 LLAP(Live Long and Process)の紹介 – LLAPとは – LLAPの特徴と動作 – LLAP vs Spark SQL – 実行速度 LLAPの今後
  4. 4. アジェンダ Hiveの復習 – MR, Tez, Spark – Hiveの限界 LLAP(Live Long and Process)の紹介 – LLAPとは – LLAPの特徴と動作 – LLAP vs Spark SQL – 実行速度 LLAPの今後
  5. 5. LLAPその前に.. 少しだけHiveについて復習 • 実行エンジン • 利用シーン
  6. 6. Hiveの実行エンジン • MapReduce • 今でもこれを想定する人は多い • YARN時代においてはHadoop1系に名残と言ってもよい • Tez • Sparkのライバル的存在として語られることも多い • YARNでしかうごかないがHiveやPigの実行エンジンとして欠かせ ない • Spark • Hive on Spark • Not Spark SQL • かつてSharkというものもあった…
  7. 7. Hiveの限界 • インタラクティブな処理には使えない • SQL likeな記述でMRジョブを実行するために作られた • レイテンシ < スループットな設計 • インタラクティブを求めるなら別なアーキテクチャを選択すべき? • HiveはETLまで、分析はR, Python, Sparkなどを使う • 元データが大きすぎる場合など • とはいえデータの切り出し方は試行錯誤したいので高速化されると便利
  8. 8. Hiveの限界 とはいえ最近のHiveは速い • 魔法のおまじない(※違います) • SET hive.execution.engine=tez; • カラムナ型のファイルフォーマットをサポート • ORC(やParquet) • 必要なDisk I/Oが減らせる • CBO(Cost Based Optimizer) • データの統計情報を使ったオプティマイザ • ルールベースより効率の良い最適化がされること請け合い • Vectorization • SIMD命令を利用した一括処理
  9. 9. アジェンダ Hiveの復習 – MR, Tez, Spark – Hiveの限界 LLAP(Live Long and Process)の紹介 – LLAPとは – LLAPの特徴と動作 – LLAP vs Spark SQL – 実行速度 LLAPの今後
  10. 10. LLAPとは バッチ処理では速くなったHiveをさらに高速化したい • 扱えるデータ量はそのままよりインタラクティブに! Hive2.0からの新機能 LLAPの基本的な思想 • Daemon • Cache • Multi Thread, Pipeline
  11. 11. LLAP全体像 Container Tez Job Container Tez Job Slider Container LLAP Executor Cache Executor Queue CLIやHS2から Query発行 ※AMなどは省略 Container LLAP Executor Cache Executor Queue
  12. 12. LLAP全体像 Container Tez Job Container Tez Job Slider Container LLAP Executor Cache Executor Queue CLIやHS2から Query発行 ※AMなどは省略 Container LLAP Executor Cache Executor Queue Tez一部Vertexを Daemon化
  13. 13. Daemon • Daemonの立ち上げによる起動コストの削減 • Containerの立ち上げにはJVM起動などのコストがかかる • Daemon化にはApache Sliderを利用 • Hadoop上でDaemonとして起動し任意のプロセスを走らせる • StormやMemcachedなどサンプル有 • 起動コンテナ数を動的に変更可能 • Pigと同じくらい検索しづらい
  14. 14. Hybridな環境の実現 • TezのVertexをDaemon化するのがLLAP • LLAP自体は実行エンジンではない • Resource Manager上でもDaemonとジョブは別なものとして動 作 • LLAPの発想自体は他の実行エンジンでも実現可能 • TEZ-2003 • Vertexの一部にTezコンテナの外部サービスを利用 • Daemonとして立ち上げておいたコンテナを利用 • この仕組みを利用しているため現在はTezのみに対応 • Vertexの一部または全部の実行NodeでLLAPを利用 • Hiveのジョブ自体はLLAPの有無には依存しない • 必要に応じて通常のcontainerかllapかは選択可能
  15. 15. LLAPとmode LLAPによって新たに加わるmodeという概念 • 特定のVertexがどちらのmodeで動いているか • TezのジョブをCLIが視覚的にわかりやすい • modeという項目にcontainer/llapのどちらかが記載されている • DAG中のどのVertexにLLAPを使うか • hive.llap.execution.modeで設定されるmode • LLAP deamonで動くVertex, Tezコンテナで動くVertexの設定 • none/map/auto/allがある
  16. 16. ModeとDaemon M M R none LLAPを使わない Tezのみと同じ M M R map Mapタスクのみで LLAPを使う M M R all すべてLLAPを利用 M M R auto Hiveの実行計画に 任せる
  17. 17. ModeとDaemon M M R none LLAPを使わない Tezのみと同じ M M R map Mapタスクのみで LLAPを使う M M R all すべてLLAPを利用 M M R auto Hiveの実行計画に 任せる none/map/all/auto DAG中のどのVertexに LLAPを使うかの設定
  18. 18. ModeとDaemon M M R none LLAPを使わない Tezのみと同じ M M R map Mapタスクのみで LLAPを使う M M R all すべてLLAPを利用 M M R auto Hiveの実行計画に 任せる container/llap 各Vertexがどちらの modeで動いているか
  19. 19. ModeとDaemon M M R none LLAPを使わない Tezのみと同じ M M R map Mapタスクのみで LLAPを使う M M R all すべてLLAPを利用 M M R auto Hiveの実行計画に 任せる
  20. 20. LLAP全体像 Container Tez Job Container Tez Job Slider Container LLAP Executor Cache Executor Queue CLIやHS2から Query発行 ※AMなどは省略 Container LLAP Executor Cache Executor Queue
  21. 21. LLAP全体像 Container Tez Job Container Tez Job Slider Container LLAP Executor Cache Executor Queue CLIやHS2から Query発行 ※AMなどは省略 Container LLAP Executor Cache Executor Queue In-Memory Columnar Cache
  22. 22. Cache LLAPのDaemon内でデータをcacheする • Columnar cache • In-memoryなcache機能 • データを行単位ではなく列単位でキャッシュ • ORCファイルにのみ対応 • Columnar型のデータフォーマット • インデックスを利用し必要な部分のみをキャッシュ
  23. 23. Cache LLAPのDaemon内でデータをcacheする • キャッシュアルゴリズム • FIFO, LRFU • DaemonのNodeごとにcacheを持つ • 中央集権的な仕組みはない • Node間での共有は行わない • Off-Heapの利用
  24. 24. LLAP全体像 Container Tez Job Container Tez Job Slider Container LLAP Executor Cache Executor Queue CLIやHS2から Query発行 ※AMなどは省略 Container LLAP Executor Cache Executor Queue
  25. 25. LLAP全体像 Container Tez Job Container Tez Job Slider Container LLAP Executor Cache Executor Queue CLIやHS2から Query発行 ※AMなどは省略 Container LLAP Executor Cache Executor Queue Multi Tread Pipeline
  26. 26. Multi Thread, Pipeline LLAPのDaemon内で複数のスレッドを起動 • 各スレッドがExecutorとして処理を実行 • 1デーモンあたりで複数の処理を実行可能 • Node数 * Executor数が実際に実行できる処理の並列数 • Queue • 一般的な実行待ち行列に対する扱い • 実行可能になったExecutorにアサインされる • Preemption • 長時間動きがない処理は一度諦める • Executorにアサインされたがなんらかの理由で処理を続けられないなど
  27. 27. Multi Thread, Pipeline Container LLAP Daemon Executor Queue Map 1 Query Fragment Query Fragment Executor Reduce 3 Query Fragment Query Fragment Map 2 Query Fragment Query Fragment Map 0 … Reduce 9 …
  28. 28. Multi Thread, Pipeline Container LLAP Daemon Executor Queue Map 1 Query Fragment Query Fragment Executor Reduce 3 Query Fragment Query Fragment Map 2 Query Fragment Query Fragment Map 0 … Reduce 9 … 一つのDaemonに 複数のThread
  29. 29. Multi Thread, Pipeline Container LLAP Daemon Executor QueueExecutor Reduce 3 Query Fragment Query Fragment Map 2 Query Fragment Query Fragment Map 0 … Reduce 9 … Queueにある 次の処理を実行
  30. 30. Multi Thread, Pipeline Container LLAP Daemon Executor Queue Map 1 Query Fragment Query Fragment Executor Reduce 3 Query Fragment Query Fragment Map 2 Query Fragment Query Fragment Map 0 … Reduce 9 … Preemptionによって 次の処理が先に実行され る ×
  31. 31. 改めてLLAP全体像 Container Tez Job Container Tez Job Slider Container LLAP Executor Cache Executor Queue CLIやHS2から Query発行 ※AMなどは省略 Container LLAP Executor Cache Executor Queue
  32. 32. LLAP vs Spark SQL • LLAP固有の概念 • Daemon内共通で使えるcacheはSparkにはない • Tez vs Spark • データがメモリに乗り切らない場合はTezが有利 • 既存の資産の活用 • クエリの互換性 • HQLはSQL LikeだがSQLではない • 分析環境への繋ぎこみではSparkが有利 • SQLだけではETL以上の処理をやるのは難しい • R, Pythonでの分析環境との連携 • DataFrameAPIやMLlib, GraphX • ストリーム処理 • Spark Streaming • HiveもACIDやトランザクションに対応はしてる
  33. 33. LLAPの実行速度 • Hive on TezとLLAPの速度比較 • LLAPを使うとどれくらい速くなるのか • 3回同じ処理を実行しての平均速度 • 各クエリはシーケンシャルに実行 • 設定の変更などはなし
  34. 34. LLAPの実行速度 • TPC-DSの結果(一部抜粋) • ほとんどのqueryにおいてLLAPを利用した方がはやい 0 20 40 60 80 100 120 140 160 180 200 Tez  vs  LLAP tezAVG llapAVG
  35. 35. LLAPの実行速度 • その他、様々な条件でのパフォーマンステストを現在実施中 • Daemon数 • 並列数 • 各種設定の変更による影響 • キャッシュヒットの有無による影響 • クエリごとの性質に依存した影響 • etc.
  36. 36. アジェンダ Hiveの復習 – MR, Tez, Spark – Hiveの限界 LLAP(Live Long and Process)の紹介 – LLAPとは – LLAPの特徴と動作 – LLAP vs Spark SQL – 実行速度 LLAPの今後
  37. 37. LLAPの今後 実際にLLAPを使おうと思った際に課題として上がった点 • バグ周り • 出来たばかりの機能なのでこれから使われると色々出てくるかも • 最近もデッドロックするバグがあった[HIVE-12904] • セキュリティ周り • Kerberosには対応 • キャッシュされたデータの扱い • HS2からの接続(Daemonの実行ユーザとDoAsの設定) • Cacheの洗練, Locality • HDFS Localityは考慮してくれる • cache現状では個々のNodeが個別に持っている • どこのノードがどのデータをキャッシュしてるかの考慮はなし • そもそもDaemonが立ち上がってるNodeにデータがない場合 • Cacheアルゴリズムは適切か? • タスクリストやWIPは[HIVE-7926]

×