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

OCI Data Flow 概要

OCI Data Flow 概要

oracle4engineer

May 31, 2022
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. OCI Data Flow ご紹介 Subhead goes here on one line

    日本オラクル株式会社 2023年5月
  2. Oracle が提供する包括的な Cloud Data Platform ソリューション OCI Data Platformサービス全体像 Copyright

    © 2023, Oracle and/or its affiliates 2 Storage OCI Core Infrastructure Compute/ GPU Database Networking OCI Data Platform Services メタデータ管理 収集 蓄積/管理 提供 可視化/分析/データサイエンス Container Instance* *: Coming Soon! Data Catalog Data Integration GoldenGate GoldenGate Stream Analytics Streaming Object Storage ADW/ATP Exadata Database MySQL Heatwave Big Data Data Flow ADW/ATP Exadata Database MySQL Heatwave Big Data Data Flow Analytics Artificial Intelligence Data Science Query * Cloud SQL Oracle Machine Learning/ AutoML
  3. https://spark.apache.org/ Apache Spark Copyright © 2023, Oracle and/or its affiliates

    3 • 巨大なデータに対して高速に分散処理を行うオープンソースのフレームワーク • Scalaで書かれ、クラスタ化されたJVM上で稼働する • Scala と Java のアプリケーションはネイティブに対応 • Python の実行をサポート (PySpark) → データサイエンス系のソリューションと親和性が高い • Spark SQL → 非構造化データをSQLライクに処理できる • Spark Streaming → ストリーミング・データをSQLライクに処理できる (永遠に増え続ける行を持つテーブルを処理) Apache Spark™ is a unified analytics engine for large-scale data processing. 多くのOCIサービスのベースとなっている • Big Data Service (Sparkのクラスタ環境を提供) • Data Flow (Sparkジョブ実行サービス) • Data Integration (Spark SQLをベースにしたETL) • Stream Analytics (Spark Streaming ベースのGUIリアルタイム分析) • Data Science (PySpark実行環境をNotebookで提供)
  4. Apache Sparkの応用分野 Copyright © 2023, Oracle and/or its affiliates 4

    IT全般 コマース 製造業 ヘルスケア 金融 などなど… • 大量データの一括処理、High Performance Computing • ETL処理の代替 • バッチ処理 → ストリーム処理方式によるリアルタイム化 • アクセスログ、視聴ログ、通信ログの集計、分析 • 機械学習と組み合わせた需要予測 • リアルタイム・リコメンデーション • 顧客リテンション • 工場内センサーからのストリーミングデータの収集・分析 • 車載機と連携した各種テレマティクス・サービスの提供 • 設計フェーズにおける各種シミュレーション • ゲノム・データの分析 • 医療画像の分析 • 医療機器、ウェアラブル端末からのデータ処理・解析 • 緊急シミュレーション、リスク計算 • 不正検知、アンチ・マネーロンダリング
  5. Oracle Cloud Infrastructure Data Flow Copyright © 2023, Oracle and/or

    its affiliates 5 v Consolidated Insight Near-zero operations Cloud-native Security Managed Output Simple troubleshooting Infrastructure Data Management Database – Data Lake - Access – Integration - Preparation CPU – GPU – Storage - Network ビッグデータ/機械学習 のアプリケーションを より迅速に提供 ◼ 管理オーバーヘッドがほぼゼロの、フルマネージド Spark サービス ◼ EMR、Databricks、またはHadoopから既存のSpark アプリをインポート/実行可能 ◼ 実行した分だけの完全従量制サービス • ビッグデータ活用において、機械学習やグラフ解析処理などでは、 大量データを高速に処理することが求められる • 大量データの並列分散処理を実現するためのフレームワーク Apache Sparkの環境を、クラウド上でServerlessのフルマネ ジードサービスとして提供するのがOCI Data Flow
  6. クラウドネイティブなサーバレスタイプのSpark as a Service Oracle Cloud Infrastructure Data Flow Copyright

    © 2023, Oracle and/or its affiliates 6 Data Flow Instance Data Flow Instance Data Flow Instance Data Flow Instance Data Flow Instance Object Storage Data Flow Instance 処理対象のデータ(CSV等) 処理後のデータ 1. アプリとデータをロード 2. インスタンスが生成され、分散処理を実行 ※動的に起動し終了後は削除されます 3. 処理後のデータを出力 データ処理を行うための プログラム (Sparkアプリケーション)
  7. わずかなセットアップでSparkアプリケーションが実行可能 Data Flow アプリケーションの作成手順 Copyright © 2023, Oracle and/or its

    affiliates 8 Spark アプリケーションのタイプやアーカイブが 格納されている Object Storage を指定 実行時にSparkアプリケーションが 要求するパラメータを渡す
  8. • 実行インフラの管理が不要 • OCI Data Flowは動的にプロビジョニングされ、ジョブを実行してシャットダウンされる • 統合的に実行状況を把握可能 • Sparkのすべてのジョブ、それを実行したユーザー、所要時間、処理量等を一覧表示が可能

    • 最もリソースを消費しているジョブを見つけて、ワンクリックでそれを実行したオーナーを確認可能 OCI Data Flow の優位性 Copyright © 2023, Oracle and/or its affiliates 9
  9. ※2022月12月時点 OCI Data Flow でサポートしている環境情報 Copyright © 2023, Oracle and/or

    its affiliates 11 Supported Spark Versions Spark 2.4.4, 3.0.2, 3.2.1 Supported Application Type Java Scala SparkSQL PySpark (Python 3 only) 最新のサポート状況: https://docs.oracle.com/ja-jp/iaas/data-flow/using/dfs_getting_started.htm#before_you_begin
  10. Copyright © 2023, Oracle and/or its affiliates 12 • 90か国以上でデータや分析ツールを提供しているグローバ

    ル企業 • 企業の信頼リスク管理や不正防止、マーケティングのター ゲット絞り込みや意思決定の自動化などのサービスを提供 RDBMSとSparkのようなオープンソースサービスの 両方をサポートするデータプラットフォームを提供 • OCI上でコールセンターデータの分析、財務分析、不 正検出システムを実行 • ブラジルなどの新興市場の信用格付けをOCIへ移行 • オンプレミス、他クラウドの両方からワークロードを移行 Solution • Data Flow, Big Data Service, Data Catalog, Data Science, ExaCS/ADW, etc. Results • グローバルなワークロードのためのクラウドデータプラット フォームの提供 • ミッションクリティカルなオラクルやオープンソースのワーク ロードをサポート • 新興市場に必要なアジリティと低コストをサポート • 他クラウドに比べ、最大60%の低コストを実現
  11. • 非構造化データのETL処理をSpark APIを活用し、効率的に実装する • 従量課金によってコストを抑えたい場合に特に有効 ユースケース: ETL処理 Copyright © 2023,

    Oracle and/or its affiliates 13 Object Storage 非構造化データ ログ、センサーデータ、etc. Sparkアプリケーション Data Flow Autonomous Data Warehouse Spark APIを 活用したETL Spark Oracle DataSource* *: JDBCデータソースを拡張し、Oracle Databaseへの接続を簡略化したもの
  12. • OCI Streaming, Apache Kafkaと組み合わせたストリーム処理の実行基盤として活用 ユースケース: リアルタイムストリーミング処理 Copyright © 2023,

    Oracle and/or its affiliates 15 Object Storage Sparkアプリケーション Data Flow Autonomous Data Warehouse Spark Streamingを 用いたストリーム処理 checkpoint ファイル IoT、センサー ソーシャルメディア Streaming Stream/Topic pub sub Spark Oracle DataSource* *: JDBCデータソースを拡張し、Oracle Databaseへの接続を簡略化したもの
  13. フルマネージドなApache Sparkサービス Data Flow Copyright © 2023, Oracle and/or its

    affiliates 16 ▪ ユースケース • Sparkアプリケーションを迅速に提供できる環境が欲しい • オンプレミス、3rd Partyクラウド上の既存Sparkアプリケーション の実行環境コストを削減したい ▪ 特徴 • フルマネージドなApache Sparkの実行環境を提供 • Spark実行環境の運用上のオーバーヘッドを削減し、ビッグ データアプリケーションの開発に集中可能 • 統合的に実行状況の把握が可能 • 実行されたジョブやユーザー、リソース等を一覧表示可能 ▪ 価格 • Data Flowの使用自体は無料 • ※実行時にプロビジョニングされたOCIリソースやアプリケーション/データの格納先で あるObject Storageに課金が発生 Object Storage Data Flow Instance Data Flow Instance Data Flow Instance 処理対象のデータ (CSV等) 処理後のデータ 1. アプリとデータをロード 3. 処理後のデータを出力 Spark アプリケーション 2. インスタンスが生成され、 並列分散処理を実行
  14. • Spark 3.2.1でData Flowを実行する場合、デフォルトでDelta Lakeがサポートされるように • Delta Lake • Lakehouseアーキテクチャを構築できるオープンソースのストレージフレームワーク

    • 既存のData Lake(Object Storage, S3, HDFS, etc.)上で以下の機能を提供 • ACIDトランザクションのサポート • スケーラブルなメタデータの処理 • スキーマのばらつきの自動処理(≒ 取り込み中に不正なレコードが挿入されることを防止できる) • タイムトラベル(≒ ロールバックや履歴の監査証跡をサポート) • merge/update/deleteの操作をサポート(※素のSparkでは、”overwrite”, “append”のみがサポート)による複雑なユースケースの実現 詳細: https://docs.oracle.com/ja-jp/iaas/data-flow/using/delta-lake-about.htm Delta Lakeのサポート Copyright © 2023, Oracle and/or its affiliates 20
  15. • Data Flowで実行されるワークロードに対して、GPUシェイプが利用可能に • 既存のSparkアプリケーションをコードを修正することなく、高速化し価格の最適化が可能に • Data Flowでは、NVIDIA RAPIDS Accelerator

    for Apache Spark が使用される • 利用には、Spark 3.2.1+および、サービスリクエストの申請が必要 Data FlowでGPUシェイプが利用可能に Copyright © 2023, Oracle and/or its affiliates 22
  16. 2015年米国国内線飛行履歴データから航空会社別平均到着遅延時間を集計する 2015 Flight Delays and Cancellations (https://www.kaggle.com/usdot/flight-delays) Demo: Data Flowを用いたETL処理

    Copyright © 2023, Oracle and/or its affiliates 23 join avg sort avg.json spark-etl-java-1.0.0.jar flights.csv airlines.csv {"AIRLINE_NAME":"Alaska Airlines Inc.","FLIGHTS_COUNT":172521,"AVG_ARRIVAL_DELAY_MINUTES":"-0.98"} {"AIRLINE_NAME":"Delta Air Lines Inc.","FLIGHTS_COUNT":875881,"AVG_ARRIVAL_DELAY_MINUTES":"0.19"} {"AIRLINE_NAME":"Hawaiian Airlines Inc.","FLIGHTS_COUNT":76272,"AVG_ARRIVAL_DELAY_MINUTES":"2.02"} {"AIRLINE_NAME":"American Airlines Inc.","FLIGHTS_COUNT":725984,"AVG_ARRIVAL_DELAY_MINUTES":"3.45"} {"AIRLINE_NAME":"US Airways Inc.","FLIGHTS_COUNT":198715,"AVG_ARRIVAL_DELAY_MINUTES":"3.71"} {"AIRLINE_NAME":"Southwest Airlines Co.","FLIGHTS_COUNT":1261855,"AVG_ARRIVAL_DELAY_MINUTES":"4.37"} {"AIRLINE_NAME":"Virgin America","FLIGHTS_COUNT":61903,"AVG_ARRIVAL_DELAY_MINUTES":"4.74"} {"AIRLINE_NAME":"United Air Lines Inc.","FLIGHTS_COUNT":515723,"AVG_ARRIVAL_DELAY_MINUTES":"5.43"} {"AIRLINE_NAME":"Skywest Airlines Inc.","FLIGHTS_COUNT":588353,"AVG_ARRIVAL_DELAY_MINUTES":"5.85"} {"AIRLINE_NAME":"American Eagle Airlines Inc.","FLIGHTS_COUNT":294632,"AVG_ARRIVAL_DELAY_MINUTES":"6.46"} {"AIRLINE_NAME":"Atlantic Southeast Airlines","FLIGHTS_COUNT":571977,"AVG_ARRIVAL_DELAY_MINUTES":"6.59"} {"AIRLINE_NAME":"JetBlue Airways","FLIGHTS_COUNT":267048,"AVG_ARRIVAL_DELAY_MINUTES":"6.68"} {"AIRLINE_NAME":"Frontier Airlines Inc.","FLIGHTS_COUNT":90836,"AVG_ARRIVAL_DELAY_MINUTES":"12.50"} {"AIRLINE_NAME":"Spirit Air Lines","FLIGHTS_COUNT":117379,"AVG_ARRIVAL_DELAY_MINUTES":"14.47"}
  17. Demo: 全体像 Copyright © 2023, Oracle and/or its affiliates 24

    処理対象のデータ CSV 処理後のデータ JSON Sparkアプリケーション Jarファイル Data Flow executor driver Object Storage 実行依頼: $ oci data-flow run create …
  18. 高度に抽象化されたSpark APIを用いて、ETL処理を実装 ご参考: ETLを実行するJavaのコード Copyright © 2023, Oracle and/or its

    affiliates 25 public static void main(String... args) { SparkSession spark = SparkSession.builder().appName("spark-etl-java").getOrCreate(); etl(spark, args[0], args[1], args[2]); LOGGER.log(Level.INFO, "ETL was successful!"); spark.stop(); } private static void etl(SparkSession sparkSession, String airlinesPath, String flightPath, String output) { Dataset<Row> airlinesData = sparkSession.read() .option("header", "true") .option("inferSchema", "true") .csv(airlinesPath); LOGGER.log(Level.INFO, "airlines"); airlinesData.show(); Dataset<Row> flightData = sparkSession.read() .option("header", "true") .option("inferSchema", "true") .csv(flightPath); LOGGER.log(Level.INFO, "flights"); flightData.show(); Dataset<Row> airlinesDataOfficial = airlinesData.select( airlinesData.col("IATA_CODE"), airlinesData.col("AIRLINE").as("AIRLINE_NAME") ); LOGGER.log(Level.INFO, "airlinesOfficial"); airlinesDataOfficial.show(); Dataset<Row> flightJoinedData = flightData.join( airlinesDataOfficial, flightData.col("AIRLINE").equalTo(airlinesDataOfficial.col("IATA_CODE")), "left" ); LOGGER.log(Level.INFO, "flightJoined"); flightJoinedData.show(); Dataset<Row> avgDelay = flightJoinedData.groupBy(flightJoinedData.col("AIRLINE_NAME")) .agg( count(flightJoinedData.col("AIRLINE")).alias("FLIGHTS_COUNT"), avg(flightJoinedData.col("ARRIVAL_DELAY")).alias("AVG_ARRIVAL_DELAY")) .withColumn("AVG_ARRIVAL_DELAY_MINUTES", format_number(col("AVG_ARRIVAL_DELAY"), 2)) .coalesce(1) .sortWithinPartitions(col("AVG_ARRIVAL_DELAY")) .drop("AVG_ARRIVAL_DELAY"); LOGGER.log(Level.INFO, "avgDelay"); avgDelay.show(); avgDelay.write().json(output); } Sparkアプリケーション(DataFlow)のエントリーポイント Object Storageに格納されているairlines.csvを読み込む oci://shukawam@orasejapan/dataflow-etl/data/airlines.csv Object Storageに格納されているflights.csvを読み込む oci://shukawam@orasejapan/dataflow-etl/data/flights.csv airlinesDataを元に、列名を変更したDatasetを定義 flightDataとairlinesDataOfficialをleft join flightData.AIRLINE = airlinesDataOfficial.IATA_CODE flightJoinedData.AIRLINE_NAMEで集計 & ソート処理 • 航空会社ごとに飛行数の数の総和を計算 • 平均遅延時間を算出 → 小数点第2位までに丸める • 平均遅延時間で昇順にソート • 出力に不要な列を削除 Object StorageにJSONフォーマットで結果を出力