本文共 2286 字,大约阅读时间需要 7 分钟。
本文来自 Spark Summit North America 2020,由 Uber 的工程师分享的标题为 《Zeus: Uber’s Highly Scalable and Distributed Shuffle as a Service》的议题。相关视频可以参见过往记忆大数据之前发的 ,获取PPT 请关注公众号「 Java技术范」 ,并回复 zeus 获取。
Uber 作为全球性的一家公司,到目前完成了150亿次旅行订单,到目前每天1800万人次旅行订单。覆盖六大洲,69个国家和10000个城市,1.03亿月活跃用户,500万活跃的司机,全球22000名员工,其中包含3700名开发者。
数据和机器学习算法是 Uber 的基石,在 Uber 里面有大量的数据和 ML 相关的场景,主要包括以下这些:
由于时间的限制,这次分享主要挑几个主要的介绍。其中一个就是 ETAs(预计到达时间),ETAs 是 Uber 一个非常重要的案例。
下面一些是其他的场景
下面是 Uber 的大数据技术栈
可以看到,基本上和其他公司的大数据技术栈大同小异。下面是 Uber 的 ML 技术栈。
Uber Apache Spark 使用情况
在 Uber,Apache Spark 是主要的分析执行引擎。
•95% 的批处理和 ML 作业在 Spark 上运行•Spark 是运行在 YARN 和 Peloton/Mesos 上•Spark 的 Shuffle 数据是使用外部 Shuffle 服务的下图是 Apache Spark Shuffle 服务工作原理:Spark 的 Mapper 端把数据写到本地磁盘,并且按照分区分组好写到同一个文件中;同时在另外一个文件里面维持对应的索引。Reduce 端通过 Shuffle Reader 访问 Mapper 端的 Local Shuffle Service 获取其对应的分区数据。在 Reduce 端根据数据量的大小可能会把数据 Spill 到
Apache Spark Shuffle 服务的极限:
•可能耗尽 SDD 的磁盘空间
•可靠性问题•Kubernetes 动态分配
针对上面的问题,有很多不同的应对方法:
方法一:把 Shuffle 的数据写到外部存储系统。
比如同步写到 NFS 上,但是性能会慢2倍;同步写到 HDFS 上,性能会慢5倍。
如果是半异步写,HDFS慢4倍左右
方法二:使用远程 Shuffle 服务。
•流式的方式写到 HDFS 上,这个会比直接写到本地存储慢 1.5 倍;
•流式的方式写到本地,和 external shuffle service 性能类似。
流式的方式写到本地存储,这种方式改变了 MapReduce 的模式,流程主要为 Record Stream -> Shuffle Server -> Disk,好处是在 Executor 端没有临时的 spill 文件。
下图就是远程 Spark Shuffle 服务的架构
深入了解远程 Shuffle 服务
Zeus 设计原理
•能够水平扩展。每个服务实例都独立工作;避免中心化的状态或者存储;•解决网络延迟。主要包括减少服务器响应的等待时间以及流式数据的写法;•性能优化。Uber 内部大多数 Spark 应用程序已针对性进行了性能优化;同时,性能优化依靠了 YARN / Apache Spark 的重试进行故障恢复
下面分别对这三方面进行详细的介绍。
水平扩展
水平扩展主要包括以下方面
•Spark应用程序共享或者使用不同的 shuffle servers•Shuffle 服务器之间没有共享状态•Shuffle 服务器可扩展
下面是一个 Shuffle 服务的分布式架构图
假设我们的 Mapper 个数为 m, Reduce 个数为 r,Shuffle 服务器的个数为 s,那么 Mapper 的网络连接数为 m * s;Reduce 的网络连接数为 r。
网络延迟
网络延迟解决主要包括服务器端使用了 Netty,两个线程组以及二进制网络协议。
还包括直接读写磁盘文件。比如直接将数据写到 OS 文件;使用零复制技术;顺序读写。
客户端使用到压缩
并行系列化和网络 IO
访问连接池
性能优化
性能方面主要包括异步 Shuffle 数据提交
Zeus 容错实现
Zeus 的 Shuffle 服务发现和健康检测使用到了 Zookeeper。
同时 Shuffle 数据进行了复制。
Zeus 生产使用
Zeus 和开源的 Apache Spark 兼容。可以直接通过 Shuffle 插件机制来启用。
Zeus 的监控使用了 Uber 开源的 M3 metrics library。核心的监控指标包括网络连接数、文件描述符数以及磁盘利用率。
测试策略主要包括单元测试、随机测试以及生产查询抽样。
下面是 Uber 内部 Zeus 的生产情况:
•在生产环境使用了八个多月;
•每天承载数千个应用程序;•作业延迟与 external shuffle 相当;•马上将开源
Zeus 的展望如下
•支持所有的 Spark 工作负载,包括 Hive on Spark
•支持多租户;•支持负载均衡;•兼容 Spark Shuffle metadata API
好了,今天的分享到这里了,欢迎留言、分享、转载。
猜你喜欢
1、
2、
3、
4、
过往记忆大数据微信群,请添加微信:fangzhen0219,备注【进群】
转载地址:https://iteblog.blog.csdn.net/article/details/109324295 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!