SlideShare a Scribd company logo
© 2019 NTT DATA Corporation
2019/03/19
株式会社NTTデータ 技術開発本部
猿田 浩輔
Apache Spark 2.4 and 3.0 - What's Next? -
© 2019 NTT DATA Corporation 2
 猿田 浩輔
 株式会社NTTデータ 技術開発本部
 Apache Sparkコミッタ (2015年から)
 Hadoop/SparkなどOSS並列分散処理系のテクニカルサ
ポートに従事してきた
 最近はPersistent Memoryなど新しいトレンドのハードウェア
の活用に興味
$ whoami
© 2019 NTT DATA Corporation 3
 オープンソースの並列分散処理系
 並列分散処理の面倒な部分は処理系が解決してくれる
 障害時のリカバリ
 タスクの分割やスケジューリング
 etc
What is Apache ?
大量のデータを たくさんのサーバを並べて
並列分散処理し、
現実的な時間(数分~数時間)で
目的の処理結果を得る
© 2019 NTT DATA Corporation 4
Unified Analytics Engine
Spark Core
(Sparkのデータ処理エンジンや基本的なAPIなどを含む)
Spark Streaming
(ストリーム処理)
Spark SQL
(クエリ処理)
Structured
Streaming
(ストリーム処理)
GraphX
(グラフ処理)
MLlib / Spark ML
(機械学習)
SQL
© 2019 NTT DATA Corporation 5
 近年はSpark SQLを中心とした処理系になってきており、パフォー
マンスや利便性が良くなった
 宣言的なAPIやSQL/HiveQLで処理が書ける
 オプティマイザによる最適化の恩恵が受けられる
 開発言語による性能差が出にくい
 機械学習、ストリーム処理向けのライブラリも、Spark SQLのデー
タ構造であるDataFrame / Datasetをベースとしたものが整備され
てきた
 MLlib (spark.mlパッケージ)
 Structured Streaming
RDDからDataFrame / Datasetを中心とした処理系へ
// 宣言的なAPIでクエリを記述する例
// DataFrame (テーブル上のデータ構造)にParquetフォーマットのファイルをロード
val df = spark.read.parquet(“/path/to/file”)
// 港区在住の人の平均給与を求めるクエリ
df.select($”salary”).where($”residence” === “港区”).avg()
© 2019 NTT DATA Corporation 6
 Kubernetesサポート (Spark 2.4 / 3.0)
 Project Hydrogen
 Barrier Execution Mode (Spark 2.4)
 Accelerator Aware Scheduling (Spark 3.0)
 Spark Graph (Spark 3.0)
本日主にご紹介する新機能
© 2019 NTT DATA Corporation 7
Kubernetesサポート
© 2019 NTT DATA Corporation 8
 Spark 2.3(ひとつ前のフィーチャーリリース)からKubernetes
がサポートされた
 2.3では機能不足だったSparkも徐々に完成度を上げている
Spark on Kubernetes
Spark Core
(Sparkのデータ処理エンジンや基本的なAPIなどを含む)
Spark Streaming
(ストリーム処理ラ
イブラリ)
Spark SQL
(クエリでデータ処理を記述する
ためのライブラリ)
Structured
Streaming
(ストリーム処理ラ
イブラリ)
GraphX
(グラフ処理処理ラ
イブラリ)
MLlib / Spark ML
(機械学習ライブラリ)
YARN Standalone Mesos Kubernetes
© 2019 NTT DATA Corporation 9
 Spark 2.4
 サポートする開発言語の強化
• PySpark対応(SPARK-23984)
• SparkR対応(SPARK-24433)
 クライアントモードでの動作(SPARK-23146)
• インタラクティブシェルやノートブックと組み合わせて利用できるように
なった
 Spark 3.0
 Kerberosサポート(SPARK-23257) 大体完了
• KerberizedなHDFSやHBaseなどと連携が可能に
 Driver/Executor Pod向けのユーザ定義テンプレート マージ済み
• Kubernetesらしく、宣言的に設定できる(SPARK-24434)
 ダイナミックリソースアロケーション(SPARK-24432) 3.0に向けて議論中
 External Shuffle Service(SPARK-25299) 3.0に向けて議論中
Kubernetesサポート in Spark 2.4 and 3.0
© 2019 NTT DATA Corporation 10
Project Hydrogen
© 2019 NTT DATA Corporation 11
 SparkにおけるAI(特にディープラーニング)を活用したユース
ケースをカバーするためのサブプロジェクト
 Sparkはこれまでもディープラーニングのユースケースで活用
されてきたが、浮き彫りになった弱点を強化する取り組み
 大きく3つの取り組みから成り立っている
Project Hydrogen
Barrier Execution
Mode
Optimized Data
Exchange
Accelerator Aware
Scheduling
2.4で基本部分が実装済み 3.0での導入を目標に開発
が進められている
© 2019 NTT DATA Corporation 12
 Sparkでは、ユーザが記述した処理から「ステージ」や「タス
ク」と呼ばれる処理単位が生成される
 複数のExecutorが異なるタスクを処理することでクラスタ全
体で分散処理が行われる
Sparkの処理単位(おさらい)
タスク
タスク
タスク
タスク
タスク
ステージ1 シャッフル ステージ2 シャッフル ステージ3
タスク
タスク
タスク
タスク
© 2019 NTT DATA Corporation 13
 Executorへのタスクの割り当ては、Sparkのスケジューラが
決定する
 ステージ間は依存関係になっており、先行するステージのタ
スクがすべて完了すると後続のステージのスケジューリング
が始まる
タスクのスケジューリング(おさらい)
タスク
タスク
タスク
タスク
タスク
ステージ1 シャッフル ステージ2 シャッフル ステージ3
タスク
タスク
タスク
タスク
ステージ1のタスクがすべて完了したら、
ステージ2のタスクのスケジューリングが始まる
© 2019 NTT DATA Corporation 14
 従来からのタスクスケジューリングは、データローカリティや
Executorの空コア数などに基づいて行われる
 コアを遊ばせないようにタスクがスケジューリングされる
 同じステージに含まれるタスクが一斉にスケジューリン
グされるとは限らない
 あるタスクが失敗した場合、当該タスクのみリトライされる
 ステージ内の他のタスクは影響を受けない
タスクのスケジューリング(おさらい)
タスク
タスク
タスク
進行中のタスク
スケジューリング
待ちのタスク
タスク
タスク
タスク
×
完了
完了
リトライが必要なのは
失敗したタスクだけ
© 2019 NTT DATA Corporation 15
 従来のスケジューリング方式は、各タスクが独立に動作する
前提になっており、分散ディープラーニングなどで必要とされ
る、複数のタスクの協調動作の実現が難しい
 協調動作が必要なタスクを同時にスケジューリング
 協調動作が必要なタスクのいずれかが失敗したら、他の
タスクもまとめて再スケジューリング
 スケジューリングのほかに、タスク間で同期する仕組み
もない
分散ディープラーニングにおける従来のスケジューリングの課題
タスク
タスク
タスク
進行中のタスク
スケジューリング
待ちのタスク
タスク
タスク
タスク
×
完了
完了
リトライが必要なのは
失敗したタスクだけ
© 2019 NTT DATA Corporation 16
 Barrier Execution Modeは複数のタスクの協調動作を可能
にする、新しいスケジューリング方式
 協調動作が必要なタスクが同時にExecutorに、をまとめ
てスケジューリング可能
• Executorのコアに空があっても、同時に動作が必要
なタスク数に満たなければスケジューリングしない
 協調動作が必要なタスクのいずれかが失敗した場合は、
同じステージのすべてのタスクをリトライ
 タスク間での同期のメカニズムも実装されている
 従来のスケジューリング方式と組み合わせて利用可能
Barrier Execution Mode
© 2019 NTT DATA Corporation 17
 RDD#barrierメソッドで、Barrier Execution Modeでのスケ
ジューリング対象を設定できる
 BarrierTaskContext#barrierメソッドで、タスク間の同期点を設定で
きる
 具体的な通信処理ロジックなどはDLフレームワーク側やDL
アプリケーション開発者が実装する必要がある
 Barrier Execution Modeは協調を可能にする仕掛けを提供
するだけ
Barrier Execution Mode
rdd.barrier().mapPartitions() { iter =>
val context = BarrierTaskContext.get() // バリアタスクコンテキストを取得
<何か処理>
context.barrier() // ここでタスク間の待ち合わせ
© 2019 NTT DATA Corporation 18
 3.0への導入に向けて、Project Hydrogenの中では最近議
論が活発
 Standalone / YARN / Kubernetes向けに導入が検討されて
いる
 Hadoop 3.1.2からYARNがGPUをサポート(管理し、払
い出す対象のリソースとして認識)。
 クラスタマネージャの機能と連携しながら、Spark側のスケ
ジューラもアクセラレータリソースが払い出されたExecutorへ
のタスクのスケジューリングを行う
 例えば、どのExecutor上でどのくらいのアクセラレータが
利用できるかで、タスクのスケジューリングを制御する必
要がある
 3.0ではGPU向けの機能が実装される見込み
Accelerator Aware Scheduling
© 2019 NTT DATA Corporation 19
Spark Graph
© 2019 NTT DATA Corporation 20
 これまでもSpark向けに様々なグラフ処理ライブラリがあった
 GraphX
 GraphFrames
 Spark GraphはGraphXやGraph Frameの課題を解決する
新しいグラフ処理ライブラリ
 3.0への導入に向けて議論が進められている
Spark向けのグラフ処理ライブラリ
© 2019 NTT DATA Corporation 21
 GraphX
 RDDベース
 Scala APIしか提供されていない
 あまりメンテナンスされていない
 GraphFrames
 DataFrameベース
 SparkPackagesで提供されるサードパーティパッケージ
 エッジやノードのセマンティクスが弱く、単純なグラフマッ
チングしか行えない
従来のSpark向けのグラフライブラリの問題点
© 2019 NTT DATA Corporation 22
 GraphFramesではノード集合やエッジ集合をDataFrameで表現する
 各レコードがノードやエッジに対応する
 DataFrameのレコードとして表現されるため、ノードやエッジに属性
が付与できる
 ただし、ノードやエッジそのものに「型」は定義できない
GraphFramesのデータモデル
太郎 次郎
東京 NYC
姉妹都市
居住
兄弟
居住
駐在経験
• 右のグラフで緑のノードは場所
を表し、水色のノードは人を表
す(型が違う)。
• エッジについても色ごとに種類
が異なる。
• GraphFramesではエッジやノード
の「型」を設定できないため、種
類の違いを区別できない
© 2019 NTT DATA Corporation 23
 GraphFramesではMotifsと呼ばれる簡易的なクエリでグラフマッチングが
行える
 ただし、エッジやノードに型が定義できないため、形状に基づくマッチング
しか行えない
 属性(例えばノードに関連付けられた人の名前など)を考慮したマッチング
もサポートされていない
 Motifsでマッチした結果はDataFrameとして得られるので、複雑なマッチ
ングを行う場合はDataFrameのオペレーションと併用する
GraphFramesのグラフマッチング
val motifs = g.find(“(node1)-[edge]->(node2)”)
val filtered = motifs.filter(“edge.rel = ‘居住’”)
例えば、先述のグラフで居住者と居住地を表す部分グラフを抽出したい場合
は、Motifsでマッチングした後にエッジに付与された属性が「居住」であるもの
をフィルタするひつようがある。
© 2019 NTT DATA Corporation 24
 Property Graphと呼ばれるデータモデルを扱う
 エッジやノードに「属性」だけでなく「型」が設定できる
 Cypherによるグラフマッチングが可能
 Property Graphに対して、型や属性に基づくマッチングが可能
 マッチしたエッジやノードだけでなく、付与された属性もDataFrameとして
返却可能
Spark Graph
val result: CypherResult = graph.cypher(
"""|MATCH (person: 人)-[rel: 居住]->(loc: 都市)
"""|RETURN person.name, loc.name""").stripMargin
result.df.show()
| person.name | loc.name |
| 太郎 | 東京 |
| 次郎 | 東京 |
Property Graphに対するCypherの適用例
© 2019 NTT DATA Corporation 25
その他のトピック
© 2019 NTT DATA Corporation 26
 Pandas UDFの強化(ユーザ定義集約関数やWindow関数が定義
できるようになった)
 ビルトイン関数/高階関数の拡充
 2.4では、主に配列やマップなど、複雑なデータ型を対象とし
た29個のビルトイン関数を追加
 3.0でもマップ向けの高階関数が追加される見通し
 サポートするデータソースの追加(Avro, 画像ファイル)
 Structured StreamingへForeachBatchシンクの追加
 レコード単位ではなく、DataFrame単位でのオペレーションが
記述できる(Spark StreamingのforeachRDDと似ている)
 複数のデータストアへの出力などに使える
ほかにもまだまだ・・・ in Spark 2.4
© 2019 NTT DATA Corporation 27
 Java11サポート
 既にmasterブランチ/3.0ブランチにはマージ済み
 Scala 2.12サポート
 Spark 2.4からすでにScala 2.12が利用できるが、Spark 3.0
ではScala 2.12がデフォルトになる予定
 Hadoop 3系サポート
 Sparkが依存しているHiveのバージョンも上げなければならな
い
 依存するHiveのバージョンを1.2.1から2.3.4にアップグレード
ほかにもまだまだ・・・ in Spark 3.0
© 2019 NTT DATA Corporation

More Related Content

PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PDF
インフラCICDの勘所
PDF
PostgreSQLでスケールアウト
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
PPTX
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
インフラCICDの勘所
PostgreSQLでスケールアウト
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...

What's hot (20)

PPTX
データ収集の基本と「JapanTaxi」アプリにおける実践例
PDF
NetflixにおけるPresto/Spark活用事例
PPTX
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
PDF
Apache Hadoop YARNとマルチテナントにおけるリソース管理
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PPTX
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PDF
Dockerからcontainerdへの移行
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PDF
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PPTX
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
PPT
Cassandraのしくみ データの読み書き編
PDF
[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送
PPTX
MLflowで学ぶMLOpsことはじめ
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
データ収集の基本と「JapanTaxi」アプリにおける実践例
NetflixにおけるPresto/Spark活用事例
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
Apache Hadoop YARNとマルチテナントにおけるリソース管理
アーキテクチャから理解するPostgreSQLのレプリケーション
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
Dockerからcontainerdへの移行
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Cassandraのしくみ データの読み書き編
[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送
MLflowで学ぶMLOpsことはじめ
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Ad

Similar to Apache Spark 2.4 and 3.0 What's Next? (20)

PDF
Spark 3.0が目指す、よりインテリジェントなUnified Analytics Platform(db tech showcase 2019 Tok...
PDF
Project Hydrogen and Spark Graph - 分散処理 × AIをより身近にする、Apache Sparkの新機能 - (NTTデ...
PDF
Apache spark 2.3 and beyond
PDF
Spark SQL - The internal -
PDF
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
PDF
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PPTX
Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)
PDF
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
PDF
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
PPTX
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
PPTX
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
PPTX
Spark Summit 2014 の報告と最近の取り組みについて
PDF
Apache Spark 1000 nodes NTT DATA
PDF
Spark + AI Summit 2020セッションのハイライト(Spark Meetup Tokyo #3 Online発表資料)
PDF
[db tech showcase Tokyo 2016] B31: Spark Summit 2016@SFに参加してきたので最新事例などを紹介しつつデ...
PPTX
NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PPTX
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
PDF
Apache Spark の紹介(前半:Sparkのキホン)
PDF
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Spark 3.0が目指す、よりインテリジェントなUnified Analytics Platform(db tech showcase 2019 Tok...
Project Hydrogen and Spark Graph - 分散処理 × AIをより身近にする、Apache Sparkの新機能 - (NTTデ...
Apache spark 2.3 and beyond
Spark SQL - The internal -
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
Spark Summit 2014 の報告と最近の取り組みについて
Apache Spark 1000 nodes NTT DATA
Spark + AI Summit 2020セッションのハイライト(Spark Meetup Tokyo #3 Online発表資料)
[db tech showcase Tokyo 2016] B31: Spark Summit 2016@SFに参加してきたので最新事例などを紹介しつつデ...
NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
Apache Spark の紹介(前半:Sparkのキホン)
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Ad

More from NTT DATA Technology & Innovation (20)

PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
PDF
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PDF
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
PDF
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
PDF
2025年現在のNewSQL (最強DB講義 #36 発表資料)
PDF
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
PDF
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
PDF
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
PDF
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
PDF
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PDF
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
PDF
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
PDF
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
PDF
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
PDF
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PDF
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
2025年現在のNewSQL (最強DB講義 #36 発表資料)
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)

Apache Spark 2.4 and 3.0 What's Next?

  • 1. © 2019 NTT DATA Corporation 2019/03/19 株式会社NTTデータ 技術開発本部 猿田 浩輔 Apache Spark 2.4 and 3.0 - What's Next? -
  • 2. © 2019 NTT DATA Corporation 2  猿田 浩輔  株式会社NTTデータ 技術開発本部  Apache Sparkコミッタ (2015年から)  Hadoop/SparkなどOSS並列分散処理系のテクニカルサ ポートに従事してきた  最近はPersistent Memoryなど新しいトレンドのハードウェア の活用に興味 $ whoami
  • 3. © 2019 NTT DATA Corporation 3  オープンソースの並列分散処理系  並列分散処理の面倒な部分は処理系が解決してくれる  障害時のリカバリ  タスクの分割やスケジューリング  etc What is Apache ? 大量のデータを たくさんのサーバを並べて 並列分散処理し、 現実的な時間(数分~数時間)で 目的の処理結果を得る
  • 4. © 2019 NTT DATA Corporation 4 Unified Analytics Engine Spark Core (Sparkのデータ処理エンジンや基本的なAPIなどを含む) Spark Streaming (ストリーム処理) Spark SQL (クエリ処理) Structured Streaming (ストリーム処理) GraphX (グラフ処理) MLlib / Spark ML (機械学習) SQL
  • 5. © 2019 NTT DATA Corporation 5  近年はSpark SQLを中心とした処理系になってきており、パフォー マンスや利便性が良くなった  宣言的なAPIやSQL/HiveQLで処理が書ける  オプティマイザによる最適化の恩恵が受けられる  開発言語による性能差が出にくい  機械学習、ストリーム処理向けのライブラリも、Spark SQLのデー タ構造であるDataFrame / Datasetをベースとしたものが整備され てきた  MLlib (spark.mlパッケージ)  Structured Streaming RDDからDataFrame / Datasetを中心とした処理系へ // 宣言的なAPIでクエリを記述する例 // DataFrame (テーブル上のデータ構造)にParquetフォーマットのファイルをロード val df = spark.read.parquet(“/path/to/file”) // 港区在住の人の平均給与を求めるクエリ df.select($”salary”).where($”residence” === “港区”).avg()
  • 6. © 2019 NTT DATA Corporation 6  Kubernetesサポート (Spark 2.4 / 3.0)  Project Hydrogen  Barrier Execution Mode (Spark 2.4)  Accelerator Aware Scheduling (Spark 3.0)  Spark Graph (Spark 3.0) 本日主にご紹介する新機能
  • 7. © 2019 NTT DATA Corporation 7 Kubernetesサポート
  • 8. © 2019 NTT DATA Corporation 8  Spark 2.3(ひとつ前のフィーチャーリリース)からKubernetes がサポートされた  2.3では機能不足だったSparkも徐々に完成度を上げている Spark on Kubernetes Spark Core (Sparkのデータ処理エンジンや基本的なAPIなどを含む) Spark Streaming (ストリーム処理ラ イブラリ) Spark SQL (クエリでデータ処理を記述する ためのライブラリ) Structured Streaming (ストリーム処理ラ イブラリ) GraphX (グラフ処理処理ラ イブラリ) MLlib / Spark ML (機械学習ライブラリ) YARN Standalone Mesos Kubernetes
  • 9. © 2019 NTT DATA Corporation 9  Spark 2.4  サポートする開発言語の強化 • PySpark対応(SPARK-23984) • SparkR対応(SPARK-24433)  クライアントモードでの動作(SPARK-23146) • インタラクティブシェルやノートブックと組み合わせて利用できるように なった  Spark 3.0  Kerberosサポート(SPARK-23257) 大体完了 • KerberizedなHDFSやHBaseなどと連携が可能に  Driver/Executor Pod向けのユーザ定義テンプレート マージ済み • Kubernetesらしく、宣言的に設定できる(SPARK-24434)  ダイナミックリソースアロケーション(SPARK-24432) 3.0に向けて議論中  External Shuffle Service(SPARK-25299) 3.0に向けて議論中 Kubernetesサポート in Spark 2.4 and 3.0
  • 10. © 2019 NTT DATA Corporation 10 Project Hydrogen
  • 11. © 2019 NTT DATA Corporation 11  SparkにおけるAI(特にディープラーニング)を活用したユース ケースをカバーするためのサブプロジェクト  Sparkはこれまでもディープラーニングのユースケースで活用 されてきたが、浮き彫りになった弱点を強化する取り組み  大きく3つの取り組みから成り立っている Project Hydrogen Barrier Execution Mode Optimized Data Exchange Accelerator Aware Scheduling 2.4で基本部分が実装済み 3.0での導入を目標に開発 が進められている
  • 12. © 2019 NTT DATA Corporation 12  Sparkでは、ユーザが記述した処理から「ステージ」や「タス ク」と呼ばれる処理単位が生成される  複数のExecutorが異なるタスクを処理することでクラスタ全 体で分散処理が行われる Sparkの処理単位(おさらい) タスク タスク タスク タスク タスク ステージ1 シャッフル ステージ2 シャッフル ステージ3 タスク タスク タスク タスク
  • 13. © 2019 NTT DATA Corporation 13  Executorへのタスクの割り当ては、Sparkのスケジューラが 決定する  ステージ間は依存関係になっており、先行するステージのタ スクがすべて完了すると後続のステージのスケジューリング が始まる タスクのスケジューリング(おさらい) タスク タスク タスク タスク タスク ステージ1 シャッフル ステージ2 シャッフル ステージ3 タスク タスク タスク タスク ステージ1のタスクがすべて完了したら、 ステージ2のタスクのスケジューリングが始まる
  • 14. © 2019 NTT DATA Corporation 14  従来からのタスクスケジューリングは、データローカリティや Executorの空コア数などに基づいて行われる  コアを遊ばせないようにタスクがスケジューリングされる  同じステージに含まれるタスクが一斉にスケジューリン グされるとは限らない  あるタスクが失敗した場合、当該タスクのみリトライされる  ステージ内の他のタスクは影響を受けない タスクのスケジューリング(おさらい) タスク タスク タスク 進行中のタスク スケジューリング 待ちのタスク タスク タスク タスク × 完了 完了 リトライが必要なのは 失敗したタスクだけ
  • 15. © 2019 NTT DATA Corporation 15  従来のスケジューリング方式は、各タスクが独立に動作する 前提になっており、分散ディープラーニングなどで必要とされ る、複数のタスクの協調動作の実現が難しい  協調動作が必要なタスクを同時にスケジューリング  協調動作が必要なタスクのいずれかが失敗したら、他の タスクもまとめて再スケジューリング  スケジューリングのほかに、タスク間で同期する仕組み もない 分散ディープラーニングにおける従来のスケジューリングの課題 タスク タスク タスク 進行中のタスク スケジューリング 待ちのタスク タスク タスク タスク × 完了 完了 リトライが必要なのは 失敗したタスクだけ
  • 16. © 2019 NTT DATA Corporation 16  Barrier Execution Modeは複数のタスクの協調動作を可能 にする、新しいスケジューリング方式  協調動作が必要なタスクが同時にExecutorに、をまとめ てスケジューリング可能 • Executorのコアに空があっても、同時に動作が必要 なタスク数に満たなければスケジューリングしない  協調動作が必要なタスクのいずれかが失敗した場合は、 同じステージのすべてのタスクをリトライ  タスク間での同期のメカニズムも実装されている  従来のスケジューリング方式と組み合わせて利用可能 Barrier Execution Mode
  • 17. © 2019 NTT DATA Corporation 17  RDD#barrierメソッドで、Barrier Execution Modeでのスケ ジューリング対象を設定できる  BarrierTaskContext#barrierメソッドで、タスク間の同期点を設定で きる  具体的な通信処理ロジックなどはDLフレームワーク側やDL アプリケーション開発者が実装する必要がある  Barrier Execution Modeは協調を可能にする仕掛けを提供 するだけ Barrier Execution Mode rdd.barrier().mapPartitions() { iter => val context = BarrierTaskContext.get() // バリアタスクコンテキストを取得 <何か処理> context.barrier() // ここでタスク間の待ち合わせ
  • 18. © 2019 NTT DATA Corporation 18  3.0への導入に向けて、Project Hydrogenの中では最近議 論が活発  Standalone / YARN / Kubernetes向けに導入が検討されて いる  Hadoop 3.1.2からYARNがGPUをサポート(管理し、払 い出す対象のリソースとして認識)。  クラスタマネージャの機能と連携しながら、Spark側のスケ ジューラもアクセラレータリソースが払い出されたExecutorへ のタスクのスケジューリングを行う  例えば、どのExecutor上でどのくらいのアクセラレータが 利用できるかで、タスクのスケジューリングを制御する必 要がある  3.0ではGPU向けの機能が実装される見込み Accelerator Aware Scheduling
  • 19. © 2019 NTT DATA Corporation 19 Spark Graph
  • 20. © 2019 NTT DATA Corporation 20  これまでもSpark向けに様々なグラフ処理ライブラリがあった  GraphX  GraphFrames  Spark GraphはGraphXやGraph Frameの課題を解決する 新しいグラフ処理ライブラリ  3.0への導入に向けて議論が進められている Spark向けのグラフ処理ライブラリ
  • 21. © 2019 NTT DATA Corporation 21  GraphX  RDDベース  Scala APIしか提供されていない  あまりメンテナンスされていない  GraphFrames  DataFrameベース  SparkPackagesで提供されるサードパーティパッケージ  エッジやノードのセマンティクスが弱く、単純なグラフマッ チングしか行えない 従来のSpark向けのグラフライブラリの問題点
  • 22. © 2019 NTT DATA Corporation 22  GraphFramesではノード集合やエッジ集合をDataFrameで表現する  各レコードがノードやエッジに対応する  DataFrameのレコードとして表現されるため、ノードやエッジに属性 が付与できる  ただし、ノードやエッジそのものに「型」は定義できない GraphFramesのデータモデル 太郎 次郎 東京 NYC 姉妹都市 居住 兄弟 居住 駐在経験 • 右のグラフで緑のノードは場所 を表し、水色のノードは人を表 す(型が違う)。 • エッジについても色ごとに種類 が異なる。 • GraphFramesではエッジやノード の「型」を設定できないため、種 類の違いを区別できない
  • 23. © 2019 NTT DATA Corporation 23  GraphFramesではMotifsと呼ばれる簡易的なクエリでグラフマッチングが 行える  ただし、エッジやノードに型が定義できないため、形状に基づくマッチング しか行えない  属性(例えばノードに関連付けられた人の名前など)を考慮したマッチング もサポートされていない  Motifsでマッチした結果はDataFrameとして得られるので、複雑なマッチ ングを行う場合はDataFrameのオペレーションと併用する GraphFramesのグラフマッチング val motifs = g.find(“(node1)-[edge]->(node2)”) val filtered = motifs.filter(“edge.rel = ‘居住’”) 例えば、先述のグラフで居住者と居住地を表す部分グラフを抽出したい場合 は、Motifsでマッチングした後にエッジに付与された属性が「居住」であるもの をフィルタするひつようがある。
  • 24. © 2019 NTT DATA Corporation 24  Property Graphと呼ばれるデータモデルを扱う  エッジやノードに「属性」だけでなく「型」が設定できる  Cypherによるグラフマッチングが可能  Property Graphに対して、型や属性に基づくマッチングが可能  マッチしたエッジやノードだけでなく、付与された属性もDataFrameとして 返却可能 Spark Graph val result: CypherResult = graph.cypher( """|MATCH (person: 人)-[rel: 居住]->(loc: 都市) """|RETURN person.name, loc.name""").stripMargin result.df.show() | person.name | loc.name | | 太郎 | 東京 | | 次郎 | 東京 | Property Graphに対するCypherの適用例
  • 25. © 2019 NTT DATA Corporation 25 その他のトピック
  • 26. © 2019 NTT DATA Corporation 26  Pandas UDFの強化(ユーザ定義集約関数やWindow関数が定義 できるようになった)  ビルトイン関数/高階関数の拡充  2.4では、主に配列やマップなど、複雑なデータ型を対象とし た29個のビルトイン関数を追加  3.0でもマップ向けの高階関数が追加される見通し  サポートするデータソースの追加(Avro, 画像ファイル)  Structured StreamingへForeachBatchシンクの追加  レコード単位ではなく、DataFrame単位でのオペレーションが 記述できる(Spark StreamingのforeachRDDと似ている)  複数のデータストアへの出力などに使える ほかにもまだまだ・・・ in Spark 2.4
  • 27. © 2019 NTT DATA Corporation 27  Java11サポート  既にmasterブランチ/3.0ブランチにはマージ済み  Scala 2.12サポート  Spark 2.4からすでにScala 2.12が利用できるが、Spark 3.0 ではScala 2.12がデフォルトになる予定  Hadoop 3系サポート  Sparkが依存しているHiveのバージョンも上げなければならな い  依存するHiveのバージョンを1.2.1から2.3.4にアップグレード ほかにもまだまだ・・・ in Spark 3.0
  • 28. © 2019 NTT DATA Corporation

Editor's Notes

  • #2: みなさん、こんばんは。 今日私からは、Apache Sparkの現時点での最新フィーチャーリリースである2.4と、 そして今年リリースが期待される3.0の新機能をいくつかご紹介したいと思います。