写点什么

Amazon EMR 5.24 中的 Apache Spark 性能升级 — 性能比 Amazon EMR 5.16 最高提升 13 倍

  • 2019-09-18
  • 本文字数:3577 字

    阅读完需:约 12 分钟

Amazon EMR 5.24 中的 Apache Spark 性能升级 — 性能比 Amazon EMR 5.16 最高提升 13 倍

Amazon EMR 发行版 5.24.0 包含了多项 Spark 优化,提升了查询性能。为了评估性能的提升,我们使用了 3TB 级的 TPC-DS 基准查询,在一个 6 节点 c4.8xlarge EMR 集群上运行,数据存储在 Amazon S3 中。我们观察到,在以类似的配置运行时,EMR 5.24 上的查询性能要比 EMR 5.16 高 13 倍。客户将 Spark 用于多种分析使用案例,包括从大规模数据格式转换到流式处理、数据科学以及机器学习等。客户选择在 EMR 上运行 Spark,是因为 EMR 提供了稳定的最新开源社区创新,Amazon S3 高性能存储,以及 Spot 实例和 Auto Scaling 功能具有的独特节省成本优势。每个月度 EMR 发行版都提供最新的开源软件包,以及多主节点和集群重配置等新功能。该团队还通过每个发新版增加性能改进。


  • EMR 5.17 包含了对 S3 Select 的支持,从而允许 Spark 将数据筛选功能直接下推至 S3。

  • EMR 5.19 包含了经 S3 优化的提交程序,提高了 S3 文件系统操作的性能。

  • EMR 5.22 默认采用更大型号和更高性能的 EBS 卷,以提高性能并增加 IOPS。

  • 所有这些优化都有利于您提高运行速度和降低成本。EMR 5.24 也推出了多项新的优化,本博文中将详细介绍三项关键优化。

设置

要开始使用 EMR,请登录控制台,启动集群,然后处理数据。


要复制基准查询的设置,请使用如下配置:


  • 在集群上安装应用程序:Ganglia、Hive、Spark、Hadoop(默认安装)。

  • EMR 发行版:EMR 5.24.0

  • 集群配置

  • 主实例组:1 个 c4.8xlarge 实例,配 512GiB GP2 EBS 存储(4 个 128GiB 的卷)

  • 核心实例组:5 个 c4.8xlarge 实例,配 512GiB GP2 EBS 存储(4 个 128GiB 的卷)


分类属性
yarn-siteyarn.nodemanager.resource.memory-mb : 53248yarn.scheduler.maximum-allocation-vcores : 36
spark-defaultsspark.executor.memory : 4743mspark.driver.memory : 2gspark.sql.optimizer.distinctBeforeIntersect.enabled : truespark.sql.dynamicPartitionPruning.enabled : truespark.sql.optimizer.flattenScalarSubqueriesWithAggregates.enabled : truespark.executor.cores : 4spark.executor.memoryOverhead : 890m

使用 TPC-DS 基准查询观测到的结果

下面的两张图比较了两个 EMR 发行版运行 TPC-DS 3TB 查询数据集中全部查询的总累计运行时和几何均值。




下面的插图也显示了 EMR 5.16 和 EMR 5.24 之间的查询前运行时改进。横轴为 TPC-DS 3 TB 基准中的每个查询。纵轴为按照查询时间衡量,EMR 5.24.0 相比于 EMR 5.16.0 的性能提升量级。其中 26 个查询的性能提升最大。对于每个这些查询,性能至少比 EMR 5.16 提高了 2 倍。


EMR 5.24 中的性能优化

总体速度的提升是 AWS 多次增量性能改进的结果,本博文介绍了 EMR 5.24 中对最常用客户工作负载有影响的三项重要改进:


  • 动态分区修整

  • 扁平化标量子查询

  • 求交集前先去重

动态分区修整

动态分区修整通过选择表内必须为某个查询读取和处理的特定分区来提高作业性能。由于减少了读取和处理的数据量,查询运行的速度更快。开源版 Spark (2.4.2) 仅支持下推可以在计划时解析的静态断言。以下几个都是静态断言下推的例子:


partition_col = 5


partition_col IN (1,3,5)


partition_col BETWEEN 1 AND 3


partition_col = 1 + 3


开启动态分区修整时,EMR 上的 Spark 将会推断必须在运行时读取的分区。动态分区修整功能会默认禁用,可以从 Spark 中或在创建集群时通过设置 Spark 属性 spark.sql.dynamicPartitionPruning.enabled 启用。有关更多信息,请参阅配置 Spark。


下面的示例将两张表合并,同时依靠动态分区修整来提升性能。store_sales 表包含按区域分隔的总销售数据,store_regions 表包含了各个国家/地区的区域映射。在此代表性的查询中,您仅需要获得某个特定国家/地区的数据。



SELECT ss.quarter, ss.region, ss.store, ss.total_salesFROM store_sales ss, store_regions srWHERE ss.region = sr.region AND sr.country = ’North America’

复制代码


如果没有启用动态分区修整,此查询会读取所有区域,然后筛选与子查询结果匹配的区域子集。启用动态分区修整后,将仅读取和处理子查询中返回的区域的分区。这将减少从存储读取的数据量以及处理的记录量,从而节省了时间和资源。


下图显示了我们使用 3TB 数据对 TPC-DS 套件进行测试时,查询 72、80、17 和 25 的性能改进结果。


扁平化标量子查询

通过这项优化,必须将多个条件应用到特定表的行,从而提高了查询性能。采用这项优化后,不再需要为每个条件多次读取表。这项优化会检测到此类情形,并对查询进行优化以确保仅读取表一次。


扁平化标量子查询功能会默认禁用,可以从 Spark 中或在创建集群时通过设置 Spark 属性 spark.sql.optimizer.flattenScalarSubqueriesWithAggregates.enabled 启用。


为了演示此项优化的工作原理,我们使用了与上一项优化相同的 total_sales 表。在此例中,您需要在门店的平均销售额介于特定的范围内时,按照平均销售额对门店进行分组。


SELECT (SELECT avg(total_sales) FROM store_salesWHERE total_sales BETWEEN 5000000 AND 10000000) AS group1,(SELECT avg(total_sales) FROM store_salesWHERE total_sales BETWEEN 10000000 AND 15000000) AS group2,(SELECT avg(total_sales) FROM store_salesWHERE total_sales BETWEEN 15000000 AND 20000000) AS group3
复制代码


禁用此项优化时,每个子查询都会读取 total_sales 表。启用此项优化后,会按如下方式重写查询,从而将每个条件应用到返回的行,仅读取该表一次。



SELECT c1 AS group1, c2 AS group2, c3 AS group3FROM (SELECT avg (IF(total_sales BETWEEN 5000000 AND 10000000, total_sales, null)) AS c1,avg (IF(total_sales BETWEEN 10000000 AND 15000000, total_sales, null)) AS c2,avg (IF(total_sales BETWEEN 15000000 AND 20000000, total_sales, null)) AS c3 FROM store_sales);
复制代码


这项优化减少了从存储读取的数据量以及处理的记录量,从而节省了时间和资源。


为帮助说明,我们以 TPCDS 套件的 Q9 为例。在启用相关 Spark 属性时,5.24 版的查询运行速度比 5.16 版提高了 2.9 倍。

求交集前先去重

在求两个集合的交集时,该交集的结果是在两个集合都中找到的唯一值的集。在处理大型集合时,必须处理并在主机之间清理许多重复的记录,从而最终计算交集。这项优化在计算交集前去除每个集合中的重复值,通过减少要在主机之间清理的数据量来提高性能。


此项优化会默认禁用,可以从 Spark 中或在创建集群时通过设置 Spark 属性 spark.sql.optimizer.distinctBeforeIntersect.enabled 启用。


例如(TPC-DS 查询 14 简化),您需要找到在门店以及目录销售渠道同时出售的所有品牌。在此例中,store_sales 表包含通过门店渠道完成的销售,catalog_sales 表包含通过目录渠道完成的销售,而 item 表包含了每个独特产品的参数(例如品牌、制造商)。


(SELECT item.brand ss_brand FROM store_sales, itemWHERE store_sales.item_id = item.item_id)INTERSECT(SELECT item.brand cs_brand FROM catalog_sales, itemWHERE catalog_sales.item_id = item.item_id)
复制代码


禁用这项优化时,第一个 SELECT 语句会生成 2600000 条记录(与 store_sales 表的记录数相同),但仅有 1200 个独特品牌。第二个 SELECT 语句生成了 1500000 条记录(与 catalog_sales 表的记录数相同),包含 300 个独特品牌。这会将全部 4100000 行注入求交集运算中,以得出两个结果中都存在的 200 个品牌。


启用这项优化后,每个集合将首先执行去重运算,然后再注入求交集运算,结果只有 1200 + 300 条记录注入求交集运算。这项优化通过减少主机之间清理的数据量来节省时间和资源。

小结

借助对 Apache Spark 实施的各项性能优化,EMR 5.24 将为您提供比 EMR 5.16 更好的查询性能。我们欢迎大家就这些优化如何让您的真实工作负载受益提供反馈。


我们将不断通过新的更新以改进 EMR 上的 Apache Spark 性能,请随时关注。要随时掌握最新动态,请订阅大数据博客的 RSS 源,了解更多强大的 Apache Spark 优化、配置最佳实践和调整建议。另外也不要错过以前 EMR 发行版的其他强大优化功能,例如将 S3 Select 与 Spark 结合使用以及经 EMRFS S3 优化的提交程序。


作者介绍:


Paul Codding 是 Amazon Web Services 负责 EMR 的高级产品经理。


Peter Gvozdjak 是 Amazon Web Services 负责 EMR 的高级产品经理。


Joseph Marques 是 Amazon Web Services 负责 EMR 的首席工程师。


Yuzhou Sun 是 Amazon Web Services 负责 EMR 的软件开发工程师。


Atul Payapilly 是 Amazon Web Services 负责 EMR 的软件开发工程师。


Surya Vadan Akivikolanu 是 Amazon Web Services 负责 EMR 的软件开发工程师。


本文转载自 AWS 博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/performance-updates-to-apache-spark-in-amazon-emr-5-24-up-to-13x-better-performance-compared-to-amazon-emr-5-16/


2019-09-18 19:03846
用户头像

发布了 1866 篇内容, 共 133.1 次阅读, 收获喜欢 81 次。

关注

评论

发布
暂无评论
发现更多内容

数字化智能工厂的主要功能组成

万界星空科技

数字化 智能工厂 智能制造 万界星空科技mes MES、

人工智能的未来

天津汇柏科技有限公司

AI 人工智能

京东金融APP的鸿蒙之旅:技术、挑战与实践

京东科技开发者

RAG系统评测实践详细版:Coze及相关产品评测对比,以及下一代RAG技术

汀丶人工智能

rag

Web 性能优化|了解 HTTP 协议后才能理解的预加载

阿里技术

性能优化 Web HTTP 用户体验 网站性能

构建万物智联生态,“人才”与“资金”不能少

极客天地

夜莺监控的机器支持挂载到多个业务组了

巴辉特

监控系统 运维监控 IT监控 开源监控

荣誉|奇点云入选“2024年成长型浙江数商”名单

奇点云

人工智能 互联网 软件

线上事故风险解读之技术漏洞

巧手打字通

后端 架构设计 工程能力 线上事故 构架

万界星空科技MES系统在智能制造中的应用

万界星空科技

智能制造 mes 万界星空科技mes 制造业工厂

F5携手NetApp加速并简化大语言模型AI部署

科技热闻

电商数据化运营:阿里巴巴商品详情API返回值的实际应用

技术冰糖葫芦

API 接口 API 文档 API 测试 pinduoduo API

好用的文件对比工具:Beyond Compare 4 (Win&Mac) 中文版

你的猪会飞吗

Beyond Compare 4 for Mac Beyond Compare 4 下载

新一轮 Web3 游戏季,Final Glory成捕获全新市场红利的入口

加密眼界

文盘rust--使用 Rust 构建RAG

京东科技开发者

在C#中使用适配器Adapter模式和扩展方法解决面向对象设计问题

不在线第一只蜗牛

C# .net

2024-10-08:用go语言,给定一个字符串 word 和一个整数 k,判断是否可以通过删除最少数量的字符使得该字符串成为 k 特殊字符串。 其中,k 特殊字符串满足字符串中任意两个字符的出现频率

福大大架构师每日一题

福大大架构师每日一题

10月才是秋招主战场!

王磊

35+IT技术同学的未来职场选择

老张

认知提升 规划 职业生涯 职场发展

淘宝商品详情页接口_X-ISGN和WUA算法

tbapi

淘宝商品详情数据接口 淘宝API接口

京东商品详情API接口(JD.item_get)并发策略:提升数据抓取效率

tbapi

京东API接口 京东商品详情接口 京东商品数据接口

火山引擎边缘智能亮相“地瓜机器人开发者大会”,推动端侧大模型应用与落地

火山引擎边缘云

物联网 边缘计算 机器人 智能IoT边缘服务

技术实现方案:获取淘宝商品详情API返回值

代码忍者

API 测试 pinduoduo API

1688跨境代采业务用到的API接口及其使用示例

tbapi

1688代采系统 1688代采接口 1688跨境

NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比

汀丶人工智能

NL2SQL

亚马逊国际商品详情API返回值:电商精准营销的关键

技术冰糖葫芦

API Gateway API 接口 API 文档 API 测试 pinduoduo API

揭秘动态化跨端框架在鸿蒙系统下的高性能解决方案

京东科技开发者

揭秘:一键获取京东商品详情的API之旅

代码忍者

API 测试 pinduoduo API

Amazon EMR 5.24 中的 Apache Spark 性能升级 — 性能比 Amazon EMR 5.16 最高提升 13 倍_文化 & 方法_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章