

OPPO大数据离线计算平台架构演进
source link: https://my.oschina.net/u/4273516/blog/5288175
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

OPPO大数据离线计算平台架构演进 - OPPO数智技术的个人空间 - OSCHINA - 中文开源技术交流社区
1 前言
OPPO的大数据离线计算发展,经历了哪些阶段?在生产中遇到哪些经典的大数据问题?我们是怎么解决的,从中有哪些架构上的升级演进?未来的OPPO离线平台有哪些方向规划?今天会给大家一一揭秘。
2 OPPO大数据离线计算发展历史
2.1 大数据行业发展阶段
一家公司的技术发展,离不开整个行业的发展背景。我们简短回归一下大数据行业的发展,通过谷歌的BigData搜索热度我们大概分一下大数据的近十几年的进程。



3.1 Shuffle问题 Shuffle是大数据计算的关键一环,shuffle 对任务的性能和稳定性都产生重要的影响。有以下几点因素,导致shuffle性能变慢和稳定性变差: spill&merge :多次磁盘io;map在写shuffle数据的过程中,会将内存的数据按照一定大小刷到磁盘,最后做sort和merge,会产生多次磁盘io. 磁盘随机读 :每个reduce只读取每个map输出的部分数据,导致在map端磁盘随机读。 过多的RPC连接 :假设有M个map,N个reduce,shuffle过程要建立MxN个RPC连接(考虑多个map可能在同一台机器,这个MxN是最大连接数)。 Shuffle问题不仅会影响任务的性能和稳定性,同时在大数据任务上云的过程中,shuffle数据的承接也成为上云的阻碍。云上资源的动态回收,需要等待下游读取上游的shuffle数据之后才能安全的释放资源,否则会导致shuffle失败。 3.2 小文件问题 小文件问题几乎是大数据平台必须面对的问题,小文件主要有两点危害: 1)小文件过多对HDFS存储的NameNode节点产生比较大的压力。 2)小文件过多,会对下游任务并发度产生影响,每个小文件生成一个map任务读数据,造成过多的任务生成,同时会有过多的碎片读。 小文件问题产生的原因有哪些? 1)任务数据量小同时写入的并发又比较大,比较典型的场景是动态分区。 2)数据倾斜,数据总量可能比较大,但是有数据倾斜,只有部分文件比较大,其他的文件都比较小。 3.3 多集群资源协调问题 随着业务发展,集群迅速扩张,单个集群的规模越来越大,同时,集群数量也扩展到多个。面对多集群的环境如何做好资源协调是我们面临的一个挑战。 首先看下多集群的优劣势: 优势:各个集群资源隔离,风险隔离,部分业务独享资源。 劣势:资源隔离,形成资源孤岛,失去大集群优势,资源利用率不均匀。 例如,对比我们线上集群 vcore资源使用情况:


为了解决shuffle的性能和稳定性问题,同时,为大数据任务上云做铺垫,我们自研了OPPO Remote Shuffle Service(ORS2)。
4.1.1 ORS2在大数据平台整体架构

Shuffle负责将数据汇集,同时将数据落到分布式文件系统中。ShuffleWorker的性能和稳定性,我们做了很多设计,包括流量控制,定制的线程模型,消息解析定制,checksum机制等。 ShuffleReader: ShuffleReader直接从分布式文件系统读取数据,不经过ShuffleWorker。为匹配不同的存储系统读数据的特性,Reader端我们做了Pipeline read优化。 经过以上的多种优化,我们使用线上大作业测试,ShuffleService能够加速30%左右。 4.2 OPPO小文件解决方案 小文件问题的解决,我们希望对用户是透明的,不需要用户介入,引擎侧通过修改配置即可解决。在了解了Spark写入文件的机制后,我们自研了透明的解决小文件方案。 Spark任务在最后写入数据的过程,目前有三种 Commit方式: (V1,V2,S3 commit),我们以V1版本的Commit方式介绍一下我们的小文件解决方案。

图8:Spark Commit V1 示意图
Spark的V1版本Commit,分为两个阶段,Task侧的commit和Driver侧的commit。Task侧的commit,负责将该Task本身产生的文件挪到Task级的临时目录;Driver侧的commit将整所有的Task commit的临时目录挪到最终的目录,最后创建_SUCCESS文件,标志作业运行成功。 我们实现了自己的CommitProtocol,在Driver commit阶段的前段加入合并小文件的操作,扫描: output.dir.roottemporary/output.dir.roottemporary/{appAttempt}/ 目录下面的小文件,然后生成对应的合并小文件作业。合并完小文件,再调用原来的commit,将合并后的文件挪到${output.dir.root}/ 目录下。





我们在做线上切分元数据实际操作过程中,总体Metastore停机时间在10分钟以内。我们对Waggle Dance做了定制优化,加了数据缓存层,提升路由效率;同时,将Waggle Dance与我们的内部管理系统整合,提供界面话的元数据管理服务。 4.5 计算统一入口——Olivia 为了解决Spark任务提交入口的问题,我们还是将目光投向了开源社区,发现Livy可以很好的解决SparkSQL的任务提交。 Livy是一个提交Spark任务的REST服务,可以通过多种途径向Livy提交作业,比如我们常用的是beeline提交sql任务,还有其他的比如网络接口提交; 任务提交到Livy后,Livy向Yarn集群提交任务,Livy client生成Spark Context,拉起Driver。Livy可以同时管理多个Spark Context,支持batch和interactive两种提交模式,功能基本类似HiveServer。



Job Submit:这层主要是我们的离线作业调度Oflow,完成任务的定时调度,dag 管理,作业运行管理;核心功能就是实现了任务的提交。 Job Control:这层主要有HiveServer、Livy、Olivia这些任务控制组件,负责任务向集群提交和管控。 Compute Engine:引擎层主要使用Spark和MR。 Shuffle Service:这层是为Spark引擎提供shuffle 服务,后续Shuffle Service也将承接Flink引擎的 shuffle 数据。 MetaData Control:Waggle Dance和MetaStore以及底层的MySQL形成我们的元数据控制层,使用了Waggle Dance是我们的元数据管理更灵活。 Resource Control:资源控制层,就是我们的计算资源,主要由Yarn Router来控制各个集群的作业路由,各个Yarn集群完成资源的管理和作业运行。我们不仅在Router上有自研的策略,我们在RM资源调度上也探索了更多的调度模式,比如:动态标签、资源限售、更智能的抢占调度。 5 OPPO离线计算平台发展展望 技术的发展演进一直在进行,OPPO的离线计算未来是什么样子,这也是我们一直在思索的命题。我们考虑从纵向和横向两个方向都要兼顾。
5.1 横向思索 横向上,考虑与其他资源和计算模式打通融合。 我们正在与弹性计算团队合作,将大数据与云上资源打通,利用线上服务和大数据计算两种模式的错峰特性,充分利用公司现有资源,实现在离线混合调度。 同时,我们跟实时计算团队合作,探索更适合实时计算的调度模式。 5.2 纵向思索 纵向上,我们思考如何将现有架构做的更深入,更精细化。 大HBO概念:我们在探索一种大HBO概念的架构升级,从Oflow 到 yarn调度,再到spark引擎以及OLAP引擎的HBO优化。核心是提供更快、更自动、成本更低的计算。 Shuffle的继续演进,思考后续Shuffle的演进,与引擎作业调度更加融合,提供spark 批计算的Pipeline计算形式。同时,考虑在 Shuffle Service加入Shuffle Sorter角色,将sort过程挪到Shuffle Service层,将spark sort算子并行化,加速sort操作。 最后,感谢大家的关注,欢迎大家多多交流大数据计算的技术思考。 作者简介 David OPPO高级数据平台工程师 主要负责OPPO大数据离线计算方向架构设计开发,曾在国内一线大厂参与自研大数据计算引擎开发。对大数据平台建设有比较丰富的经验。 本文版权归OPPO公司所有,如需转载请在后台留言联系。
本文分享自微信公众号 - OPPO互联网技术(OPPO_tech)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
Recommend
-
50
-
44
本文根据DBAplus社群第153期线上分享整理而成, 文末还有好书送哦~ 讲师介绍...
-
12
本文根据贝壳找房资深工程师肖赞老师在 2020 年"面向 AI 技术的工程架构实践"大会上的演讲速记整理而成。 1 贝壳 OLAP 平台架的构演化历程
-
21
贝壳找房小程序至今为止已经拥有了近2亿的用户,团队正在在朝着贝壳人的宗旨迈进,给这个行业创造更多的价值,努力成为一个能够服务2亿家...
-
4
演进式架构支持跨多个维度的引导性增量变更。 ——《演进式架构》 这是《演进式架构》这本书第一章第一节对“演进式架构”的作用做出的简洁定义,也就是说演进式架构便是持续架构,因为在架构这件事上没有最终状态,它会随着软件开发体系的不...
-
2
云上应用系统数据存储架构演进发布于 1 分钟前简介: 回顾过去二十年的技术发展,整个应用形态和技术架构发生了很大的升级换代,而任何技术的发展都与几个重要的变...
-
4
OPPO大数据计算集群资源调度架构演进 - OPPO数智技术的个人空间 - OSCHINA - 中文开源技术交流社区 OSCHINA 2021 中国开源开发者问卷 >>>&...
-
4
本文根据Li Qingxin老师在“2021 vivo开发者大会"现场演讲内容整理而成。公众号回复【2021VDC】获取互联网技术分会场议题相关资料。一、vivo推送平台介绍1.1 从产品和技术角度了解...
-
9
Markdown Revision 1; Date: 2018/11/11 Editor: 梁志成 Co...
-
8
汽车之家电商系统架构演进与平台化架构实践 原创 作者: ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK