Apache Spark 在爱奇艺的应用实践

01

   Apache Spark 在爱奇艺的现状

Apache Spark 是爱奇艺大数据平台主要使用的离线计算框架,并支持部分流计算任务,用于数据处理、数据同步、数据查询分析等场景:

  • 数据处理:在数据开发平台中支持开发者提交 Spark Jar 包任务或Spark SQL 任务对数据进行ETL处理。

  • 数据同步:爱奇艺自研的BabelX数据同步工具基于Spark 计算框架开发,支持 Hive、MySQL、MongoDB 等 15 种数据源之间的数据交换,支持多集群、多云间的数据同步,支持配置化的全托管数据同步任务。

  • 数据分析:数据分析师、运营同学在魔镜即席查询平台上提交SQL或配置数据指标查询,通过 Pilot 统一SQL网关调用 Spark SQL 服务进行查询分析。

184a00a302dcddecba5709f022b10d38.png

目前,爱奇艺Spark服务日均运行超过20万Spark任务,整体占用超过一半的大数据计算资源。

在爱奇艺大数据平台架构升级优化的过程中,对Spark 服务进行了版本迭代、服务优化、任务SQL 化和资源成本治理等改造,大幅提升了离线任务的计算效率和资源节省。

9571bb44632a51edcb6592c55525156d.png

02

   Spark计算框架应用优化

  • 优秀特性的落地

随着内部 Spark 版本的迭代升级,我们对 Spark 新版本的一些优秀特性进行了调研和落地:动态资源分配、自适应查询优化、动态分区裁剪等

  • 动态资源分配(DRA):用户申请资源存在盲目性,并且 Spark 任务各个阶段的资源需求也不相同,不合理的资源配置导致任务资源浪费或执行过慢。我们在 Spark 2.4.3 开始上线了 External Shuffle Service,并开启了动态资源分配(DRA)。开启后,Spark会根据当前运行阶段的资源需求,动态地启动或释放Executor。DRA上线后,Spark任务的资源消耗降低了20%。

  • 自适应查询优化(AQE):自适应查询优化(AQE)是在Spark 3.0中引入的优秀特性,根据前置阶段运行时的统计指标,动态优化后续阶段的执行计划,自动选择合适的Join策略、优化倾斜的Join、合并小分区、拆分大分区等。我们在升级Spark 3.1.1后,默认开启了AQE,很好地解决了小文件、数据倾斜等问题,并且极大地提升了Spark 的计算性能,整体性能提升了大约10%。

  • 动态分区裁剪(DPP):SQL计算引擎中通常通过谓词下推的方式来减少从数据源读取的数据量,进而提升计算效率。在Spark3中引入了一种新的下推方式:动态分区裁剪和Runtime Filter,通过首先计算Join的小表,根据计算结果对Join的大表进行过滤,从而减少大表读取的数据量。我们对这两个特性进行调研测试,并默认开启DPP,在部分业务场景下性能提升了33倍。不过,我们发现在Spark 3.1.1中,开启DPP会导致含较多子查询的SQL解析特别慢。因此,我们实现了一个优化规则:计算子查询的数量,当超过5个时,关闭DPP优化。

  • 计算框架增强

在使用 Spark 的过程中,我们也遇到了一些问题,通过跟进社区最新进展,发现并打入一些 Patch 进行解决。另外,我们也自行对Spark做了一些改进,以适用于各种应用场景,并增强计算框架的稳定性。

  • 支持并发写入

由于Spark 3.1.1默认将Hive Parquet格式的表转换成Spark内置的Parquet Writer,使用InsertIntoHadoopFsRelationCommand算子写入数据(spark.sql.hive.convertMetastoreParquet=true)。静态分区写入时,会将临时目录直接建在表路径下。当多个静态分区写入的任务同时写同一个表的不同分区时,存在任务写入失败或者数据丢失的风险(一个任务commit时会清理整个临时目录,导致其他任务的数据丢失)。

我们为InsertIntoHadoopFsRelationCommand算子加上一个forceUseStagingDir参数,使用任务专属的Staging目录作为临时目录。这样一来,不同的任务就使用了不同的临时目录,进而解决了并发写入的问题。我们已向社区提交了相关Issue【SPARK-37210】。

  • 支持查询子目录

Hive升级到3.x后,默认使用Tez引擎,当执行Union语句时会产生HIVE_UNION_SUBDIR子目录。由于Spark会忽略子目录的数据,因此读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值