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

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

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. TreasureData Tech Talk 2022
    Hive Distributed Profiling System in Treasure Data
    @okumin(Shohei Okumiya)
    日本語版

    View Slide

  2. © 2022 Treasure Data, Inc. Public
    2
    Agenda
    - TDのクエリエンジンサービスについて
    - HDPS(Hive Distributed Profiling System)の概要
    - HDPS活用例
    - HDPSを実装する上で工夫した点
    - 今後の取り組み

    View Slide

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

    View Slide

  4. © 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. © 2022 Treasure Data, Inc. Public
    8
    HDPS(Hive Distributed Profiling System)の概要

    View Slide

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

    View Slide

  10. © 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  14. © 2022 Treasure Data, Inc. Public
    14
    HDPS活用例

    View Slide

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

    View Slide

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

    View Slide

  17. © 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倍以上高速化

    View Slide

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

    View Slide

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

    View Slide

  20. © 2022 Treasure Data, Inc. Public
    20
    HDPSを実装する上で工夫した点

    View Slide

  21. © 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

    View Slide

  22. © 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がほしい!

    View Slide

  23. © 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バージョン
    サンプリング有効化
    隔離された環境で実行するのでこんな設定も反映可能

    View Slide

  24. © 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がほしい!

    View Slide

  25. © 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);
    });
    }
    }

    View Slide

  26. © 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)

    View Slide

  27. © 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がほしい!

    View Slide

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

    View Slide

  29. © 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がほしい!

    View Slide

  30. © 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%'

    View Slide

  31. © 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がほしい!

    View Slide

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

    View Slide

  33. © 2022 Treasure Data, Inc. Public
    33
    今後の取り組み

    View Slide

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

    View Slide

  35. © 2022 Treasure Data, Inc. Public
    35
    Thank you

    View Slide