SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

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

Mais procurados (20)

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

Semelhante a Introduction new features in Spark 3.0

Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係hishidama
 
Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析npsg
 
2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料Recruit Technologies
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10Toshi Harada
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10Toshi Harada
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubToshi Harada
 
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfacePostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfaceKohei KaiGai
 
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...Insight Technology, Inc.
 
Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10Toshi Harada
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.jsYoshiiro Ueno
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会Nao Minami
 
HBaseとSparkでセンサーデータを有効活用 #hbasejp
HBaseとSparkでセンサーデータを有効活用 #hbasejpHBaseとSparkでセンサーデータを有効活用 #hbasejp
HBaseとSparkでセンサーデータを有効活用 #hbasejpFwardNetwork
 
Spark Analytics - スケーラブルな分散処理
Spark Analytics - スケーラブルな分散処理Spark Analytics - スケーラブルな分散処理
Spark Analytics - スケーラブルな分散処理Tusyoshi Matsuzaki
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressAkinari Tsugo
 
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付きInsight Technology, Inc.
 
Spark on sql server?
Spark on sql server?Spark on sql server?
Spark on sql server?Oda Shinsuke
 
Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?Satoshi Noto
 

Semelhante a Introduction new features in Spark 3.0 (20)

Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係Asakusa FrameworkとScalaの密かな関係
Asakusa FrameworkとScalaの密かな関係
 
Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析Apache Spark+Zeppelinでアドホックなネットワーク解析
Apache Spark+Zeppelinでアドホックなネットワーク解析
 
2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
 
Jpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pubJpug study-postgre sql-10-pub
Jpug study-postgre sql-10-pub
 
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfacePostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join Interface
 
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
 
Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10Ntt tx-study-postgre sql-10
Ntt tx-study-postgre sql-10
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会
 
HBaseとSparkでセンサーデータを有効活用 #hbasejp
HBaseとSparkでセンサーデータを有効活用 #hbasejpHBaseとSparkでセンサーデータを有効活用 #hbasejp
HBaseとSparkでセンサーデータを有効活用 #hbasejp
 
Spark Analytics - スケーラブルな分散処理
Spark Analytics - スケーラブルな分散処理Spark Analytics - スケーラブルな分散処理
Spark Analytics - スケーラブルな分散処理
 
ScalaCL in ScalaKaigi
ScalaCL in ScalaKaigiScalaCL in ScalaKaigi
ScalaCL in ScalaKaigi
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
 
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
 
Spark on sql server?
Spark on sql server?Spark on sql server?
Spark on sql server?
 
Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?Run Spark on EMRってどんな仕組みになってるの?
Run Spark on EMRってどんな仕組みになってるの?
 

Mais de Kazuaki Ishizaki

20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdfKazuaki Ishizaki
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdfKazuaki Ishizaki
 
Make AI ecosystem more interoperable
Make AI ecosystem more interoperableMake AI ecosystem more interoperable
Make AI ecosystem more interoperableKazuaki Ishizaki
 
Enabling Vectorized Engine in Apache Spark
Enabling Vectorized Engine in Apache SparkEnabling Vectorized Engine in Apache Spark
Enabling Vectorized Engine in Apache SparkKazuaki Ishizaki
 
SQL Performance Improvements At a Glance in Apache Spark 3.0
SQL Performance Improvements At a Glance in Apache Spark 3.0SQL Performance Improvements At a Glance in Apache Spark 3.0
SQL Performance Improvements At a Glance in Apache Spark 3.0Kazuaki Ishizaki
 
In-Memory Evolution in Apache Spark
In-Memory Evolution in Apache SparkIn-Memory Evolution in Apache Spark
In-Memory Evolution in Apache SparkKazuaki Ishizaki
 
Looking back at Spark 2.x and forward to 3.0
Looking back at Spark 2.x and forward to 3.0Looking back at Spark 2.x and forward to 3.0
Looking back at Spark 2.x and forward to 3.0Kazuaki Ishizaki
 
Demystifying DataFrame and Dataset
Demystifying DataFrame and DatasetDemystifying DataFrame and Dataset
Demystifying DataFrame and DatasetKazuaki Ishizaki
 
Transparent GPU Exploitation for Java
Transparent GPU Exploitation for JavaTransparent GPU Exploitation for Java
Transparent GPU Exploitation for JavaKazuaki Ishizaki
 
Making Hardware Accelerator Easier to Use
Making Hardware Accelerator Easier to UseMaking Hardware Accelerator Easier to Use
Making Hardware Accelerator Easier to UseKazuaki Ishizaki
 
20160906 pplss ishizaki public
20160906 pplss ishizaki public20160906 pplss ishizaki public
20160906 pplss ishizaki publicKazuaki Ishizaki
 
Easy and High Performance GPU Programming for Java Programmers
Easy and High Performance GPU Programming for Java ProgrammersEasy and High Performance GPU Programming for Java Programmers
Easy and High Performance GPU Programming for Java ProgrammersKazuaki Ishizaki
 
20151112 kutech lecture_ishizaki_public
20151112 kutech lecture_ishizaki_public20151112 kutech lecture_ishizaki_public
20151112 kutech lecture_ishizaki_publicKazuaki Ishizaki
 
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_publicKazuaki Ishizaki
 
Java Just-In-Timeコンパイラ
Java Just-In-TimeコンパイラJava Just-In-Timeコンパイラ
Java Just-In-TimeコンパイラKazuaki Ishizaki
 
静的型付き言語用Just-In-Timeコンパイラの再利用による、動的型付き言語用コンパイラの実装と最適化
静的型付き言語用Just-In-Timeコンパイラの再利用による、動的型付き言語用コンパイラの実装と最適化静的型付き言語用Just-In-Timeコンパイラの再利用による、動的型付き言語用コンパイラの実装と最適化
静的型付き言語用Just-In-Timeコンパイラの再利用による、動的型付き言語用コンパイラの実装と最適化Kazuaki Ishizaki
 

Mais de Kazuaki Ishizaki (20)

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

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