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

サンプルコードで学ぶSparkライブラリの使い方

 サンプルコードで学ぶSparkライブラリの使い方

サンプルコードで学ぶSparkライブラリの使い方

oracle4engineer

February 15, 2021
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Apache Sparkことはじめ 2019年11月26日 園田憲一 日本オラクル株式会社 サンプルコードから学ぶSparkライブラリの使い方 Oracle Code Night Oracle Big Data Jam Session #1
  2. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | アジェンダ • Apache Sparkの概要 • サンプル・コードから学ぶSparkライブラリ • オラクルのApache Sparkサーバレスサービス 3
  3. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • カリフォルニア大学バークレー校 AMPLabで開発スタート • 2014年Apache Software Foundationから初回リリース • 短期間で圧倒的な人気を獲得した OSS • Hadoopと比較し圧倒的な性能 • 生産性の高いライブラリ群 • 豊富なエコシステム 5 Apache Spark
  4. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • 並列分散処理 – 大規模なデータや計算処理を複数の サーバーで分担 – 同時並行で要件時間内に処理を完 了させる • 並列分散処理の複雑なコードが不 要 – タスクの分割、ノードのリソース管理、 タスクスケジューリング、排他制御、 ノード障害時のハンドリング、データ の多重化 6 Apache Sparkとは? 膨大な データ 膨大な 入出力処理 膨大な 計算処理 1 hour 3 hours 1 hour 1 hour 膨大な データ 入出力処理を 複数台で分担 計算処理を 複数台で分担 膨大な処理時間 要件時間内で処理を完了させる
  5. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 7 Hadoop(MapReduce)の課題 処理1 処理2 HDFS データ 処理3 Read Read Read 連続処理実行時 反復処理実行時 処理間で発生する中間データを都度 HDFSへ読み書きするためIOが多発 一度読み込んだデータを再利用ができ ず処理回数に比例してHDFSへのIO多発 結果、処理時間の大半をI/Oが占めるということも。。。 HDFS 処理1 処理2 処理3 初期 データ 結果 データ 中間 データ 中間 データ Read Write Write Read
  6. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 8 Sparkが解決するMapReduceの課題 連続処理実行時 反復処理実行時 中間データをメモリに書き込み、処理 間で受け渡し 一度読み込まれたデータはメモリ上に キャッシュされ、何度でも再利用可能 メモリ HDFS 処理1 処理2 処理3 初期 データ 結果 データ 中間 データ 高速 高速 高速 高速 中間 データ メモリ 処理1 処理2 HDFS 処理3 高速 高速 高速 データ キャッシュ 結果、HDFSへのI/O処理回数が削減。スループット、レ イテンシが向上し、トータル処理時間を削減
  7. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Spark Clientノード – Sparkアプリケーションの実行をMasterノードに要求 • Spark Masterノード – Workerノードの空リソース量と要求されたスペックを考慮し、 Workerノードにタスク処理実行プロセスの起動を要求 • Spark Workerノード • 実行プロセスを起動し、要求されたタスクを処理 • クラスタ・ソフトウェア – ノードのリソース管理、タスク・スケジューリングなど – Spark Standalone, YARN, Mesos, Kubernetesが利用可能 • データ・ソース – HDFS、RDB、オブジェクトストレージなど • Spark UI – ジョブの一覧、詳細が確認できるGUI管理画面 9 基本構成 Sparkクラスタ Client ②処理要求 ③処理の割り振り ①Sparkアプリ実行 Master Worker01 Worker02 Worker03 ④実行プロセスが処理を実行 クラスタ・ソフトウェア HDFS Spark UI
  8. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Sparkに同梱されてい るクラスタ管理システ ム • 環境構築が容易 10 Sparkで利用できるクラスタ管理ツール Spark Standalone • 歴史的にHadoop時 代から利用されてい るクラスタ管理システ ム • インストールベースが 一番多い • HDFSを利用する場合、 データローカリティが 考慮されIOが効率化 される • 処理に割り当てる CPUコア数の配分を 動的に変えるなどき め細かい制御が可能 • Spark 2.3からネイティ ブサポート • OCI OKEでSparkを利 用可能 Apache Spark on Kubernetes: Maximizing Big Data Performance on Container Engine for Kubernetes
  9. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | サンプルコードから学ぶ Sparkライブラリ Subtitle 11
  10. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Spark Core – Resilient Distribute Dataset(Sparkの内部的な 基本データ構造)を構成 – 基本的なデータ操作 • Spark SQL – SQLによるデータ操作 – その他のライブラリと併用可 • Spark Streaming – リアルタイム処理用のライブラリ • Spark ML – 機械学習用、統計処理用ライブラリ • Spark Graph – グラフ処理用ライブラリ • 抽象度の高いライブラリ群 • 開発言語 – Scala, Java, Python, R, SQL 12 Apache Sparkのライブラリ http://spark.apache.org/
  11. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Sparkのデータ処理にSQLを利用でき るようにするライブラリ • 非構造化データにスキーマ(列、行、 データ型)を定義 • データ処理 – 集計処理、ソート処理、結合処理 • その他のライブラリ(ML、Streaming、 Graph)でも利用可能 • 対応ファイルフォーマット – CSV, XML, JSON – Avro, Parquet, ORC 13 Spark SQL // csvファイルからのデータロード scala> val movies =spark.read.option("header", "true").csv ("/home/test/movies.csv") // 全件検索 scala> spark.sql("select * from movies").show +-----------------+--------------------+----+ | actor| title|year| +-----------------+--------------------+----+ |McClure, Marc (I)| Freaky Friday|2003| |McClure, Marc (I)| Coach Carter|2005| |McClure, Marc (I)| Superman II|1980| |McClure, Marc (I)| Apollo 13|1995| |McClure, Marc (I)| Superman|1978| |McClure, Marc (I)| Back to the Future|1985| |McClure, Marc (I)|Back to the Futur...|1990| |Cooper, Chris (I)| Me, Myself & Irene|2000|
  12. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Spark SQL CLI – Sparkに同梱されるCLIのSQLクライアン ト • Thrift JDBC/ODBC Server – JDBCをサポートするBIツール、CLIツー ルなどからSparkクラスタにクエリを実 行 14 SQLの実行 // thrift serverへの接続 beeline> !connect jdbc:hive2://localhost:10015 testuser testpass // 表の作成 0: jdbc:hive2://localhost:10015> create table movies(actor string, title string, year int) row format delimited fields terminated by ',' lines terminated by '¥n’; // csvファイルからのデータロード 0: jdbc:hive2://localhost:10015> load data local inpath '/home/opc/data/movies.csv' into table movies; // SQLの実行 0: jdbc:hive2://localhost:10015> select * from movies; +-----------------+---------------+-------+ | actor| title| year| +-----------------+---------------+-------+ |McClure, Marc (I)| Freaky Friday| 2003| |McClure, Marc (I)| Coach Carter| 2005| |McClure, Marc (I)| Superman II| 1980| |McClure, Marc (I)| Apollo 13| 1995| // thrift serverの起動 $SPARK_HOME/sbin/start-thriftserver.sh --hiveconf hive.server2.thrift.port=10015 // beelineの起動 $SPARK_HOME/bin/beeline beeline>
  13. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 15 Spark Streaming • 入力データをリアルタイムに処理するためのライブラリ • 絶え間なく発生するデータを次々と処理して次々と結果を返し、その 結果をもとにアクションを実行 連 携 シ ス テ ム 結果 データ 処理 結果 データ 処理 結果 データ 処理 デ ー タ ソ ー ス 時刻 T のデータ 時刻 T + 1 のデータ 時刻 T + 2 のデータ ストリーム ストリーム ストリーム 連携 連携 連携 アクション アクション アクション 時間軸 Spark クラスタ
  14. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 16 Spark Streaming サンプル・コード // 入力ストリームデータの定義(1秒間隔でバッチ処理を繰り返す) val ssc = new StreamingContext(sc, Seconds(1)) //入力データソースの定義(9999番ポートでオープンしたTCPソケッ トにローカルホストから接続) val lines = ssc.socketTextStream("localhost", 9999) //ストリームデータのテキストをスペース区切りで分割 val words = lines.flatMap(_.split(" ")) //単語をカウントし、単語と出現数を標準出力に出力 val pairs = words.map(word => (word, 1)) val wordCounts = pairs.reduceByKey(_ + _) wordCounts.print() // 定義したストリーム処理の開始 ssc.start() Hello, 1 World, 1 Hello world ワード カウント 処理 デ ー タ ソ ー ス テキストデータ テキストデータ テキストデータ I, 1 am, 1 sonoken, 1 I am sonoken ワード カウント 処理 hoge, 2 hoge hoge ワード カウント 処理 サンプルコードの概要 • ストリームデータ:随時入力されるテキストデータ • Streaming処理:ワード分割、ワードカウント • 結果: 単語と、単語の出現数
  15. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 17 Spark Streaming サンプル・コード Hello, 1 World, 1 Hello world ワード カウント 処理 デ ー タ ソ ー ス テキストデータ テキストデータ テキストデータ I, 1 am, 1 sonoken, 1 I am sonoken ワード カウント 処理 hoge, 2 hoge hoge ワード カウント 処理 サンプルコードの概要 • ストリームデータ:随時入力されるテキストデータ • Streaming処理:ワード分割、ワードカウント • 結果: 単語と、単語の出現数 $ nc –lk 9999 hello world I am sonoken hoge hoge ------------------------------------------- Time: 1357008430000 ms ------------------------------------------- (hello,1) (world,1) ------------------------------------------- Time: 1482008230000 ms ------------------------------------------- (I,1) (am,1) (sonoken,1) ------------------------------------------- Time: 1322001210000 ms ------------------------------------------- (hoge,2) ターミナル1 : ストリームデータの生成 ターミナル2 : 結果の出力
  16. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • 機械学習、統計処理のライブラリ • 様々なアルゴリズムをサポート 18 Spark ML カテゴリ アルゴリズム 分類回帰 SVM(Support Vector Machine), Logistic Regression, Linear Regression, Naive Bayes, Decision Trees, Ensembles of Trees(Random Forests, Gradient boosted Trees), Isotonic Regression 協調フィルタリング ALS(Alternating Least Squares) クラスタリング K-means, Gaussian mixture, PIC(Power Iteration Clustering), Latent Dirichlet Allocation(LAD), Streaming k-means 次元削減 SVD(Singular Value Decomposition), PCA(Principal Component Analysis) 特徴抽出、変換 TF-IDF, Workd2Vec, StnadardScalar, Normalizer, Feature selection, ElementwiseProduct, PCA 頻出パターンマイニング FP-Growth, Association Rues, RefixSpan 学習 データ 学習ア ルゴリ ズム 予測 モデル 予測 データ 予測 結果 入力 出力 機械学習のワークフロー 学習フェーズ 予測フェーズ
  17. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 19 Spark ML サンプルコード 学習 データ 正解 ラベル 学習データの準備 学習器 特徴 抽出 パイプライン 学習 予測モデル 正解 ラベル 予測結果 未知の データ 学習データの準備 学習フェーズ 予 測 フ ェ ー ズ +---+----------------+-----+ | id| text|label| +---+----------------+-----+ | 0| spark i j k| ? | | 1| l m n| ? | | 2| mapreduce spark| ? | | 3| apache hadoop| ? | +---+----------------+-----+ +---+----------------+-----+ | id| text|label| +---+----------------+-----+ | 0| a b c d e spark| 1.0| | 1| b d| 0.0| | 2| spark f g h| 1.0| | 3|hadoop mapreduce| 0.0| | 4| b spark who| 1.0| | 5| g d a y| 0.0| | 6| spark fly| 1.0| | 7| was mapreduce| 0.0| | 8| e spark program| 1.0| | 9| a e c l| 0.0| | 10| spark compile | 1.0| | 11|hadoop software | 0.0| +---+----------------+-----+ 入力 出力 サンプルコードの概要 正解ラベル付きの学習データ(テキストデータ)か ら正解の特徴を学習し、未知のデータの正解ラ ベルを予測する。 • 学習データ:テキストデータ(正解ラベル付き) • 未知のデータ:テキストデータ
  18. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 20 Spark ML サンプルコード 学習 データ 正解 ラベル 学習データの準備 学習器 特徴 抽出 パイプライン 学習 予測モデル 正解 ラベル 予測結果 未知の データ 学習データの準備 学習フェーズ 予 測 フ ェ ー ズ training = spark.createDataFrame([ (0, "a b c d e spark", 1.0), (1, "b d", 0.0), (2, "spark f g h", 1.0), (3, "hadoop mapreduce", 0.0), (4, "b spark who", 1.0), (5, "g d a y", 0.0), (6, "spark fly", 1.0), (7, "was mapreduce", 0.0), (8, "e spark program", 1.0), (9, "a e c l", 0.0), (10, "spark compile", 1.0), (11, "hadoop software", 0.0) ], ["id", "text", "label"]) 入力 出力
  19. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 21 Spark ML サンプルコード 学習 データ 正解 ラベル 学習データの準備 学習器 特徴 抽出 パイプライン 学習 予測モデル 正解 ラベル 予測結果 未知の データ 学習データの準備 学習フェーズ 予 測 フ ェ ー ズ // 特徴抽出の定義 tokenizer = Tokenizer(inputCol='text', outputCol='words') hashingTF = HashingTF(inputCol=tokenizer.getOutputCol(), outputCol='features') // 学習器としてロジスティック回帰を指定 lr = LogisticRegression(maxIter=10) // 特徴抽出と学習器をPipelineとして登録 pipeline = Pipeline(stages=[tokenizer, hashingTF, lr]) //学習を実行し、予測モデルを生成 model = pipeline.fit(training) 入力 出力
  20. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 22 Spark ML サンプルコード 学習 データ 正解 ラベル 学習データの準備 学習器 特徴 抽出 パイプライン 学習 予測モデル 正解 ラベル 予測結果 未知の データ 学習データの準備 学習フェーズ 予 測 フ ェ ー ズ // 予測データの準備 test = spark.createDataFrame([ (4, "spark i j k"), (5, "l m n"), (6, "mapreduce spark"), (7, "apache hadoop") ], ["id", "text"]) // 予測の実行、結果の確認 predict = model.transform(test) predict.select('id', 'text', 'probability', 'prediction').show(truncate=False) +---+---------------+------------------------------------------+----------+ |id |text |probability |prediction| +---+---------------+------------------------------------------+----------+ |4 |spark i j k |[0.0015595237733491984,0.9984404762266509]|1.0 | |5 |l m n |[0.9999950075858843,4.9924141156278E-6] |0.0 | |6 |mapreduce spark|[0.059606908424120426,0.9403930915758795] |1.0 | |7 |apache hadoop |[0.9947588318910259,0.005241168108974087] |0.0 | +---+---------------+------------------------------------------+----------+ 入力 出力
  21. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • 世の中のあらゆる“関係性”を定義し、分析 するライブラリ • データモデル – 「頂点(Vertex) 」」と「辺(Edge) 」からなるデータ構 造 – 「頂点(Vertex) 」」と「辺(Edge) 」に属性を定義でき る – 頂点に「モノ」、辺に頂点同志の「関係」を定義す る – 「頂点」、「辺」に情報を定義できる • データ処理の例 – 任意の頂点までの経路を表示 – 任意の関係の頂点を全てリスト – 任意の頂点に繋がっている頂点の数のカウント – ページランク 23 Spark Graph 頂点(Vertex) 辺(Edge) グラフデータモデル ユーザーA (田中, 46歳) ユーザーB (鈴木, 20歳) ユーザーC (山田, 18歳) ユーザーD (林, 35歳) ユーザーE (井上, 60歳) follow follow follow follow follow 商品A (本, 1980円) 商品B (鉛筆, 100円) ユーザーA (山田, 18歳) ユーザーB (小山, 25歳) 購入済 商品C (ノート, 200円) 購入済 購入済 SNSの例 ショッピングサイトの例
  22. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 24 Spark Graph サンプル・コード ユーザーa (Alice, 34) ユーザーd (Deck, 52) ユーザーb (Bob, 36) ユーザーc (Charlie, 30) ユーザーe (Evan, 20) ユーザーf (Farr, 52) friend friend family family Colleague friend Colleague // 頂点(各ユーザー)の定義 >>> v = sqlContext.createDataFrame([ ... ("a", "Alice", 34), ... ("b", "Bob", 36), ... (“c", "Charlie", 30), ... ("d", "Deck", 52), ... ("e", "Evan", 20), ... ("f", "Farr", 18), ... ], ["id", "name", "age"]) // 辺(各ユーザーの関係)を定義 >>> e = sqlContext.createDataFrame([ ... ("a", "b", "family"), ... ("a", "c", "friend"), -----------中略-------------------- ... ("e", "a", "Colleague"), ... ("e", "c", "friend"), ... ("f", "c", "friend"), ... ], ["src", "dst", "relationship"]) // 頂点と辺をグラフデータモデルとして定義 >>> g = GraphFrame(v, e) 登録されているユーザーの中から友人関係のユー ザーのみを検索する • 頂点(Vertex) : 登録ユーザー • 辺(Edge) : 登録ユーザーの関係
  23. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 25 Spark Graph サンプル・コード // 友達の関係にあるユーザーを検索する >>> g.edges.filter("relationship = 'friend'").show() +---+---+------------+ |src|dst|relationship| +---+---+------------+ | a| c| friend| | c| a| friend| | c| f| friend| | c| e| friend| | e| c| friend| | f| c| friend| +---+---+------------+ ユーザーa (Alice, 34) ユーザーd (Deck, 52) ユーザーb (Bob, 36) ユーザーc (Charlie, 30) ユーザーe (Evan, 20) ユーザーf (Farr, 52) friend friend family family Colleague friend Colleague ユーザーa (Alice, 34) ユーザーd (Deck, 52) ユーザーb (Bob, 36) ユーザーc (Charlie, 30) ユーザーe (Evan, 20) ユーザーf (Farr, 52) friend friend family family Colleague friend Colleague 登録されているユーザーの中から友人関係のユー ザーのみを検索する • 頂点(Vertex) : 登録ユーザー • 辺(Edge) : 登録ユーザーの関係
  24. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 26 グラフ分析の適用例 購買記録 顧客と商品 リコメンデーション 影響力のある 人物の特定 パターン・マッチング コミュニティの検出 Twitterなど 私と買い物が似ている人物に よって購入された商品と、その商 品と一緒に購入されている商品 を教えてください ソーシャル・ネットワーク上で中 心的な役割を担っている人物を 教えてください(マーケティング分 析など) 似通った人達やつながりのある 人達のグループを教えてください (ターゲット・マーケティングなど) ある不正取引と同様の取引パ ターンがみられる全ての預金口 座を探してください(不正検出や 行動分析など)
  25. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Spark関連のOCI サーバレスサービス Subtitle 27
  26. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • OCI Big Data Service – Clouderaのサーバレス・サービス – クラスタの作成、管理を容易に – Cloudera Managerなどこれまでの使い勝手は そのままで • OCI Data Flow Service – Apache Sparkのサーバレス・サービス – Sparkクラスタの構築、管理が不要 – 3ステップでSpark処理が完了 • データとプログラムのアップロード • プログラムをアプリケーションとして登録 • アプリケーションの実行 28 Spark関連のOCIサーバーレスサービス
  27. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Confidential – Oracle Internal 29 Native OCI Service leveraging modern cloud infrastructure • Flexible compute shapes – from small VMs to Bare Metal • High scale, high bandwidth advanced networking • Direct attached/Block NVMe storage or Object Storage • Simplified integration with other OCI Services Manage it all from a single console OCI Big Data Service
  28. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Confidential – Oracle Internal 30 OCI Big Data Service
  29. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Confidential – Oracle Internal 31 Specify minimal settings to create cluster • One-click to create cluster with advanced security and highly available Hadoop services Select Cloudera version to deploy • “Cloud Also” - match on premise for compatibility • Choose newer versions to take advantage of latest features Choose Network Settings • Use centralized network management OCI Big Data Service
  30. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Confidential – Oracle Internal 32 Pick the node shape and storage to meet your needs. For example: • Create small dev/test clusters using VMs • Create temporal cluster for a data science experiment • Deploy large scale production cluster using Bare Metal compute Leverage inexpensive and scalable Object Storage • Backup/restore • Persistent storage for temporal cluster OCI Big Data Service
  31. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Confidential – Oracle Internal 33 Modify cluster to support changing processing requirements • Scale out/in compute • Expand block storage Suspend cluster when not in use • Pay for compute only when in use • Preserve data Monitor state of all deployed clusters OCI Big Data Service
  32. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Confidential – Oracle Internal 34 • Use familiar Hadoop and Oracle tools • Monitor cluster status using integrated console OCI Big Data Service
  33. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Confidential – Oracle Internal 35 Use Cloudera Manager to manage and monitor Hadoop services • Monitor existing services running on the cluster • Add services that were not automatically configured • Fine tune configuration Add 3rd party applications and open source solutions OCI Big Data Service
  34. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Confidential – Oracle Internal 36 Use Cloudera Manager administration tools to add services • Complete support for EDH features Use Big Data Service service console to enable security and high availability OCI Big Data Service
  35. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Confidential – Oracle Internal 37 Add services required for your solution • SQL engines, search, NoSQL and more Manage the services using Cloudera Manager OCI Big Data Service
  36. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Confidential – Oracle Internal 38 Enable Oracle SQL Queries against data in HDFS, Hive, Kafka, NoSQL and Object Stores • Cloud SQL Query Server is deployed to its own server • Uses Hive for metadata Uses Cloud SQL Cells on each data node to optimize query processing • Filters and aggregates data OCI Big Data Service
  37. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Confidential – Oracle Internal 39 Scale out the cluster by adding new worker nodes • Uses the same compute shape assigned to workers OCI Big Data Service
  38. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Confidential – Oracle Internal 40 Easily Add Storage to the Cluster • Clusters using Block Storage can grow to meeting increasing requirements OCI Big Data Service
  39. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | OCI Data Flow Walkthrough: Serverless SQL Reporting Oracle Confidential – Restricted 41 Data Flow Oracle Object Storage OCI Data Flow Apache Spark Processing Serverless + Secure Report Output SQL Code Data Results In this walkthrough see how Data Flow: 1. Runs Spark SQL jobs without any up-front cluster provisioning or management. 2. Manages performance and shows results in the browser. 3. Makes it easy for anyone, developer or analyst alike, to use Spark-powered Big Data. OCI Data Flow Service
  40. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Step 1: Upload a SQL Script to OCI Object Storage Oracle Confidential – Restricted 42 OCI Data Flow Service
  41. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Step 2: Create a SQL Application Oracle Confidential – Restricted 43 OCI Data Flow Service
  42. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Step 3: Configure the SQL Application Oracle Confidential – Restricted 44 Use the SQL Script uploaded to OCI Storage OCI Data Flow Service
  43. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Step 4: Run the Application Oracle Confidential – Restricted 45 Adjust settings on-the-fly as needed. OCI Data Flow Service
  44. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Step 5: Select the Run and Load the Spark UI (Optional) Oracle Confidential – Restricted 46 OCI Data Flow Service
  45. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Step 6: Runtime Performance in the Spark UI (Optional) Oracle Confidential – Restricted 47 OCI Data Flow Service
  46. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Step 7: Details of the Completed Run Oracle Confidential – Restricted 48 OCI Data Flow Service
  47. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Step 8: View Logs to See Report Output Oracle Confidential – Restricted 49 OCI Data Flow Service