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

Analytics end-to-end with Azure Synapse

Analytics end-to-end with Azure Synapse

(3/19開催)1st Microsoft Data Analytics Day(Online) 発表資料

「【初級から中級者向け】実践!Azure Synapse を使用した分析のエンド ツー エンド(Data Lake 構築編)」

kkuroda71

March 19, 2022
Tweet

More Decks by kkuroda71

Other Decks in Programming

Transcript

  1. 実践!Azure Synapse を使用した分析のエンド ツーエンド DataLake 構築編 1st Microsoft Data Analytics

    Day 2022/3/19 黒田 啓太
  2. 1 アジェンダ 1. はじめに(1分) 1. 検証目的・発表目的について 2. 本題(10分) 1. まえがき

    2. 分析シナリオ(対象ユーザー・分析要件) 3. データ分析基盤はどう設計したか 4. データセット(shift15M)についての説明 5. VM(Linux) ~ Azure Files までの説明 6. デルタレイクのアーキテクチャについて 7. Azure Files ~ Azure Data Lake Storageまでの説明 8. Tips(実際に実装して困ったところ・うまくいったところ) 3. 今後予定している展望(4分) 1. 日次データによるデータ分析基盤の運用 2. speed layer の実装 3. Azure Active Directory B2C による、外部ユーザーへのデータ共有
  3. 2 はじめに

  4. 3 検証目的・発表目的について 1.1 検証目的) 普段の仕事ではデータ分析基盤の開発フェーズから携わることが多いため、 設計フェーズから自分で実施して、データ分析基盤への理解を深める 発表目的) ・検証内で知りえた情報の共有をする ・ほかの方の設計思想を取り入れ、より良い設計を目指す

  5. 4 本題

  6. 5 まえがき 2.1 本テーマは、以下の Microsoft Docs を参考にユースケースのシナリオを自身で検討・実装した内容です 出典:Azure Synapse を使用した分析のエンド

    ツー エンド|Microsoft Docs
  7. 6 分析シナリオ(対象ユーザー・分析要件) 2.2 分析シナリオ:顧客が自身のコーディネートを投稿できるシステムを運用しており、 日次更新されるファッションコーディネートデータを取り込んで分析できる分析基盤を構築したい • 分析要件:200万人のユーザーのうち、アクティブユーザー* を20万人と仮定 →日次データは20万件(年間7,200万件想定) 平日の20:00

    ~ 22:00 に1日のデータの8割が連携されている ビジネス内容:ファッションのEC サイト運営 * アクティブユーザーは毎日コーディネートを投稿する • 顧客要件:瞬間のトレンドと、一定期間のトレンド両方が見たい 天気とトレンドがどう影響するか見てみたい レポートには画像も含めてほしい
  8. 7 データ分析基盤はどう設計したか 2.3 Azure Files Azure Data Lake Storage Gen2

    Serverless SQL pool (データモデリング) Spark pools (データクレンジング) Raw Data Azure Synapse Analytics workspace Landing Bronze Silver Gold Managed Virtual Network Virtual Network Azure Virtual Machine (Ubuntu 18.04 LTS) Managed Private Endpoint
  9. 8 データセット(shift15M)についての説明 2.4 出典:ZOZO, Inc./zozo-shift15m/README.md|GitHub データセット定義 { "user":{"user_id":"xxxx", "fav_brand_ids":"xxxx,xx,..."}, "like_num":"xx",

    "set_id":"xxx", "items":[ {"price":"xxxx","item_id":"xxxxxx","category_id1":"xx","category_id 2":"xxxxx"}, ... ], "publish_date":"yyyy-mm-dd" } Sample 項目名 サブ項目名 概要 set_id - 投稿された衣装を識別するID item item_id アイテムを識別するID category_id1 アイテムのカテゴリを示すID(アウター、トップスなど) category_id2 アイテムのサブカテゴリを示すID(Tシャツ、ブラウスなど) price 商品の価格(日本円) user user_id 衣装を投稿したユーザーを識別するID fav_brand_ids ユーザーがお気に入りとして投票したブランドIDのリスト like_num - この衣装が他のユーザーにお気に入りとして追加された回数 publish_date - 衣装が投稿された日付
  10. 9 Azure Virtual Machine ~ Azure Files までの説明 2.5

  11. 10 Azure Virtual Machine ~ Azure Files までの説明 2.5 Azure

    Files Raw data SMB ファイル共有 マウント Raw data ZOZO, Inc./zozo-shift15m/scripts/ Request Response ・データセットは、gitリポジトリから取得 ・Azrure VM ~ Azure Files へのデータ移行はSynapse Analytics のデータ処理フローに乗せるために実行 Azure Virtual Machine (Ubuntu 18.04 LTS)
  12. 11 Azure Virtual Machine ~ Azure Files までの説明 2.5 データ取得方法について、Azure

    Files マウントを選択した理由 ・Azure Files はファイル共有のマウントをするだけでデータを簡単に転送できる ・セルフホスティッド統合ランタイムは、現在(2022/3/19) Windows OS にしか立てることができない ・Azcopy では、スクリプトの開発に別途時間が必要 VMからデータ転送方法は以下の通り考えられる 1.VM に Azure Files のファイル共有をマウントしてデータを転送する方法 2.VMにセルフホスティッド統合ランタイムを立て、統合ランタイム経由でデータを取得する方法 3.VM からAzcopy ユーティリティを呼び出しデータを取得する方法
  13. 12 デルタレイクのアーキテクチャについて 2.6 ブロンズ テーブル さまざまなソース (JSON ファイル、RDBMS データ、IoT データなど)

    から取り込まれた生データが含まれています。 シルバー テーブル より絞り込まれたデータ ビューが提供されます。 さまざまなブロンズ テーブルからのフィールドを結合して ストリーミングレコードを強化したり、最近のアクティビティに基づいてアカウントの状態を更新したりできます。 ゴールド テーブル レポートやダッシュボードによく使用されるビジネス レベルの集計が提供されます。 これには、1 日のアクティブな Web サイト ユーザー、店舗ごとの週単位の売上、 部門ごとの四半期あたりの総収益などの集計が含まれます。 出典:ブロンズ、シルバー、ゴールドのアーキテクチャについて| Microsoft Docs
  14. 13 Azure Files ~ Azure Data Lake Storageまでの説明(Azure Files ~

    Landing) 2.7
  15. 14 Azure Files ~ Azure Data Lake Storageまでの説明(Azure Files ~

    Landing) 2.7 処理目的) マッピングデータフローやSynapse ノートブックによるデータ加工を実施するために、 Azure Data Lake Storage Gen2 へデータを移動 実装) ・Azure Files → Landing への移行は Synapse Analytics のデータコピーツールを使用 ・データコピーツール内のオプションでバイナリコピーを有効にし、複数の拡張子のファイルを一括でコピー Azure Files Landing Azure Data Lake Storage Gen2 Raw data Data copy tool
  16. 15 Azure Files ~ Azure Data Lake Storageまでの説明(Landing~ Bronze) 2.7

  17. 16 Azure Files ~ Azure Data Lake Storageまでの説明(Landing~ Bronze) 2.7

    処理目的) 生データに以下の列を付与したデータを移行 ・登録ファイル名:取り込んだファイル名 ・登録日時:ファイルを取り込んだ日時 実装) Azure Data Lake Storage(Landing) → Azure Data Lake Storage(Bronze) への移行には Synapse ノートブックを使用 Azure Data Lake Storage Gen2 Bronze Azure Data Lake Storage Gen2 Synapse Analytics spark pool Landing By Apache Software Foundation - Vectorised by Vulphere based from https://www.apache.org/logos/res/spark/spark.pdf, Apache License 2.0, https://commons.wikimedia.org/w/index.php?curid=57832155
  18. 17 Azure Files ~ Azure Data Lake Storageまでの説明(Bronze ~Silver) 2.7

  19. 18 Azure Files ~ Azure Data Lake Storageまでの説明(Bronze ~Silver) 2.7

    処理目的) Json形式で格納されているデータをリレーショナルデータベースの形式に加工 実装) Azure Data Lake Storage(Bronze) → Azure Data Lake Storage(Silver) への移行には Synapse ノートブックを使用 Azure Data Lake Storage Gen2 Bronze Azure Data Lake Storage Gen2 Synapse Analytics spark pool By Apache Software Foundation - Vectorised by Vulphere based from https://www.apache.org/logos/res/spark/spark.pdf, Apache License 2.0, https://commons.wikimedia.org/w/index.php?curid=57832155 Silver
  20. 19 Azure Files ~ Azure Data Lake Storageまでの説明(Silver~ Gold) 2.7

  21. 20 Azure Files ~ Azure Data Lake Storageまでの説明(Silver~ Gold) 2.7

    処理目的) トランザクションデータの値を月次単位で集計 実装) Azure Data Lake Storage(Silver) → Azure Data Lake Storage(Gold) への移行には、 マッピングデータフローを使用 Azure Data Lake Storage Gen2 Azure Data Lake Storage Gen2 Synapse Analytics spark pool By Apache Software Foundation - Vectorised by Vulphere based from https://www.apache.org/logos/res/spark/spark.pdf, Apache License 2.0, https://commons.wikimedia.org/w/index.php?curid=57832155 Silver Gold
  22. 21 Tips(実際に実装して困ったところ・うまくいったところ) 2.8 発生事象) 比較的大きなデータセットを Spark pool で読み込んだ際 バッファオーバーフローが発生 Job

    aborted due to stage failure: Task 1 in stage 13.0 failed 4 times, most recent failure: Lost task 1.3 in stage 13.0 (TID 267) (vm-7fc00016 executor 1): org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow. Available: 0, required: 27653953. To avoid this, increase spark.kryoserializer.buffer.max value. 原因) 以下のコマンドを実行し、ドライバーノードにすべてのデータを集めてしまったこと topitems_setschema = spark.createDataFrame(topitems.collect(), schema) 解決方法) データをワーカーノードに分散した状態で処理できるようにコードを書き換えること
  23. 22 Tips(実際に実装して困ったところ・うまくいったところ) 2.8 出典: Cluster Mode Overview - Spark 3.2.1

    Documentation (apache.org) DataFrame に対してcollect を 実行するとすべての Worker Node のデータを Driver Node に集める操作が実行される
  24. 23 今後予定している展望

  25. 24 今後予定している展望 3 1.日次データによるデータ分析基盤の運用 2.speed layer の実装 3.Azure Active Directory

    B2C による、外部ユーザーへのデータ共有 今後以下の3つの内容について検証を進めていく予定です
  26. 25 1.日次データによるデータ分析基盤の運用 3.1 出典:Azure Synapse を使用した分析のエンド ツー エンド|Microsoft Docs

  27. 26 Azure Files Azure Data Lake Storage Gen2 Serverless SQL

    pool (データモデリング) Spark pools (データクレンジング) Raw Data (履歴データ) Azure Synapse Analytics workspace Landing Bronze Silver Gold Managed Virtual Network Virtual Network Azure Virtual Machine (Ubuntu 18.04 LTS) Managed Private Endpoint 1.日次データによるデータ分析基盤の運用(構成図) 3.1 Raw Data (日次データ)
  28. 27 2.speed layer の実装 3.2 出典:Azure Synapse を使用した分析のエンド ツー エンド|Microsoft

    Docs
  29. 28 2.speed layer の実装(構成図) 3.2 Ingest Process Raw data (Stremingデータ)

    Azure Event Hub Azure Stream Analytics OlgaU - OpenWeatherMap web-sitePreviously published: https://OpenWeatherMap.com, CC 表示-継承 3.0, https://commons.wikimedia.org/w/index.php?curid=27581338による HTTP Response HTTP Request HTTP Request Azure Data Lake Storage Gen2 Data Exploer pools (ストリーミングデータ格納) Azure Synapse Analytics workspace Streaming Managed Virtual Network Virtual Network Azure Virtual Machine (Ubuntu 18.04 LTS) Managed Private Endpoint
  30. 29 3.Azure Active Directory B2C による、外部ユーザーへのデータ共有 3.3 出典:Azure Synapse を使用した分析のエンド

    ツー エンド|Microsoft Docs
  31. 30 3.Azure Active Directory B2C による、外部ユーザーへのデータ共有 3.3 Azure Data Lake

    Storage Gen2 Azure Active Directory B2C Shared Data Response Request Outside User
  32. 31 終わり