SlideShare a Scribd company logo
Spark v3.0の新機能の紹介
Kazuaki Ishizaki
IBM Research - Tokyo
About Me – Kazuaki Ishizaki
▪ Researcher at IBM Research – Tokyo
https://ibm.biz/ishizaki
– Compiler optimization, language runtime, and parallel processing
▪ Apache Spark committer from 2018/9 (SQL module)
▪ Work for IBM Java (Open J9, now) from 1996
– Technical lead for Just-in-time compiler for PowerPC
▪ ACM Distinguished Member
▪ SNS
– @kiszk
– https://www.slideshare.net/ishizaki/
2 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
Spark 3.0
▪ 一年半ぶりのメジャーリリース(2.4は、2018年11月)
– 昨年のSpark AI SummitのKeynoteでは、2019年後半リリースかなあ、
と言っていた
3 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
一年半の間に積み上がった約3500のissue
▪ 3369 issues (as of May 15, 2020)
– Features
– Improvements
– Bug fixes
4 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
Spark 3.0の新機能一覧
▪ The long wished-for release…
– More than 1.5 years passed after Spark 2.4 has been released
5 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
Keynote at Spark+AI Summit 2019 (April, 2019)
Source: Deep Dive into the New Features of Apache Spark 3.0
Spark 3.0の新機能一覧
▪ The long wished-for release…
– More than 1.5 years passed after Spark 2.4 has been released
6 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
Keynote at Spark+AI Summit 2019 (April, 2019)
Source: Deep Dive into the New Features of Apache Spark 3.0
SQLの性能に関わる7大機能
1. Query planの新しい表示方法
2. Join hintsの強化
3. Adaptive query execution
4. Dynamic partitioning pruning
5. nested column pruning & pushdown の強化
6. Aggregation のコード生成の改良
7. ScalaとJavaの新バージョンのサポート
7 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
開発者とのインタ
フェースの改善
実行時最適化
Catalyst の改良
インフラの更新
今日は概要だけなので、コード例をご覧になりたい方はこちらを
https://www.slideshare.net/ishizaki/sql-performance-improvements-at-a-glance-in-apache-spark-30
SQLの性能に関わる7大機能
1. Query planの新しい表示方法
2. Join hintsの強化
3. Adaptive query execution
4. Dynamic partitioning pruning
5. nested column pruning & pushdown の強化
6. Aggregation のコード生成の改良
7. ScalaとJavaの新バージョンのサポート
8 SQL performance improvements at a glance in Apache Spark 3.0 - Kazuaki Ishizaki
開発者とのインタ
フェースの改善
実行時最適化
Catalyst の改良
インフラの更新
2.4のquery plan読みにくい!
▪ ぱっと見では、理解できない
9 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-27395
scala> val query = “SELECT key, Max(val) FROM temp WHERE key > 0 GROUP BY key HAVING max(val) > 0”
scala> sql(“EXPLAIN “ + query).show(false)
From #24759
表示、横に長すぎ!
!== Physical Plan ==
*(2) Project [key#2, max(val)#15]
+- *(2) Filter (isnotnull(max(val#3)#18) AND (max(val#3)#18 > 0))
+- *(2) HashAggregate(keys=[key#2], functions=[max(val#3)], output=[key#2, max(val)#15,
max(val#3)#18])
+- Exchange hashpartitioning(key#2, 200)
+- *(1) HashAggregate(keys=[key#2], functions=[partial_max(val#3)], output=[key#2,
max#21])
+- *(1) Project [key#2, val#3]
+- *(1) Filter (isnotnull(key#2) AND (key#2 > 0))
+- *(1) FileScan parquet default.temp[key#2,val#3] Batched: true,
DataFilters: [isnotnull(key#2), (key#2 > 0)], Format: Parquet, Location:
InMemoryFileIndex[file:/user/hive/warehouse/temp], PartitionFilters: [], PushedFilters:
[IsNotNull(key), GreaterThan(key,0)], ReadSchema: struct<key:int,val:int>
1
3.0では、読みやすさを改善
▪ Queryの操作と、付随する情報を、分離して表示
10 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-27395
!== Physical Plan ==
Project (8)
+- Filter (7)
+- HashAggregate (6)
+- Exchange (5)
+- HashAggregate (4)
+- Project (3)
+- Filter (2)
+- Scan parquet default.temp1 (1)
(1) Scan parquet default.temp [codegen id : 1]
Output: [key#2, val#3]
(2) Filter [codegen id : 1]
Input : [key#2, val#3]
Condition : (isnotnull(key#2) AND (key#2 > 0))
(3) Project [codegen id : 1]
Output : [key#2, val#3]
Input : [key#2, val#3]
(4) HashAggregate [codegen id : 1]
Input: [key#2, val#3]
(5) Exchange
Input: [key#2, max#11]
(6) HashAggregate [codegen id : 2]
Input: [key#2, max#11]
(7) Filter [codegen id : 2]
Input : [key#2, max(val)#5, max(val#3)#8]
Condition : (isnotnull(max(val#3)#8) AND
(max(val#3)#8 > 0))
(8) Project [codegen id : 2]
Output : [key#2, max(val)#5]
Input : [key#2, max(val)#5, max(val#3)#8]
scala> sql(“EXPLAIN FORMATTED “ + query).show(false)
1
Joinの全種類を指定できるようになった
▪
11 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-27225
Join type 2.4 3.0
Broadcast BROADCAST BROADCAST
Sort Merge - SHUFFLE_MERGE
Shuffle Hash - SHUFFLE_HASH
Cartesian - SHUFFLE_REPLICATE_NL
例
SELECT /*+ SHUFFLE_HASH(a, b) */ * FROM a, b
WHERE a.a1 = b.b1
val shuffleHashJoin = aDF.hint(“shuffle_hash”)
.join(bDF, aDF(“a1”) === bDF(“b1”))
2
JoinとReduceに関するパラメータの自動チューン
▪ 実行時の統計情報(例:データの大きさ)を用いて、下記の3つ
の最適化を行う
1. Reducerの数の自動チューン
2. Joinのtypeの実行時変更
3. SkewがあるJoinの最適化
12 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-23128 & 30864
TPC-DSのQ77で8倍速くなった Source: Adaptive Query Execution: Speeding Up Spark SQL at Runtime
手動でパラメータチューニングを繰り返す必要が無くなる
3
注意:3.0ではデフォルト offなので、プロパティを指定する必要がある
スキューのあるJoinはSpark 2.4では遅かった
▪ Joinにかかる時間は一番大きなパーティションの処理時間で決まる
– この場合は、Partition 2
13 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-23128 & 30864
Table BTable A
Partition 2
Partition 0
Partition 1
table Aとtable BのJoin
3
スキューのあるJoinはSpark 3.0で高速化される
▪ 大きなパーティションは自動的に複数のパーティションに分割
– 実行時間が平均化され、高速になる
14 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-23128 & 30864
Table BTable A
Partition 2a
Partition 0
Partition 1
spark.sql.adaptive.enabled -> true (false in Spark 3.0)
spark.sql.adaptive.skewJoin.enabled-> true (false in Spark 3.0)
Partition 2b
Split
Duplicate
3
Dynamic Partitioning Pruning
▪ Joinの際に使われないパーティションを、テーブルから読むのを
止める
– Joinの別のテーブルのfilterの情報を使う
15 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-11150
Source: Dynamic Partition Pruning in Apache Spark
TPC-DS 10TBのQ98で85倍速くなった
4
2.4での素直なBroadcast Hash Join
▪ 左側の大きなテーブルのデータを、全て読んでいた
– Joinでは使われないデータも、I/Oに時間をかけていた
16 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-11150
Broadcast
Table small
Table large
filter
Broadcast hash
join
FileScan
4
3.0ではDynamic Filterを実装
▪ 別のテーブルのフィルタ情報を受け取って、pushdownを適用し
読み出すデータ量を削減する
17 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-11150
Broadcast
Table small
Table large
filter
FileScan with
pushdown
Broadcast hash
join
FileScan
4
2.4では ネストしたカラムのColumn Pruning
が動いたり動かなかったり
18 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-25603 & 25556
Source: #23964
Project Limit
col1 col2
_1 _2
Project Repartition
col1 col2
_1 _2 Project
5
scala> sql("SELECT col2._1 FROM (SELECT /*+ REPARTITION(1) */ col2 FROM temp)").show
scala> spark.range(1000).map(x => (x, (x, s"$x" * 10))).toDF("col1", "col2").write.parquet("/tmp/p")
scala> spark.read.parquet("/tmp/p").createOrReplaceTempView("temp")
scala> sql("SELECT col2._1 FROM (SELECT col2 FROM tp LIMIT 1000000)").show
Parquet
3.0では ネストしたカラムのColumn Pruning
がどのオペレーションでも動くようにした
19 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-25603 & 25556
Project Repartition
col1 col2
_1 _2
Source: #23964
5
scala> sql("SELECT col2._1 FROM (SELECT /*+ REPARTITION(1) */ col2 FROM temp)").show
scala> spark.range(1000).map(x => (x, (x, s"$x" * 10))).toDF("col1", "col2").write.parquet("/tmp/p")
scala> spark.read.parquet("/tmp/p").createOrReplaceTempView("temp")
scala> sql("SELECT col2._1 FROM (SELECT col2 FROM tp LIMIT 1000000)").show
Parquet
ネストしたカラムのParquetでのPushdownを
Spark 3.0では動くようにした
20 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-25603 & 25556
scala> spark.range(1000).map(x => (x, (x, s"$x" * 10))).toDF("col1", "col2").write.parquet("/tmp/p")
scala> spark.read.parquet(“/tmp/p”).filter(“col2._1 = 100").explain
Project
col1 col2
_1 _2 Filter
Source: #28319
col2._1=100を含む
チャンク
col2._1=100
を含む行
5
Parquet
SQLがCPUで実行されるまで
▪ Catalystが与えられたクエリーをJavaコードに変換する
▪ OpenJDKの中のHotSpotコンパイラが、CPUが解釈できる機械語
に変換する
21 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-21870
Catalyst
Javaコード
生成SQL
Spark
HotSpot
6
SQLがCPUで実行されるまで
▪ Catalystが与えられたクエリーをJavaコードに変換する
▪ Javaコードがあまりに大きいと、HotSpotコンパイラが機械語へ
の変換を諦める
– 1メソッドあたり、8000 Javaバイトコード以上
22 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-21870
Catalyst
Javaコード
生成SQL
Spark
HotSpot
6
AggregationのJavaコードを小さくする
▪ Catalystが与えられたクエリーをJavaコードに変換する
▪ Javaコードがあまりに大きいと、 HotSpotコンパイラが機械語へ
の変換を諦める
– 1メソッドあたり、8000 Javaバイトコード以上
23 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-21870
CatalystがJavaコードに変換する際に、大きなク
エリーは、小さなメソッドに分割する (thanks to
@maropu)
6
新しいJavaとScalaのサポート
▪ Java 11 (OpenJDKは2026年までのLong-Term-Support)
– HotSpotコンパイラでのさらなる最適化
– G1GCの改良 (for large heap)
– 実験的な新しいZGC (短いレイテンシ)
▪ Scala 2.12 (2016年11月リリース)
– Java8の新しい機能を使うために、新しく設計された
24 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-24417 & 25956
もちろん、その他のライブラリも新しくなっています
7
まとめ
▪ SQLの性能に関わる7大機能
1. Query planの新しい表示方法
2. Join hintsの強化
3. Adaptive query execution
4. Dynamic partitioning pruning
5. nested column pruning & pushdown の強化
6. Aggregation のコード生成の改良
7. ScalaとJavaの新バージョンのサポート
25 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
今日は概要だけなので、コード例をご覧になりたい方はこちらを
https://www.slideshare.net/ishizaki/
sql-performance-improvements-at-a-glance-in-apache-spark-30
リンク集
▪ SQL Performance Improvements at a Glance in Apache Spark
3.0
– https://www.slideshare.net/ishizaki/sql-performance-improvements-at-a-
glance-in-apache-spark-30
▪ Introducing Apache Spark 3.0: Now available in Databricks
Runtime 7.0
– https://databricks.com/jp/blog/2020/06/18/introducing-apache-spark-3-0-
now-available-in-databricks-runtime-7-0.html
▪ Deep Dive into the New Features of Apache Spark 3.0
– https://databricks.com/jp/session_na20/deep-dive-into-the-new-features-
of-apache-spark-3-0
26 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
リンク集
▪ Now on Databricks: A Technical Preview of Databricks Runtime 7
Including a Preview of Apache Spark 3.0
– https://databricks.com/blog/2020/05/13/now-on-databricks-a-technical-
preview-of-databricks-runtime-7-including-a-preview-of-apache-spark-3-
0.html
▪ Quick Overview of Upcoming Spark 3.0 (in Japanese)
– https://www.slideshare.net/maropu0804/quick-overview-of-upcoming-
spark-30
▪ Madhukar’s Blog
– https://blog.madhukaraphatak.com/
27 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
リンク集
▪ Adaptive Query Execution: Speeding Up Spark SQL at Runtime
– https://databricks.com/jp/session_na20/adaptive-query-execution-
speeding-up-spark-sql-at-runtime
– https://databricks.com/blog/2020/05/29/adaptive-query-execution-
speeding-up-spark-sql-at-runtime.html
▪ Dynamic Partition Pruning in Apache Spark
– https://databricks.com/session_eu19/dynamic-partition-pruning-in-
apache-spark
28 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki

More Related Content

What's hot (20)

PDF
Deep Dive into Spark SQL with Advanced Performance Tuning
Takuya UESHIN
 
PDF
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Nagato Kasaki
 
PDF
Apache Spark + Arrow
Takeshi Yamamuro
 
PDF
Sparkパフォーマンス検証
BrainPad Inc.
 
PDF
20171212 titech lecture_ishizaki_public
Kazuaki Ishizaki
 
PDF
Apache Arrow - データ処理ツールの次世代プラットフォーム
Kouhei Sutou
 
PDF
20211112_jpugcon_gpu_and_arrow
Kohei KaiGai
 
PPTX
Hive on Spark の設計指針を読んでみた
Recruit Technologies
 
PDF
Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点
hishidama
 
PDF
InfluxDB の概要 - sonots #tokyoinfluxdb
Naotoshi Seo
 
PDF
Apache Arrow - A cross-language development platform for in-memory data
Kouhei Sutou
 
PDF
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
YusukeKuramata
 
PDF
Apache Drill で見る Twitter の世界
Masaru Watanabe
 
PDF
Spark graph framesとopencypherによる分散グラフ処理の最新動向
Nagato Kasaki
 
PDF
db tech showcase_2014_A14_Actian Vectorで得られる、BIにおける真のパフォーマンスとは
Koji Shinkubo
 
PPTX
A Benchmark Test on Presto, Spark Sql and Hive on Tez
Gw Liu
 
PDF
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
Hadoop / Spark Conference Japan
 
PDF
Apache Arrow
Kouhei Sutou
 
PDF
20160121 データサイエンティスト協会 木曜セミナー #5
Koichiro Sasaki
 
PDF
Sparkストリーミング検証
BrainPad Inc.
 
Deep Dive into Spark SQL with Advanced Performance Tuning
Takuya UESHIN
 
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Nagato Kasaki
 
Apache Spark + Arrow
Takeshi Yamamuro
 
Sparkパフォーマンス検証
BrainPad Inc.
 
20171212 titech lecture_ishizaki_public
Kazuaki Ishizaki
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Kouhei Sutou
 
20211112_jpugcon_gpu_and_arrow
Kohei KaiGai
 
Hive on Spark の設計指針を読んでみた
Recruit Technologies
 
Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点
hishidama
 
InfluxDB の概要 - sonots #tokyoinfluxdb
Naotoshi Seo
 
Apache Arrow - A cross-language development platform for in-memory data
Kouhei Sutou
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
YusukeKuramata
 
Apache Drill で見る Twitter の世界
Masaru Watanabe
 
Spark graph framesとopencypherによる分散グラフ処理の最新動向
Nagato Kasaki
 
db tech showcase_2014_A14_Actian Vectorで得られる、BIにおける真のパフォーマンスとは
Koji Shinkubo
 
A Benchmark Test on Presto, Spark Sql and Hive on Tez
Gw Liu
 
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
Hadoop / Spark Conference Japan
 
Apache Arrow
Kouhei Sutou
 
20160121 データサイエンティスト協会 木曜セミナー #5
Koichiro Sasaki
 
Sparkストリーミング検証
BrainPad Inc.
 

Similar to Introduction new features in Spark 3.0 (20)

PPTX
JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ
Holden Karau
 
PDF
[db tech showcase Tokyo 2016] B31: Spark Summit 2016@SFに参加してきたので最新事例などを紹介しつつデ...
Insight Technology, Inc.
 
PPTX
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
NTT DATA Technology & Innovation
 
PDF
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
Takuya UESHIN
 
PDF
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
Kazuki Taniguchi
 
PDF
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
YusukeKuramata
 
PDF
The Future of Apache Spark
Hadoop / Spark Conference Japan
 
PPTX
Apache Sparkを使った感情極性分析
Tanaka Yuichi
 
PDF
Spark Analytics - スケーラブルな分散処理
Tusyoshi Matsuzaki
 
PPTX
Bluemixを使ったTwitter分析
Tanaka Yuichi
 
PDF
Spark勉強会_ibm_20151014-公開版
Atsushi Tsuchiya
 
PPTX
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
Daiyu Hatakeyama
 
PDF
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
LINE Corp.
 
PPTX
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
NTT DATA Technology & Innovation
 
PPTX
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
Cloudera Japan
 
PPTX
Pysparkで始めるデータ分析
Tanaka Yuichi
 
PPTX
SparkとJupyterNotebookを使った分析処理 [Html5 conference]
Tanaka Yuichi
 
PDF
Big Data University Tokyo Meetup #6 (mlwith_spark) 配布資料
Atsushi Tsuchiya
 
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
NTT DATA Technology & Innovation
 
PDF
Taming Distributed/Parallel Query Execution Engine of Apache Spark
Takeshi Yamamuro
 
JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ
Holden Karau
 
[db tech showcase Tokyo 2016] B31: Spark Summit 2016@SFに参加してきたので最新事例などを紹介しつつデ...
Insight Technology, Inc.
 
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
NTT DATA Technology & Innovation
 
2019.03.19 Deep Dive into Spark SQL with Advanced Performance Tuning
Takuya UESHIN
 
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
Kazuki Taniguchi
 
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
YusukeKuramata
 
The Future of Apache Spark
Hadoop / Spark Conference Japan
 
Apache Sparkを使った感情極性分析
Tanaka Yuichi
 
Spark Analytics - スケーラブルな分散処理
Tusyoshi Matsuzaki
 
Bluemixを使ったTwitter分析
Tanaka Yuichi
 
Spark勉強会_ibm_20151014-公開版
Atsushi Tsuchiya
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
Daiyu Hatakeyama
 
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
LINE Corp.
 
大量のデータ処理や分析に使えるOSS Apache Sparkのご紹介(Open Source Conference 2020 Online/Kyoto ...
NTT DATA Technology & Innovation
 
G-Tech2015 Hadoop/Sparkを中核としたビッグデータ基盤_20151006
Cloudera Japan
 
Pysparkで始めるデータ分析
Tanaka Yuichi
 
SparkとJupyterNotebookを使った分析処理 [Html5 conference]
Tanaka Yuichi
 
Big Data University Tokyo Meetup #6 (mlwith_spark) 配布資料
Atsushi Tsuchiya
 
大量のデータ処理や分析に使えるOSS Apache Spark入門 - Open Source Conference2020 Online/Fukuoka...
NTT DATA Technology & Innovation
 
Taming Distributed/Parallel Query Execution Engine of Apache Spark
Takeshi Yamamuro
 
Ad

More from Kazuaki Ishizaki (20)

PDF
20230105_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
 
PDF
20221226_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
 
PDF
Make AI ecosystem more interoperable
Kazuaki Ishizaki
 
PDF
Enabling Vectorized Engine in Apache Spark
Kazuaki Ishizaki
 
PDF
SQL Performance Improvements At a Glance in Apache Spark 3.0
Kazuaki Ishizaki
 
PDF
SparkTokyo2019
Kazuaki Ishizaki
 
PDF
In-Memory Evolution in Apache Spark
Kazuaki Ishizaki
 
PDF
icpe2019_ishizaki_public
Kazuaki Ishizaki
 
PDF
Looking back at Spark 2.x and forward to 3.0
Kazuaki Ishizaki
 
PDF
Demystifying DataFrame and Dataset
Kazuaki Ishizaki
 
PDF
Transparent GPU Exploitation for Java
Kazuaki Ishizaki
 
PDF
Making Hardware Accelerator Easier to Use
Kazuaki Ishizaki
 
PDF
20160906 pplss ishizaki public
Kazuaki Ishizaki
 
PDF
Exploiting GPUs in Spark
Kazuaki Ishizaki
 
PDF
Easy and High Performance GPU Programming for Java Programmers
Kazuaki Ishizaki
 
PDF
Exploiting GPUs in Spark
Kazuaki Ishizaki
 
PDF
20151112 kutech lecture_ishizaki_public
Kazuaki Ishizaki
 
PDF
20141224 titech lecture_ishizaki_public
Kazuaki Ishizaki
 
PDF
Java Just-In-Timeコンパイラ
Kazuaki Ishizaki
 
PDF
静的型付き言語用Just-In-Timeコンパイラの再利用による、動的型付き言語用コンパイラの実装と最適化
Kazuaki Ishizaki
 
20230105_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
 
20221226_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
 
Make AI ecosystem more interoperable
Kazuaki Ishizaki
 
Enabling Vectorized Engine in Apache Spark
Kazuaki Ishizaki
 
SQL Performance Improvements At a Glance in Apache Spark 3.0
Kazuaki Ishizaki
 
SparkTokyo2019
Kazuaki Ishizaki
 
In-Memory Evolution in Apache Spark
Kazuaki Ishizaki
 
icpe2019_ishizaki_public
Kazuaki Ishizaki
 
Looking back at Spark 2.x and forward to 3.0
Kazuaki Ishizaki
 
Demystifying DataFrame and Dataset
Kazuaki Ishizaki
 
Transparent GPU Exploitation for Java
Kazuaki Ishizaki
 
Making Hardware Accelerator Easier to Use
Kazuaki Ishizaki
 
20160906 pplss ishizaki public
Kazuaki Ishizaki
 
Exploiting GPUs in Spark
Kazuaki Ishizaki
 
Easy and High Performance GPU Programming for Java Programmers
Kazuaki Ishizaki
 
Exploiting GPUs in Spark
Kazuaki Ishizaki
 
20151112 kutech lecture_ishizaki_public
Kazuaki Ishizaki
 
20141224 titech lecture_ishizaki_public
Kazuaki Ishizaki
 
Java Just-In-Timeコンパイラ
Kazuaki Ishizaki
 
静的型付き言語用Just-In-Timeコンパイラの再利用による、動的型付き言語用コンパイラの実装と最適化
Kazuaki Ishizaki
 
Ad

Introduction new features in Spark 3.0

  • 2. About Me – Kazuaki Ishizaki ▪ Researcher at IBM Research – Tokyo https://ibm.biz/ishizaki – Compiler optimization, language runtime, and parallel processing ▪ Apache Spark committer from 2018/9 (SQL module) ▪ Work for IBM Java (Open J9, now) from 1996 – Technical lead for Just-in-time compiler for PowerPC ▪ ACM Distinguished Member ▪ SNS – @kiszk – https://www.slideshare.net/ishizaki/ 2 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
  • 3. Spark 3.0 ▪ 一年半ぶりのメジャーリリース(2.4は、2018年11月) – 昨年のSpark AI SummitのKeynoteでは、2019年後半リリースかなあ、 と言っていた 3 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
  • 4. 一年半の間に積み上がった約3500のissue ▪ 3369 issues (as of May 15, 2020) – Features – Improvements – Bug fixes 4 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
  • 5. Spark 3.0の新機能一覧 ▪ The long wished-for release… – More than 1.5 years passed after Spark 2.4 has been released 5 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki Keynote at Spark+AI Summit 2019 (April, 2019) Source: Deep Dive into the New Features of Apache Spark 3.0
  • 6. Spark 3.0の新機能一覧 ▪ The long wished-for release… – More than 1.5 years passed after Spark 2.4 has been released 6 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki Keynote at Spark+AI Summit 2019 (April, 2019) Source: Deep Dive into the New Features of Apache Spark 3.0
  • 7. SQLの性能に関わる7大機能 1. Query planの新しい表示方法 2. Join hintsの強化 3. Adaptive query execution 4. Dynamic partitioning pruning 5. nested column pruning & pushdown の強化 6. Aggregation のコード生成の改良 7. ScalaとJavaの新バージョンのサポート 7 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki 開発者とのインタ フェースの改善 実行時最適化 Catalyst の改良 インフラの更新 今日は概要だけなので、コード例をご覧になりたい方はこちらを https://www.slideshare.net/ishizaki/sql-performance-improvements-at-a-glance-in-apache-spark-30
  • 8. SQLの性能に関わる7大機能 1. Query planの新しい表示方法 2. Join hintsの強化 3. Adaptive query execution 4. Dynamic partitioning pruning 5. nested column pruning & pushdown の強化 6. Aggregation のコード生成の改良 7. ScalaとJavaの新バージョンのサポート 8 SQL performance improvements at a glance in Apache Spark 3.0 - Kazuaki Ishizaki 開発者とのインタ フェースの改善 実行時最適化 Catalyst の改良 インフラの更新
  • 9. 2.4のquery plan読みにくい! ▪ ぱっと見では、理解できない 9 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-27395 scala> val query = “SELECT key, Max(val) FROM temp WHERE key > 0 GROUP BY key HAVING max(val) > 0” scala> sql(“EXPLAIN “ + query).show(false) From #24759 表示、横に長すぎ! !== Physical Plan == *(2) Project [key#2, max(val)#15] +- *(2) Filter (isnotnull(max(val#3)#18) AND (max(val#3)#18 > 0)) +- *(2) HashAggregate(keys=[key#2], functions=[max(val#3)], output=[key#2, max(val)#15, max(val#3)#18]) +- Exchange hashpartitioning(key#2, 200) +- *(1) HashAggregate(keys=[key#2], functions=[partial_max(val#3)], output=[key#2, max#21]) +- *(1) Project [key#2, val#3] +- *(1) Filter (isnotnull(key#2) AND (key#2 > 0)) +- *(1) FileScan parquet default.temp[key#2,val#3] Batched: true, DataFilters: [isnotnull(key#2), (key#2 > 0)], Format: Parquet, Location: InMemoryFileIndex[file:/user/hive/warehouse/temp], PartitionFilters: [], PushedFilters: [IsNotNull(key), GreaterThan(key,0)], ReadSchema: struct<key:int,val:int> 1
  • 10. 3.0では、読みやすさを改善 ▪ Queryの操作と、付随する情報を、分離して表示 10 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-27395 !== Physical Plan == Project (8) +- Filter (7) +- HashAggregate (6) +- Exchange (5) +- HashAggregate (4) +- Project (3) +- Filter (2) +- Scan parquet default.temp1 (1) (1) Scan parquet default.temp [codegen id : 1] Output: [key#2, val#3] (2) Filter [codegen id : 1] Input : [key#2, val#3] Condition : (isnotnull(key#2) AND (key#2 > 0)) (3) Project [codegen id : 1] Output : [key#2, val#3] Input : [key#2, val#3] (4) HashAggregate [codegen id : 1] Input: [key#2, val#3] (5) Exchange Input: [key#2, max#11] (6) HashAggregate [codegen id : 2] Input: [key#2, max#11] (7) Filter [codegen id : 2] Input : [key#2, max(val)#5, max(val#3)#8] Condition : (isnotnull(max(val#3)#8) AND (max(val#3)#8 > 0)) (8) Project [codegen id : 2] Output : [key#2, max(val)#5] Input : [key#2, max(val)#5, max(val#3)#8] scala> sql(“EXPLAIN FORMATTED “ + query).show(false) 1
  • 11. Joinの全種類を指定できるようになった ▪ 11 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-27225 Join type 2.4 3.0 Broadcast BROADCAST BROADCAST Sort Merge - SHUFFLE_MERGE Shuffle Hash - SHUFFLE_HASH Cartesian - SHUFFLE_REPLICATE_NL 例 SELECT /*+ SHUFFLE_HASH(a, b) */ * FROM a, b WHERE a.a1 = b.b1 val shuffleHashJoin = aDF.hint(“shuffle_hash”) .join(bDF, aDF(“a1”) === bDF(“b1”)) 2
  • 12. JoinとReduceに関するパラメータの自動チューン ▪ 実行時の統計情報(例:データの大きさ)を用いて、下記の3つ の最適化を行う 1. Reducerの数の自動チューン 2. Joinのtypeの実行時変更 3. SkewがあるJoinの最適化 12 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-23128 & 30864 TPC-DSのQ77で8倍速くなった Source: Adaptive Query Execution: Speeding Up Spark SQL at Runtime 手動でパラメータチューニングを繰り返す必要が無くなる 3 注意:3.0ではデフォルト offなので、プロパティを指定する必要がある
  • 13. スキューのあるJoinはSpark 2.4では遅かった ▪ Joinにかかる時間は一番大きなパーティションの処理時間で決まる – この場合は、Partition 2 13 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-23128 & 30864 Table BTable A Partition 2 Partition 0 Partition 1 table Aとtable BのJoin 3
  • 14. スキューのあるJoinはSpark 3.0で高速化される ▪ 大きなパーティションは自動的に複数のパーティションに分割 – 実行時間が平均化され、高速になる 14 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-23128 & 30864 Table BTable A Partition 2a Partition 0 Partition 1 spark.sql.adaptive.enabled -> true (false in Spark 3.0) spark.sql.adaptive.skewJoin.enabled-> true (false in Spark 3.0) Partition 2b Split Duplicate 3
  • 15. Dynamic Partitioning Pruning ▪ Joinの際に使われないパーティションを、テーブルから読むのを 止める – Joinの別のテーブルのfilterの情報を使う 15 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-11150 Source: Dynamic Partition Pruning in Apache Spark TPC-DS 10TBのQ98で85倍速くなった 4
  • 16. 2.4での素直なBroadcast Hash Join ▪ 左側の大きなテーブルのデータを、全て読んでいた – Joinでは使われないデータも、I/Oに時間をかけていた 16 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-11150 Broadcast Table small Table large filter Broadcast hash join FileScan 4
  • 17. 3.0ではDynamic Filterを実装 ▪ 別のテーブルのフィルタ情報を受け取って、pushdownを適用し 読み出すデータ量を削減する 17 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-11150 Broadcast Table small Table large filter FileScan with pushdown Broadcast hash join FileScan 4
  • 18. 2.4では ネストしたカラムのColumn Pruning が動いたり動かなかったり 18 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-25603 & 25556 Source: #23964 Project Limit col1 col2 _1 _2 Project Repartition col1 col2 _1 _2 Project 5 scala> sql("SELECT col2._1 FROM (SELECT /*+ REPARTITION(1) */ col2 FROM temp)").show scala> spark.range(1000).map(x => (x, (x, s"$x" * 10))).toDF("col1", "col2").write.parquet("/tmp/p") scala> spark.read.parquet("/tmp/p").createOrReplaceTempView("temp") scala> sql("SELECT col2._1 FROM (SELECT col2 FROM tp LIMIT 1000000)").show Parquet
  • 19. 3.0では ネストしたカラムのColumn Pruning がどのオペレーションでも動くようにした 19 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-25603 & 25556 Project Repartition col1 col2 _1 _2 Source: #23964 5 scala> sql("SELECT col2._1 FROM (SELECT /*+ REPARTITION(1) */ col2 FROM temp)").show scala> spark.range(1000).map(x => (x, (x, s"$x" * 10))).toDF("col1", "col2").write.parquet("/tmp/p") scala> spark.read.parquet("/tmp/p").createOrReplaceTempView("temp") scala> sql("SELECT col2._1 FROM (SELECT col2 FROM tp LIMIT 1000000)").show Parquet
  • 20. ネストしたカラムのParquetでのPushdownを Spark 3.0では動くようにした 20 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-25603 & 25556 scala> spark.range(1000).map(x => (x, (x, s"$x" * 10))).toDF("col1", "col2").write.parquet("/tmp/p") scala> spark.read.parquet(“/tmp/p”).filter(“col2._1 = 100").explain Project col1 col2 _1 _2 Filter Source: #28319 col2._1=100を含む チャンク col2._1=100 を含む行 5 Parquet
  • 22. SQLがCPUで実行されるまで ▪ Catalystが与えられたクエリーをJavaコードに変換する ▪ Javaコードがあまりに大きいと、HotSpotコンパイラが機械語へ の変換を諦める – 1メソッドあたり、8000 Javaバイトコード以上 22 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-21870 Catalyst Javaコード 生成SQL Spark HotSpot 6
  • 23. AggregationのJavaコードを小さくする ▪ Catalystが与えられたクエリーをJavaコードに変換する ▪ Javaコードがあまりに大きいと、 HotSpotコンパイラが機械語へ の変換を諦める – 1メソッドあたり、8000 Javaバイトコード以上 23 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-21870 CatalystがJavaコードに変換する際に、大きなク エリーは、小さなメソッドに分割する (thanks to @maropu) 6
  • 24. 新しいJavaとScalaのサポート ▪ Java 11 (OpenJDKは2026年までのLong-Term-Support) – HotSpotコンパイラでのさらなる最適化 – G1GCの改良 (for large heap) – 実験的な新しいZGC (短いレイテンシ) ▪ Scala 2.12 (2016年11月リリース) – Java8の新しい機能を使うために、新しく設計された 24 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki SPARK-24417 & 25956 もちろん、その他のライブラリも新しくなっています 7
  • 25. まとめ ▪ SQLの性能に関わる7大機能 1. Query planの新しい表示方法 2. Join hintsの強化 3. Adaptive query execution 4. Dynamic partitioning pruning 5. nested column pruning & pushdown の強化 6. Aggregation のコード生成の改良 7. ScalaとJavaの新バージョンのサポート 25 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki 今日は概要だけなので、コード例をご覧になりたい方はこちらを https://www.slideshare.net/ishizaki/ sql-performance-improvements-at-a-glance-in-apache-spark-30
  • 26. リンク集 ▪ SQL Performance Improvements at a Glance in Apache Spark 3.0 – https://www.slideshare.net/ishizaki/sql-performance-improvements-at-a- glance-in-apache-spark-30 ▪ Introducing Apache Spark 3.0: Now available in Databricks Runtime 7.0 – https://databricks.com/jp/blog/2020/06/18/introducing-apache-spark-3-0- now-available-in-databricks-runtime-7-0.html ▪ Deep Dive into the New Features of Apache Spark 3.0 – https://databricks.com/jp/session_na20/deep-dive-into-the-new-features- of-apache-spark-3-0 26 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
  • 27. リンク集 ▪ Now on Databricks: A Technical Preview of Databricks Runtime 7 Including a Preview of Apache Spark 3.0 – https://databricks.com/blog/2020/05/13/now-on-databricks-a-technical- preview-of-databricks-runtime-7-including-a-preview-of-apache-spark-3- 0.html ▪ Quick Overview of Upcoming Spark 3.0 (in Japanese) – https://www.slideshare.net/maropu0804/quick-overview-of-upcoming- spark-30 ▪ Madhukar’s Blog – https://blog.madhukaraphatak.com/ 27 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki
  • 28. リンク集 ▪ Adaptive Query Execution: Speeding Up Spark SQL at Runtime – https://databricks.com/jp/session_na20/adaptive-query-execution- speeding-up-spark-sql-at-runtime – https://databricks.com/blog/2020/05/29/adaptive-query-execution- speeding-up-spark-sql-at-runtime.html ▪ Dynamic Partition Pruning in Apache Spark – https://databricks.com/session_eu19/dynamic-partition-pruning-in- apache-spark 28 Spark v3.0の新機能の紹介 - Kazuaki Ishizaki