当前位置: 首页 > news >正文

六、【计算】大数据Shuffle原理与实践(下) | 青训营笔记

文章目录

    •   👉引言💎
    • 四、Push Shuffle
        • 0 概述
        • 1 Magnet主要流程
        • 2 实现原理:
        • 3 Magnet 可靠性
        • 4 Cloud Shuffle Service 思想
        • 5 Cloud Shuffle Service架构
        • 6 Cloud Shuffle Service 读写流程
    • 五、总结
  • 问题:

  👉引言💎

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
热爱写作,愿意让自己成为更好的人…


在这里插入图片描述

铭记于心
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉

四、Push Shuffle

0 概述

  • 为什么需要Push Shuffle,因为一般shuffle过程存在不可避免的问题:

    • 数据存储在本地磁盘,没有备份

    • IO 并发:大量 RPC 请求(M*R)

    • IO 吞吐:随机读、写放大(3X)

    • GC 频繁,影响 NodeManager

  • 为了优化该问题,有很多公司都做了思路相近的优化,push shuffle

    • Facebook: cosco

    • LinkedIn:magnet

    • Uber:Zeus

    • Alibaba: RSS

    • Tencent: FireStorm

    • Bytedance: Cloud Shuffle Service

    • Spark3.2: push based shuffle

1 Magnet主要流程

  • Spark driver组件,协调整体的shuffle操作

  • map任务的shuffle writer过程完成后,增加了一个额外的操作push-merge,将数据复制份推到远程shuffle服务上

  • magnet shuffle service是一个强化版的ESS。将隶属于同一个shuffle partition的block,会在远程传输到magnet后被merge到一个文件中

  • reduce任务Amagnet shuffle service 接收合并好的shuffle数据

2 实现原理:

  • bitmap: 存储Emerge的mapper id, 防止重复merge

  • position offset: 如果本次block没有正常merge,可以恢复到上一个block的位置

  • currentMapld: 标识当前正在append的block,保证不同mapper 的block能依次append

主要为边写边push的模式,在原有的shuffle基础上尝试push聚合数据,但并不强制完成,读取时优先读取push聚合的结果,对于没有来得及完成聚合或者聚合失败的情况,则fallback到原模式

3 Magnet 可靠性

  • 如果Map task输出的Block没有成功Push到magnet上,并且反复重试仍然失败,则reducetask直接从ESS上拉取原始block数据

  • 如果magnet上的block因为重复或者冲突等原因,没有正常完成merge的过程,则reducetask直接拉取未完成merge的block

  • 如果reduce拉取已经merge好的block失败,则会直接拉取merge前的原始block

  • 本质上, magnet中维护了两份shuffle数据的副本

4 Cloud Shuffle Service 思想

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-82JnEti8-1661440964552)(image/image_vN88KGZRLN.png)]

5 Cloud Shuffle Service架构

6 Cloud Shuffle Service 读写流程

  • 写入

在这里插入图片描述

  • 读取

    在这里插入图片描述

  • Cloud Shuffle Service 支持AQE

    一个Partition会最终对应到多个Epoch file, 每个EPoch 目前设置是512MB

五、总结

  1. Shuffle 概述:

    • 数据shuffle的概念,其存在的意义以及基本流程

    • Shuffle为什么对性能影响很重要

  2. Shuffle算子

    • 常见的Shuffle算子

    • 理解宽依赖与窄依赖,ShuffleDependency及其相关组件

  3. shuffle过程

    • Spark中shuffle实现的历史

    • Spark中主流版本的shuffle写入和读取过程

  4. Push shuffle

    • Magnet Push Shuffle的设计思路

    • Cloud Shuffle Service 的设计实现思路

问题:

  1. 自己构造一个会产生shuffle 的spark作业,修改shuffle相关的参数,对比一下不同参数对作业运行的影响

  2. 在spark中shuffle实现的发展过程中,每一次变化都优化了之前哪些缺点,又带来了哪些问题?

  3. Push Shuffle相对比Fetch Shuffle最大的挑战是什么?

🌹写在最后💖
路漫漫其修远兮,吾将上下而求索!伙伴们,再见!🌹🌹🌹在这里插入图片描述

相关文章:

  • C语言程序——Switch分支选择程序
  • SpringBoot+Vue项目大学生心理服务系统
  • go语言使用grpc
  • 研究生英语单词学习——Learning English
  • 【Java设计模式 规范与重构】 六 代码重构小结
  • ShardingSphere水平分片、多表关联、绑定表、广播表
  • SSM框架速成2——Spring5速成总结
  • 力扣第312场周赛题解:
  • MySQL流程控制函数
  • GB/T28181-2016基于RTP的视音频数据封装和技术实现
  • String类的详解
  • C/C++新手看过来----新手问题汇总分析
  • C语言 数组作为函数参数
  • 软件测试【秋招面试】字节跳动等各类大厂—面经
  • 【算子2】spark(四):spark core:trans算子中key-value类型的算子使用说明
  • IP路由与转发
  • Js基础知识(四) - js运行原理与机制
  • Nacos系列:Nacos的Java SDK使用
  • Python_网络编程
  • QQ浏览器x5内核的兼容性问题
  • quasar-framework cnodejs社区
  • Sass 快速入门教程
  • Spark RDD学习: aggregate函数
  • webgl (原生)基础入门指南【一】
  • 笨办法学C 练习34:动态数组
  • 搞机器学习要哪些技能
  • 蓝海存储开关机注意事项总结
  • 前端存储 - localStorage
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (独孤九剑)--文件系统
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (数据结构)顺序表的定义
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)nsfocus-绿盟科技笔试题目
  • (状压dp)uva 10817 Headmaster's Headache
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .gitattributes 文件
  • .Net Web窗口页属性
  • .net对接阿里云CSB服务
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /usr/bin/env: node: No such file or directory
  • []error LNK2001: unresolved external symbol _m
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [C语言]——柔性数组
  • [Design Pattern] 工厂方法模式