EMR Spark on ACK

本文涉及的产品
对象存储 OSS,20GB 3个月
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 本文介绍在ACK上运行EMR Spark工作负载,并通过Remote Shuffle Service和JindoFS提升性能。

001.jpeg

如上文Apache Spark on ACK介绍,Spark on Kubernetes能给我们带来诸多优点,但社区版的解决方案还不是那么完善,存在以下几个关键问题:

  • Shuffle流程,按照目前的Shuffle方式,我们是没办法打开动态资源特性的。而且还需要挂载云盘,云盘面临着Shuffle数据量的问题,挂的比较大会很浪费,挂的比较小又支持不了Shuffle Heavy的任务。
  • 调度和队列管理问题,调度性能的衡量指标是,要确保当大量作业同时启动时,不应该有性能瓶颈。作业队列这一概念对于大数据领域的同学来说应该非常熟悉,他提供了一种管理资源的视图,有助于我们在队列之间控制资源和共享资源。
  • 读写数据湖相比较HDFS,在大量的rename,list等场景下性能会有所下降,同时OSS带宽也是一个不可避免的问题。

为了让在ACK上更好的运行Spark工作负载,阿里云EMR和ACK团队做了大量优化工作,在架构、性能、稳定性、易用性方面都有着很大的提升。

EMR Spark on ACK解决方案

002.png

EMR Spark

EMR Spark是运行在阿里云平台上的大数据处理解决方案,在开源版Apache Spark的基础上做了大量性能、功能以及稳定性方面的改造,并且在和阿里云基础服务的适配上做了非常多的工作。主要有以下核心技术:

  • 实现SparkSQL事务功能,支持update、delete语句。
  • 实现PK、FK、NOT NULL等SQL Constraint,并应用在SQL优化中。
  • 实现Relational Cache:SparkSQL的物化视图。
  • 实现多租户高可用的SparkSQL JDBC Server。
  • SparkSQL部分性能优化列表:
    • 支持Runtime Filter。
    • 使用Adaptive Execution,可在运行时调整作业行为。
    • CBO Join Reorder进一步优化,支持遗传算法。
    • Shuffle流程优化,构建异步非阻塞的Shuffle IO。

Remote Shuffle Service

Spark on kubernetes时会面临shuffle的问题,按照目前的shuffle方式,是没办法打开动态资源特性的。而且还需要挂载云盘,面临着shuffle数据量的问题,挂的大会很浪费,挂的小又支持不了shuffle heavy的任务。针对这个问题,我们设计了shuffle读写分离的架构,称为Remote Shuffle Service,对现有的shuffle机制做了比较大的优化,解决了计算存储分离和混合架构下的shuffle稳定性和性能问题。可以总结为以下3点:

  • Shuffle数据通过网络写出,中间数据计算与存储分离架构。
  • DFS 2副本,消除fetch failed引起的重算,shuffle heavy作业更加稳定。
  • Reduce阶段顺序读磁盘,避免现有版本的随机IO,大幅提升性能。

003.png

JindoFS

计算存储分离已经成为云计算的一种发展趋势。在计算存储分离之前,普遍采用的是传统的计算存储相互融合的架构,但是这种架构存在一定的问题,比如在集群扩容的时候会面临计算能力和存储能力相互不匹配的问题。用户在某些情况下只需要扩容计算能力或者存储能力,而传统的融合架构不能满足用户的这种需求,进行单独的扩充计算或者存储能力;其次在缩容的时候可能会遇到人工干预,人工干预完后需要保证数据在多个节点中同步,而当有多个副本需要同步时候,可能会造成的数据丢失。计算存储分离架构则可以很好的解决这些问题,使得用户只需要关心整个集群的计算能力,但同时也会引入读写数据网络延迟的问题。

004.jpeg

JindoFS是一种云原生的文件系统,结合OSS和本地存储,成为EMR产品的新一代存储系统,为上层计算提供了高效可靠的存储。JindoFS 提供了块存储模式(Block)和缓存模式(Cache)的存储模式, 采用了本地存储和OSS的异构多备份机制,Storage Service提供了数据存储能力,首先使用OSS作为存储后端,保证数据的高可靠性,同时利用本地存储实现冗余备份,利用本地的备份,可以加速数据读取,解决了网络延迟的问题;另外,JindoFS的元数据通过本地服务Namespace Service管理,从而保证了元数据操作的性能(和HDFS元数据操作性能相似)。

005.png

性能评测

为了验证EMR Spark在ACK上的性能,我们通过TPC-DS进行对比评测。TPC-DS测试基准是TPC组织推出的一个决策支持系统测试基准,TPC-DS采用星型、雪花型等多维数据模式。它包含7张事实表,17张纬度表平均每张表含有18列。其工作负载包含99个SQL查询,覆盖SQL99和2003的核心部分以及OLAP。这个测试集包含对大数据集的统计、报表生成、联机查询、数据挖掘等复杂应用,测试用的数据和值是有倾斜的,与真实数据一致。可以说TPC-DS是与真实场景非常接近的一个测试集,也是难度较大的一个测试集。

测试环境

首先准备测试环境,在ACK上新建一个标准版集群或标准专有集群,安装依赖的组件。

集群配置

ACK集群说明

集群配置 参数
集群类型 ACK标准集群
集群版本 1.16.9-aliyun.1
ECS实例 ECS规格:ecs.d1ne.6xlarge操作系统:CentOS 7.7 64位CPU: 24核内存:96G数据盘:5500GB HDD x 12
Worker Node个数 20

ecs.d1ne.6xlarge 大数据机型,默认带了12块5500GB的HDD数据盘,需要mount一下才能使用。

组件配置

ack-spark-operator

在ACK应用目录中安装,用来提交SparkApplicaiton作业。

ack-spark-history-server (非必要)

在ACK应用目录中安装,记录Spark执行任务过程中的event-log,并提供UI界面,方便排查问题。

JindoFS

在ACK应用目录中安装,用来实现数据的分布式缓存加速。

EMR Spark

在社区版Apache Spark深度优化的版本。

Remote Shuffle Service

Shuflle读写分离架构。

注意:EMR Spark 和 Remote Shuffle Service 可通过文章结尾处的钉钉群联系我们获取安装方式。

测试数据

基于TPC-DS生成的1TB和10TB测试数据,生成数据的情况可参考TPC-DS生成数据

测试结果

1. EMR Spark vs Apache Spark

测试数据:10TB

纵轴单位:秒

006.jpeg

007.jpeg

在10TB数据上测试,EMR Spark相比社区版本Spark约有57%的性能提升,详细测试过程参考使用EMR Spark运行Spark工作负载

2. EMR Spark vs EMR Spark + EMR Shuffle Service

测试数据:10TB

纵轴单位:秒
008.jpeg

009.jpeg

在10TB数据上,增加Remote Shuffle Service后,相比直接使用EMR Spark,约有16%的性能提升。详细测试过程请参考使用EMR Spark + Remote Shuffle Service运行Spark工作负载

3. EMR Spark vs EMR Spark + JindoFS

测试数据:1TB

纵轴单位:秒

010.jpeg

011.jpeg

在1TB数据上,使用JindoFS做数据分布式缓存后,相比直接使用EMR Spark,得到约15%性能提升。详细测试过程请参考使用EMR Spark + JindoFS运行Spark工作负载

测试总结

通过上面几组对比可以看到,EMR Spark相比社区版Spark有大幅度的性能提升,而通过Remote Shuffle Service和JindoFS也分别解决了存储计算分离架构带来的Shuffle和数据本地化问题。另外,需要说明的是Remote Shuffle Service和JindoFS在比较适用于数据量大的场景,用户可以根据自己的需要灵活组合使用。

展望

对于Spark on ACK的后续发展,我们一方面是要达到运维一体化,另一方面主要希望做到更好的性价比,主要有以下几点工作:

  • 可以将k8s计算资源分为固定集群和Serverless集群的混合架构,固定集群主要是一些包年包月、资源使用率很高的集群,Serverless是做到按需弹性。
  • 可以通过调度算法,灵活的把一些SLA不高的任务调度到Spot实例上,就是支持抢占式ECI容器,这样可以进一步降低成本。
  • 由于提供了Remote Shuffle Service集群,充分让Spark在架构上解耦本地盘,只要Executor空闲就可以销毁。配合上OSS提供的存算分离,必定是后续的主流方向。
  • 对于调度能力,这方面需要特别的增强,做到能够让客户感受不到性能瓶颈,短时间内调度起来大量的作业。同时对于作业队列管理方面,希望做到更强的资源控制和资源共享。

欢迎加入钉钉群沟通交流。

c17fc7d1d4f543e0b793fa89c2188c6f.jpeg

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
6天前
|
分布式计算 Kubernetes 监控
容器服务Kubernetes版产品使用合集之怎么实现把 spark 跑在k8s
容器服务Kubernetes版,作为阿里云提供的核心服务之一,旨在帮助企业及开发者高效管理和运行Kubernetes集群,实现应用的容器化与微服务化。以下是关于使用这些服务的一些建议和合集,涵盖基本操作、最佳实践、以及一些高级功能的使用方法。
28 1
|
6天前
|
分布式计算 运维 大数据
阿里云 EMR Serverless Spark 版免费邀测中
阿里云 EMR Serverless Spark 版,以 Spark Native Engine 为基础,旨在提供一个全托管、一站式的数据开发平台。诚邀您参与 EMR Serverless Spark 版免费测试,体验 100% 兼容 Spark 的 Serverless 服务:https://survey.aliyun.com/apps/zhiliao/iscizrF54
768 0
阿里云 EMR Serverless Spark 版免费邀测中
|
6天前
|
分布式计算 Kubernetes Java
spark on k8s native
spark on k8s native
|
6天前
|
SQL 分布式计算 DataWorks
DataWorks on emr 创建spark节点指定dlf的catalog?
DataWorks on emr 创建spark节点指定dlf的catalog?
57 0
|
6月前
|
分布式计算 Kubernetes Serverless
Hago 的 Spark on ACK 实践
Hago 的 Spark on ACK 实践
|
7月前
|
分布式计算 资源调度 Hadoop
Spark on Yarn集群模式搭建及测试
Spark on Yarn集群模式搭建及测试
167 0
|
8月前
|
资源调度 分布式计算 大数据
大数据Spark on YARN
大数据Spark on YARN
82 0
|
10月前
|
资源调度 分布式计算 Hadoop
大数据平台搭建(容器环境)——Spark3.X on Yarn安装配置
大数据平台搭建(容器环境)——Spark3.X on Yarn安装配置
大数据平台搭建(容器环境)——Spark3.X on Yarn安装配置
|
SQL 分布式计算 资源调度
Spark on Yarn Job的执行流程简介
2017-12-19-Hadoop2.0架构及HA集群配置(1) 2017-12-24-Hadoop2.0架构及HA集群配置(2) 2017-12-25-Spark集群搭建 2017-12-29-Hadoop和Spark的异同 2017-12-28-Spark-HelloWorld(Spark开发环境搭建)
|
分布式计算 Kubernetes Apache