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

Hive Distributed Profiling System in Treasure D...

okumin
November 29, 2022

Hive Distributed Profiling System in Treasure Data - Japanese version #tdtechtalk

『Hive Distributed Profiling System in Treasure Data』の日本語版スライド。

English version -> https://speakerdeck.com/okumin/hive-distributed-profiling-system-in-treasure-data-english-version-number-tdtechtalk

TreasureData Tech Talk 2022にて発表
https://techplay.jp/event/879660

okumin

November 29, 2022
Tweet

More Decks by okumin

Other Decks in Programming

Transcript

  1. © 2022 Treasure Data, Inc. Public 2 Agenda - TDのクエリエンジンサービスについて

    - HDPS(Hive Distributed Profiling System)の概要 - HDPS活用例 - HDPSを実装する上で工夫した点 - 今後の取り組み
  2. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public TD’s Query Engine Service 4 Web UI CDP BI tool SQL etc. Plazma (TD’s Storage) Managed by Query Engine team Data
  3. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public - SQLをインタラクティブに実行するクエリエディタ Web UI(アナリスト向け) 5
  4. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public - フルマネージドDigdagであるTreasure Data Workflowを利用可能 ワークフローエンジン(データエンジニア向け) 6
  5. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public - SQLを書かずにデータ分析 CDP - Customer Data Platform(マーケター向け) 7 Compile
  6. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public - CPU/Method Profiling - どのメソッドや行がCPUを消費しているのか? Profilingとは? 9
  7. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public - HDPS = Hive Distributed Profiling System - HDPSはHive用に設計されたプロファイリングツール - 大量のメトリクスを蓄積可能 - 柔軟かつスケーラブルな分析機能 Hive Distributed Profiling System(HDPS) 10 Hadoop Metrics DB (Plazma) Hive Query Hive Query Hive Query Hive Query Stack Traces Aggregation Visualization Query Simulator HDPS UI
  8. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public - Hiveクエリのあらゆる断面からプロファイリング HDPS UI - 柔軟な検索パラメータ 11
  9. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public - CPU消費の激しい行をランキング形式で表示 HDPS UI - ボトルネックレポート 12
  10. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public - フレームグラフを用いてスタックトレース上のホットなパスを可視化 HDPS UI - Flame Graph 13 GroupByOperator.processにカーソルを当てた状態
  11. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public 活用例 15 - トラブルシューティング - 性能問題の調査に活用 - 改善ポイントの発見 - 意思決定に活用
  12. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public トラブルシューティング: HIVE-26184 16 - あるクエリがデータ量等に対して異常に遅い、とのお問い合わせ - HDPSを用いてCOLLECT_SET UDFが原因であると即座に発見
  13. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public トラブルシューティング: HIVE-26184 17 - CPU時間の98%を java.util.HashSet#clear が消費していた - COLLECT_SETの時間計算量O(N^2) - Apache HiveにPull Requestを送り、最終的に20倍以上高速化
  14. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public 改善ポイントの発見 18 - HDPSはアカウントやジョブをまたいで分析可能 CDP関連のクエリを全部分析
  15. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public 改善ポイントの発見 19 - どの部分が改善できそうか探索 - 例: 大変だけど大幅な改善が見込めそう -> プロジェクト提案 - 例: 数%の改善だけど修正範囲は数行 -> 次のスプリントで - 例: 大変な上に少ししか改善しない -> やらない
  16. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public 1. 分析対象を好きなバージョンやパラメータで実行したい! 2. スタックトレースを実行コンテキストと一緒に保存したい! 3. 大量のスタックトレースを保存したい! 4. 大量のスタックトレースを柔軟な条件で分析したい! 5. GUIがほしい! 工夫した点 21 Hadoop Metrics DB (Plazma) Hive Query Hive Query Hive Query Hive Query Stack Traces Aggregation Visualization Query Simulator HDPS UI
  17. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public 工夫した点 (1) 22 Hadoop Metrics DB (Plazma) Hive Query Hive Query Hive Query Hive Query Stack Traces Aggregation Visualization Query Simulator HDPS UI 1. 分析対象を好きなバージョンやパラメータで実行したい! 2. スタックトレースを実行コンテキストと一緒に保存したい! 3. 大量のスタックトレースを保存したい! 4. 大量のスタックトレースを柔軟な条件で分析したい! 5. GUIがほしい!
  18. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public - クエリシミュレータで任意のバージョン・設定でスタックトレースを取得 - 本番環境のクエリを安全にリプレイ可能 - 詳しくは『Journey of Migrating Millions of Queries on The Cloud』を参照 - https://arxiv.org/abs/2205.08664 query_fetcher: handler: com.treasudata.hadoop.hive.simulator.executor.fetch.SqlQueryFetcherImpl input_params: fetch_query_sql: | SELECT time, database, query, elapsed, job_id, success, ... FROM hive WHERE TD_TIME_RANGE(time, '2022-11-01', '2022-11-02') AND elapsed >= 600 query_executor: query_execution_params: - id: 1 hive_docker_version: worker8-hive:0.1.109-8478 hive_configurations: td.hive.jfr.enabled: "true" mapreduce.map.java.opts: "-XX:-Inline" Query Simulator 23 テスト対象をリストアップ TD Hiveバージョン サンプリング有効化 隔離された環境で実行するのでこんな設定も反映可能
  19. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public 工夫した点 (2) 24 Hadoop Metrics DB (Plazma) Hive Query Hive Query Hive Query Hive Query Stack Traces Aggregation Visualization Query Simulator HDPS UI 1. 分析対象を好きなバージョンやパラメータで実行したい! 2. スタックトレースを実行コンテキストと一緒に保存したい! 3. 大量のスタックトレースを保存したい! 4. 大量のスタックトレースを柔軟な条件で分析したい! 5. GUIがほしい!
  20. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public Java Flight Recorder 25 - Java Flight Recorderを使用してスタックトレースのサンプルを取得 - OpenJDKに同梱されているので導入が容易 - Java APIがHiveと連携する上で便利 final Recording recording = new Recording(settings); recording.setToDisk(true); recording.setDestination(dumpFile); recording.start(); // You can measure anything ... recording.stop(); try (RecordingFile file = new RecordingFile(dumpFile)) { while (file.hasMoreEvents()) { final RecordedEvent event = file.readEvent(); final RecordedStackTrace stackTrace = event.getStackTrace(); stackTrace.getFrames().forEach(frame -> { final String methodName = frame.getMethod().getName(); final int lineNumber = frame.getLineNumber(); sendToAnywhere(methodName, lineNumber); }); } }
  21. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public Hive on Tezとの連携 26 - HiveはSQLやデータによって実行されるコードパスが大きく変わる - Hive on Tezは単一JVM上で様々なタスクを実行する - タスクに関連するIDをスタックトレースと一緒に保存すると分析時に便利 - 例: TD job id, YARN application id, Tez vertex id, Tez task attempt id ReduceSinkOperator TableScanOperator SelectOperator GroupByOperator GroupByOperator FileSinkOperator Map 1 Map 1 Reduce 2 Map 1 Reduce 2 Map 1 Plan Reduce 2 Plan Container(JVM) Container(JVM)
  22. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public 工夫した点 (3) 27 Hadoop Metrics DB (Plazma) Hive Query Hive Query Hive Query Hive Query Stack Traces Aggregation Visualization Query Simulator HDPS UI 1. 分析対象を好きなバージョンやパラメータで実行したい! 2. スタックトレースを実行コンテキストと一緒に保存したい! 3. 大量のスタックトレースを保存したい! 4. 大量のスタックトレースを柔軟な条件で分析したい! 5. GUIがほしい!
  23. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public Plazmaへメトリクスを保存 28 - PlazmaはTreasure Dataが開発する分散ストレージ - スケーラブルなストレージとストリーミングインサートAPI - 現在200兆以上のレコードを保存 - 大量にスタックトレースを生成してもPlazmaなら問題なく受け止められる - 1000並列で1秒間に10回サンプリングすると毎秒1万 <- 余裕 - 各スタックトレースに30以上のメソッド呼び出しが含まれる <- 余裕
  24. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public 工夫した点 (4) 29 Hadoop Metrics DB (Plazma) Hive Query Hive Query Hive Query Hive Query Stack Traces Aggregation Visualization Query Simulator HDPS UI 1. 分析対象を好きなバージョンやパラメータで実行したい! 2. スタックトレースを実行コンテキストと一緒に保存したい! 3. 大量のスタックトレースを保存したい! 4. 大量のスタックトレースを柔軟な条件で分析したい! 5. GUIがほしい!
  25. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public 分析にもHiveを使用 30 - 大量のスタックトレースと関連メトリクスの読み込み・結合が発生 - 毎秒1万のスタックトレース => 1時間分で3600万 - HDPS UIは入力パラメータをもとにSQLを生成しHiveで実行 - Hiveのスケーラビリティにより、入力データがどれだけ巨大でも分析可能 SELECT ... FROM tez_task_attempt_method_sampling AS t JOIN tez_vertex_finished AS v ON t.vertex_id = v.vertex_id JOIN tez_vertex_execution_plan AS p ON t.vertex_id = p.vertex_id JOIN hive AS h ON t.job_id = h.job_id WHERE TD_TIME_RANGE(t.time, '2022-11-21 00:00:00', '2022-11-22 00:00:00') AND TD_TIME_RANGE(v.time, '2022-11-21 00:00:00', '2022-11-22 00:00:00') AND TD_TIME_RANGE(p.time, '2022-11-21 00:00:00', '2022-11-22 00:00:00') AND TD_TIME_RANGE(h.time, '2022-11-21 00:00:00', '2022-11-22 00:00:00') AND t.thread = 'TezChild' AND v.vertex_name LIKE 'Reducer %' AND h.query LIKE '-- CDP: Audience:' AND p.plan LIKE '%Merge Join Operator%'
  26. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public 工夫した点 (5) 31 Hadoop Metrics DB (Plazma) Hive Query Hive Query Hive Query Hive Query Stack Traces Aggregation Visualization Query Simulator HDPS UI 1. 分析対象を好きなバージョンやパラメータで実行したい! 2. スタックトレースを実行コンテキストと一緒に保存したい! 3. 大量のスタックトレースを保存したい! 4. 大量のスタックトレースを柔軟な条件で分析したい! 5. GUIがほしい!
  27. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public HDPS UI 32 - 結果をいい感じに一覧するためにフレームグラフが欲しかった - TypeScript + React + d3-flame-graph
  28. © 2022 Treasure Data, Inc. Public © 2022 Treasure Data,

    Inc. Public 今後やりたいこと 34 - Apache Hiveに分析結果やパッチをフィードバック - TDはOSSの改善をする上で最も良質なデータを集められる環境 - Trino(PrestoSQL)に対しても似たようなシステムを構築 - 似たシステムなので似た課題がある