SlideShare a Scribd company logo
© 2020 NTT DATA Corporation
2020年7月31日
株式会社NTTデータ 技術開発本部
猿田 浩輔
Apache Spark 3.0新機能紹介
- 拡張機能やWebUI関連のアップデート -
© 2020 NTT DATA Corporation 2
$ whoami
 猿田 浩輔
 株式会社NTTデータ 技術開発本部
 シニア・ソフトウェアエンジニア / Apache Sparkコミッタ
 Hadoop/SparkなどOSS並列分散処理系の開発やテクニカルサポートに従事
 普及活動の一環で講演や書籍執筆なども
 Twitter: @raspberry1123
© 2020 NTT DATA Corporation 3
本日のお話
 先日リリースされたApache Spark 3.0の新機能のうち、主に拡張機能や、WebUI関連
のアップデートを解説
 Accelerator Aware Scheduling
 プラグイン
 WebUI
© 2020 NTT DATA Corporation 4
Accelerator Aware Scheduling
© 2020 NTT DATA Corporation 5
Accelarator Aware Schedulingとは
 GPUやFPGAなどのアクセラレータを、複数のタスク間で効率的にシェアで
きるようスケジューリングする仕組み
 Project Hydrogenと呼ばれる、AI関連のワークロードを指向した取り組みのひ
とつ
 AI関連のワークロードではGPUを活用することが当たり前になってきている
ことが、この取り組みの背景
 DLフレームワークをSpark向けに開発する場合、Spark内部からGPUなどのア
クセラレータを扱える必要がある
 これまではGPUなどのアクセラレータを想定した作りになっていなかった
© 2020 NTT DATA Corporation 6
これまでのSparkはアクセラレータの割り当て制御が不十分
 YARNやKubernetesなどは既にGPUをサポートしているはずでは?
 YARNやKubernetesがGPUの割り当てを制御するのはコンテナやPodの単位
 コンテナ/Pod単位ではGPUが適切に分離される
Executor
(コンテナやPod内で動作)
GPU GPU
GPU
GPU
GPU
GPU
ワーカノードに搭載
されているGPU
NodeManager/Workerは、
GPUプールの中から要求
された数のGPUを割り当
ててコンテナ/Podを起動
割り当てられている最中
のGPUは、他のコンテナ
やPodに割り当てられた
り、アクセスされないよ
うに制御される
ワーカノード
© 2020 NTT DATA Corporation 7
これまでのSparkはアクセラレータの割り当て制御が不十分
 SparkではExecutorプロセスがコンテナやPod内で動作するが、Executorの中
で更に複数のタスクがスロット分だけ並列で実行される
 YARNやKubernetesはコンテナ/Podの中身については関知しないので、タスク
に対してGPUをどのように割り当てるかは制御できない
Executor
GPU GPU GPUなどのアクセラレータはタスクに
対して割り当てが制御されていないため、
競合や無駄が生じる可能性がある
ワーカノード
タスクA タスクB
© 2020 NTT DATA Corporation 8
Accelerator Aware Schedulingによるアクセラレータの効率的なシェア
 Executorにどれだけアクセラレータを割り当てるかだけではなく、タスクに
対して割り当てる数を設定できる
 タスクのスケジューリングは、要求する種類/数のアクセラレータを満足する
スロットに対して行われる
Executor
GPU GPU
タスクに割り当てられたアクセラ
レータは他のタスクからアクセス
されないように分離されるGPU GPU
ワーカノード
タスクA タスクB
© 2020 NTT DATA Corporation 9
Accelerator Aware Schedulingの利用例
 Executorやタスクに割り当てるアクセラレータの数などを設定する(この例で
はGPU)
 アプリ側では、TaskContext#resourcesで、タスクに割り当てられたGPUのハ
ンドルを取得できる
context = TaskContext.get()
// タスクに割り当てられたGPUのハンドルを取得
assigned_gpu = context.resources()[“gpu”][0]
with tf.device(assigned_gpu):
<何か処理>
// Executorあたり4つGPUを割り当てる
spark.executor.resource.gpu.amount=4
// タスクあたりに割り当てるGPUの数
spark.executor.task.gpu.amount=2
// Executorに割り当てられたGPUを検出するスクリプトの設定 (※1)
spark.executor.resource.gpu.discoveryScript=...
※1: サンプルあり(examples/src/main/scripts/getGpusResources.sh)
© 2020 NTT DATA Corporation 10
Accelerator Aware Schedulingの開発状況
 Spark 3.0で主要なクラスタマネージャには対応
 YARN/Kubernetes/Standaloneに対応(Mesosには未対応)
 WebUIからもアクセラレータの割り当て状況が確認できる
© 2020 NTT DATA Corporation 11
プラグイン
© 2020 NTT DATA Corporation 12
プラグイン機能のアップデート
 実はSpark 2.4からひっそりと導入されていたプラグイン機能が拡張された
 主なアップデートは以下の通り
 Driver向けのプラグインも実装可能になった(従来はExecutor向けのみ)
 DriverプラグインとExecutorプラグイン間でRPCによる通信も可能
 ユーザ定義のメトリクスが実装可能になった
 プラグイン利用のための設定や配布方法は以下のドキュメントにまとめられ
ている
 https://spark.apache.org/docs/latest/monitoring.html#advanced-
instrumentation
© 2020 NTT DATA Corporation 13
プラグインの実装方法
 Driver向けのプラグインとExecutor向けのプラグインをペアで実装する
 プラグインのペアはSparkPluginのサブクラスとして定義する
 executorPluginとdriverPluginをオーバーライドし、それぞれのプラグイ
ンを返すように実装する
 以下の例ではScalaで実装しているが、SparkPluginはJavaのinterfaceと
して定義されているので、Javaでも実装可能
class MySparkPlugin extends SparkPlugin {
override def executorPlugin(): ExecutorPlugin = new MyExecutorPlugin()
// プラグインを利用しない場合はnullを返せば良い
override def driverPlugin(): DriverPlugin = null
}
© 2020 NTT DATA Corporation 14
プラグインの実装方法
 Driver向けのプラグインとExecutor向けのプラグインをペアで実装する
 init / shutdownに初期化/終了時の処理を実装する
 Executor/Driverの起動時および終了時に呼び出される
 RPCを実装する場合はDriverPlugin#receiveでメッセージ受信時の処理を実装
する(送信については後述する)
 DriverPlugin#registerMetricsについては後述する
class MyDriverPlugin extends DriverPlugin {
override def init(sc: SparkContext, ctx: PluginContext): j.u.Map[String, String] = { /* 初期化 */ }
override def shutdown(): Unit = { /*後始末*/ }
override def receive(message: Object): Object = { /*RPCメッセージ受信時の処理 */}
override def registerMetrics(appId: String, ctx: PluginContext): Unit = { /*メトリクスの登録 */ }
}
class MyExecutorPlugin extends ExecutorPlugin {
override def init(ctx: PluginContext, extraConf: j.u.Map[String, String]): Unit = { /* 初期化 */ }
override def shutdown(): Unit = { /*後始末*/ }
}
© 2020 NTT DATA Corporation 15
PluginContext
 PluginContext経由で以下の情報にアクセスできる
 SparkConf : conf()
 ExecutorのID: executorID()
 ホスト名: hostname()
 Executor/Driverに割り当てられているCPU/メモリ/アクセラレータの情
報: resources()
 Executor/Driverのメトリクスレジストリ: metricsRegistry()
• ユーザ定義のメトリクスを実装するのに必要
 またPluginContextのsend/askでDriverプラグインとExecutorプラグイン間の
RPCが可能
 send: 単にメッセージを送信する
 ask: メッセージを送信し、応答を待つ
© 2020 NTT DATA Corporation 16
 Dropwizardを利用してメトリクス収集ロジックを実装する
 DriverPluginの場合はregisterMetrics内で、ExecutorPluginの場合はinit内で
PluginContext#registerMetricsを呼び出してメトリクスを登録する
 収集したメトリクスは、既存のメトリクス同様GraphiteやJMXなどでモニタ
リングできる(https://spark.apache.org/docs/latest/monitoring.html#metrics)
 以下はS3上のデータの読み込み量に関するメトリクスを収集する例
プラグインを利用して独自メトリクスを作成する例
override def init(ctx: PluginContext, extraConf: JMap[String, String]): Unit = {
ctx.metricRegistry.register(MetricRegistry.name("s3BytesRead"), new Gauge[Long] {
override def getValue: Long = {
val hdfsStats = FileSystem.getAllStatistics().asScala.find(s => s.getScheme.equals("s3a"))
hdfsStats.map(_.getBytesRead).getOrElse(0L)
}
)
} MetricsRegistry.nameで設定した
名前が、メトリクスのラベルになる
メトリクスの内容によってDropwizardが提供
するAPIを使い分ける。
Gaugeは単一の値を返すタイプのメトリクス。
このほかに値を積み上げるCounterなど。
© 2020 NTT DATA Corporation 17
WebUI
© 2020 NTT DATA Corporation 18
WebUI for Structured Streaming
 Structured Streaming向けのWebUIが導入された
 Spark StreamingのWebUIにも実装されている
チャートが確認できる
 Input Rate
 Process Rate
 Input Rows
 Batch Duration
 その他マイクロバッチ内の各種オペレーションごと
の積み上げグラフが追加された
 History Server向けにも現在開発が続けられている
 SPARK-31953
© 2020 NTT DATA Corporation 19
イベントログファイルのローリング
 これまでイベントログファイルはローリングに対応しておらず、ストリーム処理など
長時間実行するアプリケーションでは使いづらかった(ログファイルの肥大化)
 Spark 3.0からはローリングが可能になった(デフォルトではオフ)。
 以下のプロパティで有効化 / 各種調整が可能
 spark.eventLog.rolling.enabled
 spark.eventLog.rolling.maxFileSize
 ローリングしたファイルが増えてトータルのサイズが肥大化しないよう、
HistoryServer側でイベントログファイルのコンパクションが可能。未コンパクション
のイベントログファイルをいくつ残しておくか設定できる
 spark.history.fs.eventLog.rolling.maxFilesToRetain
 ただし、以前のバージョンのイベントログファイルはコンパクションできない
こと、およびコンパクション後には特定の種類のイベントログは失われること
に注意(https://spark.apache.org/docs/latest/monitoring.html#applying-
compaction-on-rolling-event-log-files)
© 2020 NTT DATA Corporation 20
WebUI関連のドキュメント
 WebUIの使い方を説明したドキュメントが(ようやく)整備された
 https://spark.apache.org/docs/latest/web-ui.html
 3.0で追加されたStructured StreamingのWebUIもカバー
© 2020 NTT DATA Corporation 21
リリースノートもチェック
 このほか主要なアップデートはリリースノートで要チェック
 https://spark.apache.org/releases/spark-release-3-0-0.html
© 2020 NTT DATA Corporation

More Related Content

PPTX
NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
PPTX
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
PDF
Apache Spark + Arrow
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
Spark SQL - The internal -
PPTX
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
PPTX
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
Apache Spark + Arrow
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Spark SQL - The internal -
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)

What's hot (20)

PDF
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
PDF
Apache spark 2.3 and beyond
PPTX
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
PDF
Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)
PPTX
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
PDF
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
PDF
Apache Hadoopの新機能Ozoneの現状
PPTX
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PDF
平成最後の1月ですし、Databricksでもやってみましょうか
PDF
Global Top 5 を目指す NTT DATA の確かで意外な技術力
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PPTX
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PPTX
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
PPTX
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
20190314 PGStrom Arrow_Fdw
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
データインターフェースとしてのHadoop ~HDFSとクラウドストレージと私~ (NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
Apache spark 2.3 and beyond
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
Hadoop Compatible File Systems 2019 (db tech showcase 2019 Tokyo講演資料、2019/09/25)
Apache Hadoopに見るJavaミドルウェアのcompatibility(Open Developers Conference 2020 Onli...
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Apache Hadoopの新機能Ozoneの現状
ポスト・ラムダアーキテクチャの切り札? Apache Hudi(NTTデータ テクノロジーカンファレンス 2020 発表資料)
平成最後の1月ですし、Databricksでもやってみましょうか
Global Top 5 を目指す NTT DATA の確かで意外な技術力
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
BigtopでHadoopをビルドする(Open Source Conference 2021 Online/Spring 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
20190314 PGStrom Arrow_Fdw
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
Ad

Similar to Apache Spark 3.0新機能紹介 - 拡張機能やWebUI関連のアップデート(Spark Meetup Tokyo #3 Online) (20)

PDF
Tekton 入門
PDF
Personal Cloud Automation
PDF
Project Hydrogen and Spark Graph - 分散処理 × AIをより身近にする、Apache Sparkの新機能 - (NTTデ...
PPTX
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
PDF
"Up" with vagrant and docker
PDF
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
PDF
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
PDF
Spark 3.0が目指す、よりインテリジェントなUnified Analytics Platform(db tech showcase 2019 Tok...
PDF
Spark on sql server?
PDF
環境構築自動化ツールのご紹介
PDF
Cloud Foundry V2を、もうちょっと深掘りしよう
PDF
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PDF
PyConAPAC2023 ワークフローエンジン Apache Airflowを用いた 大規模データパイプライン構築と改善
ODP
"Up" with vagrant and docker
PPTX
gRPCurlDotNet.pptx
PDF
AppFormix勉強会資料
PPTX
Windows Azure PHP Tips
PDF
20130329 rtm3
PDF
Spark Streaming Snippets
Tekton 入門
Personal Cloud Automation
Project Hydrogen and Spark Graph - 分散処理 × AIをより身近にする、Apache Sparkの新機能 - (NTTデ...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
"Up" with vagrant and docker
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
Apache Bigtop3.2 (仮)(Open Source Conference 2022 Online/Hiroshima 発表資料)
Spark 3.0が目指す、よりインテリジェントなUnified Analytics Platform(db tech showcase 2019 Tok...
Spark on sql server?
環境構築自動化ツールのご紹介
Cloud Foundry V2を、もうちょっと深掘りしよう
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PyConAPAC2023 ワークフローエンジン Apache Airflowを用いた 大規模データパイプライン構築と改善
"Up" with vagrant and docker
gRPCurlDotNet.pptx
AppFormix勉強会資料
Windows Azure PHP Tips
20130329 rtm3
Spark Streaming Snippets
Ad

More from NTT DATA Technology & Innovation (20)

PDF
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
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アンカンファレンス@東京 発表資料)
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
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アンカンファレンス@東京 発表資料)

Apache Spark 3.0新機能紹介 - 拡張機能やWebUI関連のアップデート(Spark Meetup Tokyo #3 Online)

  • 1. © 2020 NTT DATA Corporation 2020年7月31日 株式会社NTTデータ 技術開発本部 猿田 浩輔 Apache Spark 3.0新機能紹介 - 拡張機能やWebUI関連のアップデート -
  • 2. © 2020 NTT DATA Corporation 2 $ whoami  猿田 浩輔  株式会社NTTデータ 技術開発本部  シニア・ソフトウェアエンジニア / Apache Sparkコミッタ  Hadoop/SparkなどOSS並列分散処理系の開発やテクニカルサポートに従事  普及活動の一環で講演や書籍執筆なども  Twitter: @raspberry1123
  • 3. © 2020 NTT DATA Corporation 3 本日のお話  先日リリースされたApache Spark 3.0の新機能のうち、主に拡張機能や、WebUI関連 のアップデートを解説  Accelerator Aware Scheduling  プラグイン  WebUI
  • 4. © 2020 NTT DATA Corporation 4 Accelerator Aware Scheduling
  • 5. © 2020 NTT DATA Corporation 5 Accelarator Aware Schedulingとは  GPUやFPGAなどのアクセラレータを、複数のタスク間で効率的にシェアで きるようスケジューリングする仕組み  Project Hydrogenと呼ばれる、AI関連のワークロードを指向した取り組みのひ とつ  AI関連のワークロードではGPUを活用することが当たり前になってきている ことが、この取り組みの背景  DLフレームワークをSpark向けに開発する場合、Spark内部からGPUなどのア クセラレータを扱える必要がある  これまではGPUなどのアクセラレータを想定した作りになっていなかった
  • 6. © 2020 NTT DATA Corporation 6 これまでのSparkはアクセラレータの割り当て制御が不十分  YARNやKubernetesなどは既にGPUをサポートしているはずでは?  YARNやKubernetesがGPUの割り当てを制御するのはコンテナやPodの単位  コンテナ/Pod単位ではGPUが適切に分離される Executor (コンテナやPod内で動作) GPU GPU GPU GPU GPU GPU ワーカノードに搭載 されているGPU NodeManager/Workerは、 GPUプールの中から要求 された数のGPUを割り当 ててコンテナ/Podを起動 割り当てられている最中 のGPUは、他のコンテナ やPodに割り当てられた り、アクセスされないよ うに制御される ワーカノード
  • 7. © 2020 NTT DATA Corporation 7 これまでのSparkはアクセラレータの割り当て制御が不十分  SparkではExecutorプロセスがコンテナやPod内で動作するが、Executorの中 で更に複数のタスクがスロット分だけ並列で実行される  YARNやKubernetesはコンテナ/Podの中身については関知しないので、タスク に対してGPUをどのように割り当てるかは制御できない Executor GPU GPU GPUなどのアクセラレータはタスクに 対して割り当てが制御されていないため、 競合や無駄が生じる可能性がある ワーカノード タスクA タスクB
  • 8. © 2020 NTT DATA Corporation 8 Accelerator Aware Schedulingによるアクセラレータの効率的なシェア  Executorにどれだけアクセラレータを割り当てるかだけではなく、タスクに 対して割り当てる数を設定できる  タスクのスケジューリングは、要求する種類/数のアクセラレータを満足する スロットに対して行われる Executor GPU GPU タスクに割り当てられたアクセラ レータは他のタスクからアクセス されないように分離されるGPU GPU ワーカノード タスクA タスクB
  • 9. © 2020 NTT DATA Corporation 9 Accelerator Aware Schedulingの利用例  Executorやタスクに割り当てるアクセラレータの数などを設定する(この例で はGPU)  アプリ側では、TaskContext#resourcesで、タスクに割り当てられたGPUのハ ンドルを取得できる context = TaskContext.get() // タスクに割り当てられたGPUのハンドルを取得 assigned_gpu = context.resources()[“gpu”][0] with tf.device(assigned_gpu): <何か処理> // Executorあたり4つGPUを割り当てる spark.executor.resource.gpu.amount=4 // タスクあたりに割り当てるGPUの数 spark.executor.task.gpu.amount=2 // Executorに割り当てられたGPUを検出するスクリプトの設定 (※1) spark.executor.resource.gpu.discoveryScript=... ※1: サンプルあり(examples/src/main/scripts/getGpusResources.sh)
  • 10. © 2020 NTT DATA Corporation 10 Accelerator Aware Schedulingの開発状況  Spark 3.0で主要なクラスタマネージャには対応  YARN/Kubernetes/Standaloneに対応(Mesosには未対応)  WebUIからもアクセラレータの割り当て状況が確認できる
  • 11. © 2020 NTT DATA Corporation 11 プラグイン
  • 12. © 2020 NTT DATA Corporation 12 プラグイン機能のアップデート  実はSpark 2.4からひっそりと導入されていたプラグイン機能が拡張された  主なアップデートは以下の通り  Driver向けのプラグインも実装可能になった(従来はExecutor向けのみ)  DriverプラグインとExecutorプラグイン間でRPCによる通信も可能  ユーザ定義のメトリクスが実装可能になった  プラグイン利用のための設定や配布方法は以下のドキュメントにまとめられ ている  https://spark.apache.org/docs/latest/monitoring.html#advanced- instrumentation
  • 13. © 2020 NTT DATA Corporation 13 プラグインの実装方法  Driver向けのプラグインとExecutor向けのプラグインをペアで実装する  プラグインのペアはSparkPluginのサブクラスとして定義する  executorPluginとdriverPluginをオーバーライドし、それぞれのプラグイ ンを返すように実装する  以下の例ではScalaで実装しているが、SparkPluginはJavaのinterfaceと して定義されているので、Javaでも実装可能 class MySparkPlugin extends SparkPlugin { override def executorPlugin(): ExecutorPlugin = new MyExecutorPlugin() // プラグインを利用しない場合はnullを返せば良い override def driverPlugin(): DriverPlugin = null }
  • 14. © 2020 NTT DATA Corporation 14 プラグインの実装方法  Driver向けのプラグインとExecutor向けのプラグインをペアで実装する  init / shutdownに初期化/終了時の処理を実装する  Executor/Driverの起動時および終了時に呼び出される  RPCを実装する場合はDriverPlugin#receiveでメッセージ受信時の処理を実装 する(送信については後述する)  DriverPlugin#registerMetricsについては後述する class MyDriverPlugin extends DriverPlugin { override def init(sc: SparkContext, ctx: PluginContext): j.u.Map[String, String] = { /* 初期化 */ } override def shutdown(): Unit = { /*後始末*/ } override def receive(message: Object): Object = { /*RPCメッセージ受信時の処理 */} override def registerMetrics(appId: String, ctx: PluginContext): Unit = { /*メトリクスの登録 */ } } class MyExecutorPlugin extends ExecutorPlugin { override def init(ctx: PluginContext, extraConf: j.u.Map[String, String]): Unit = { /* 初期化 */ } override def shutdown(): Unit = { /*後始末*/ } }
  • 15. © 2020 NTT DATA Corporation 15 PluginContext  PluginContext経由で以下の情報にアクセスできる  SparkConf : conf()  ExecutorのID: executorID()  ホスト名: hostname()  Executor/Driverに割り当てられているCPU/メモリ/アクセラレータの情 報: resources()  Executor/Driverのメトリクスレジストリ: metricsRegistry() • ユーザ定義のメトリクスを実装するのに必要  またPluginContextのsend/askでDriverプラグインとExecutorプラグイン間の RPCが可能  send: 単にメッセージを送信する  ask: メッセージを送信し、応答を待つ
  • 16. © 2020 NTT DATA Corporation 16  Dropwizardを利用してメトリクス収集ロジックを実装する  DriverPluginの場合はregisterMetrics内で、ExecutorPluginの場合はinit内で PluginContext#registerMetricsを呼び出してメトリクスを登録する  収集したメトリクスは、既存のメトリクス同様GraphiteやJMXなどでモニタ リングできる(https://spark.apache.org/docs/latest/monitoring.html#metrics)  以下はS3上のデータの読み込み量に関するメトリクスを収集する例 プラグインを利用して独自メトリクスを作成する例 override def init(ctx: PluginContext, extraConf: JMap[String, String]): Unit = { ctx.metricRegistry.register(MetricRegistry.name("s3BytesRead"), new Gauge[Long] { override def getValue: Long = { val hdfsStats = FileSystem.getAllStatistics().asScala.find(s => s.getScheme.equals("s3a")) hdfsStats.map(_.getBytesRead).getOrElse(0L) } ) } MetricsRegistry.nameで設定した 名前が、メトリクスのラベルになる メトリクスの内容によってDropwizardが提供 するAPIを使い分ける。 Gaugeは単一の値を返すタイプのメトリクス。 このほかに値を積み上げるCounterなど。
  • 17. © 2020 NTT DATA Corporation 17 WebUI
  • 18. © 2020 NTT DATA Corporation 18 WebUI for Structured Streaming  Structured Streaming向けのWebUIが導入された  Spark StreamingのWebUIにも実装されている チャートが確認できる  Input Rate  Process Rate  Input Rows  Batch Duration  その他マイクロバッチ内の各種オペレーションごと の積み上げグラフが追加された  History Server向けにも現在開発が続けられている  SPARK-31953
  • 19. © 2020 NTT DATA Corporation 19 イベントログファイルのローリング  これまでイベントログファイルはローリングに対応しておらず、ストリーム処理など 長時間実行するアプリケーションでは使いづらかった(ログファイルの肥大化)  Spark 3.0からはローリングが可能になった(デフォルトではオフ)。  以下のプロパティで有効化 / 各種調整が可能  spark.eventLog.rolling.enabled  spark.eventLog.rolling.maxFileSize  ローリングしたファイルが増えてトータルのサイズが肥大化しないよう、 HistoryServer側でイベントログファイルのコンパクションが可能。未コンパクション のイベントログファイルをいくつ残しておくか設定できる  spark.history.fs.eventLog.rolling.maxFilesToRetain  ただし、以前のバージョンのイベントログファイルはコンパクションできない こと、およびコンパクション後には特定の種類のイベントログは失われること に注意(https://spark.apache.org/docs/latest/monitoring.html#applying- compaction-on-rolling-event-log-files)
  • 20. © 2020 NTT DATA Corporation 20 WebUI関連のドキュメント  WebUIの使い方を説明したドキュメントが(ようやく)整備された  https://spark.apache.org/docs/latest/web-ui.html  3.0で追加されたStructured StreamingのWebUIもカバー
  • 21. © 2020 NTT DATA Corporation 21 リリースノートもチェック  このほか主要なアップデートはリリースノートで要チェック  https://spark.apache.org/releases/spark-release-3-0-0.html
  • 22. © 2020 NTT DATA Corporation

Editor's Notes