Spark 2.3.0测试笔记二:还能不能玩了?

1 前言

基于Spark 2.3.0测试笔记一:Shuffle到胃疼的初步测试结论,由于未经声明的参数行为变化, 2.3.0的性能对比惨到不行。本轮测试在之前的基础上对2.3.0加上额外的参数设置spark.sql.statistics.fallBackToHdfs true进行新一轮的性能测试,以期望令人满意的结果。

2 测试数据

benchmark scale fileformat partitioned link
TPCDS 1T parquet true https://github.com/yaooqinn/tpcds-for-spark

3 实验对象

3.1 参照组

baseline modified commit link
2.1.2 true 9ef23ae https://github.com/yaooqinn/spark/tree/v2.1.2-based

3.2 实验组

baseline modified commit link
2.3.0 false 992447f https://github.com/yaooqinn/spark/tree/v2.3.0-based

4 配置

4.1 硬件配置

机器类别 CPU Memory Disk 台数 Services
虚拟机 4 × 1 × 1 32g 500g × 1 5 NN(1) SNN (1) RM(1) HMS(1) SHS(1)
物理机 48 × 2 × 12 256g 7.3T × 12 3 DN(3) NM(3)
物理机 48 × 2× 12 256g 1.1T × 1 4 DN(4) NM(4)
物理机 32 × 2 × 8 128g 3.6T × 12 1 DN(1) NM(1)
物理机 40 × 2 × 10 256g 500g × 1 1 NM(1)
物理机 48 × 2 × 12 32g 1.1T × 1 1 DN(1)

4.2 metrics

hdfs
yarn

4.3 SparkConf

## Basic Settings ##
spark.master                                          yarn
spark.submit.deployMode                               client
spark.serializer                                      org.apache.spark.serializer.KryoSerializer
spark.kryoserializer.buffer.max                       256m
spark.local.dir                                       ./local

## Hadoop Settings ##
spark.hadoop.fs.hdfs.impl.disable.cache               true
spark.hadoop.fs.file.impl.disable.cache               true

## Driver/AM Settings ##
spark.yarn.am.cores                                   2
spark.yarn.am.memory                                  2g
spark.yarn.am.memoryOverhead                          512
spark.yarn.am.extraJavaOptions                        -XX:PermSize=1024m -XX:MaxPermSize=2048m -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution
spark.driver.maxResultSize                            2g
spark.driver.memory                                   30g
spark.driver.extraJavaOptions                         -XX:PermSize=1024m -XX:MaxPermSize=1024m

## Executor Settings ##
spark.executor.instances                              40
spark.executor.cores                                  4
spark.executor.memory                                 20g
spark.executor.memoryOverhead                         4096
spark.executor.extraJavaOptions                       -XX:PermSize=1024m -XX:MaxPermSize=1024m -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution

## Security Settings ##
spark.yarn.keytab                                     ?
spark.yarn.principal                                  ?

## Dynamic Allocation Settings ##
spark.shuffle.service.enabled                         true
spark.dynamicAllocation.enabled                       false
spark.dynamicAllocation.initialExecutors              1
spark.dynamicAllocation.minExecutors                  1
spark.dynamicAllocation.maxExecutors                  50

## SQL Configurations ##
spark.sql.autoBroadcastJoinThreshold                  204857600
spark.sql.warehouse.dir                               /user/spark/warehouse
# spark.sql.hive.convertCTAS                            true
# spark.sql.sources.default                             parquet
spark.sql.shuffle.partitions                          1024
# spark.sql.hive.convertMetastoreParquet                false
spark.sql.crossJoin.enabled=true

## History Server Client Settings ##
# spark.eventLog.enabled                                true
spark.eventLog.compress                               true
spark.eventLog.dir                                    hdfs:///spark2-history/
spark.yarn.historyServer.address                      ?:18081

spark 2.3.0加上该配置

spark.sql.statistics.fallBackToHdfs   true

5 测试结果

5.1 实验数据

实验数据
显示规则
  1. 列1:sql statement
  2. 列2:参照组结果
  3. 列3:实验组结果
  4. 显示规则见上图

5.2 定性结果

  1. query19在参照组下没跑出结果,失误,没记下log。
  2. query 77 两组皆未出结果,spark.driver.maxResultSize 2g设置太小
  3. 测试只run了一轮,所以结果并不是十分严谨,[-0.1, 0.1]之间,就认为性能相当
  4. 可以看到本轮测试,实验组的性能相比前一轮测试有大幅度的提升,说明诸多SQL都由SortMerge转成了Broadcast
  5. 但是总体上而言,刨去“小查询”,依然有Query 9 72 88 等感受到了明显的下降。
  6. query 72 怎么又有你?还能不能玩了?
  7. 性能提升是应该的,性能下降就打脸了。

6 相关分析

6.1 执行计划

quey 72 physical plan comparation

上图显示实验组在加上fallback参数后,逻辑计划除了长相不一样,但逻辑结构上已经一致了。

6.2 Job Metics对比

参照组 Job Metrics
实验组 Job Metrics
  1. 两轮Applications的所有Job没有task失败的记录运行良好
  2. Job Id 11是两者性能的分水岭

6.3 Stage Metrics

参照组Stage Metrics

实验组Stage Metrics
  1. 参照组的13、实验组的14,实为同一个Stage,主要的时差在此
参照组Stage Metrics
实验组Stage Metrics
  1. 各项参数基本一致或者完全一致,除了Duration这一下,实验组完完全全的落后
参照组 DAG

实验组 DAG
  1. 比较两者的DAG完全一致,逻辑上没问题,问题的原因就可能是对应的物理算子,或者Spark Core的改动产生的性能regression了。或者是我维护的分支不小心加了性能优化特性[吃了一惊的表情]

6.4 Task Metrics

参照组 Task Id 5619

实验组 Task Id 5619
  1. 运气不错 Task ID 5619正巧排序后都在第一位,可以看到性能问题真正就是在task的执行过程慢,也基本印证上面6.3(3)的推断

6.5 日志分析

日志对比5619 assigned to finished 左侧参照组 右侧实验组
接上 日志对比5619 assigned to finished
  1. 截取5619从开始到结束段的executor日志进行对比
  2. 执行节点恰好一致
  3. 与之并行的相关task也一致的调度与该节点
  4. shuffle service的server也一致
  5. 图中红框处,参照组Executor出现1分钟左右间隔,而实验组Executor出现3分钟左右的间隔,这时段基本可以理解为task正在吭哧吭哧的执行。

6.6 执行计划 VS DAG

DAG
  1. 对比执行计划 Stage14 为最后一个SortMergeJoin的右表,对应我们Stage 13就是在做Sort的左表(中间表)
  2. 所以基本可以猜测SortExec在2.3.0有性能regression,由于跨过了2.2相关的版本,所以并不能确定引入的时间点。

7 总结

  1. 对于那些没有Hive Statistics和Spark Statistics信息的表,需要注意在2.3.0之后spark.sql.statistics.fallBackToHdfs true去fallback,当然最好还是能去执行analyze来生成。
  2. SortExec物理算子应该极有可能有性能regression,需要看代码/PR的变更。后续有时间可以再带点分享。有兴趣的可以根据本文提供的线索去分析一下,如果是的话可以贡献社区。

8 后记

蜀道难,还能不能玩了?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容