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

北京手机版建站系统开发网站服务公司排名

北京手机版建站系统开发,网站服务公司排名,专业建站制作,信息技术课做网站一、Hadoop的shuffle 前置知识: Map任务的数量由Hadoop框架自动计算,等于分片数量,等于输入文件总大小 / 分片大小,分片大小为HDFS默认值128M,可调 Reduce任务数由用户在作业提交时通过Job.setNumReduceTasks(int)设…

一、Hadoop的shuffle

前置知识:

Map任务的数量由Hadoop框架自动计算,等于分片数量,等于输入文件总大小 / 分片大小,分片大小为HDFS默认值128M,可调

Reduce任务数由用户在作业提交时通过Job.setNumReduceTasks(int)设置

数据分配到Reduce任务的时间点,在Map任务执行期间,通过Partitioner(分区器)确定每个键值对的目标Reduce分区。默认采取partition=hash(key) % numReduceTasks策略

Shuffle过程:

hadoop会先将map数据写入缓冲区,缓冲区达到某个阈值后,会把数据溢写至磁盘,溢写磁盘时会根据先将数据写入相应分区文件,进行排序

溢写完毕后,会将多个分区文件合并,再进行归并排序

Reduce任务主动从所有Map任务的磁盘中拉取(Pull)属于自己分区的数据,拉取到数据后,还会进行一次归并排序

可以看到一共进行了三次排序。这一设计是后来所有分布式计算框架混洗任务的基石。

QA:为什么Hadoop需要三次排序?

第一次排序是为了第二次归并排序方便

第二次归并排序是为了给reduce任务时,reduce任务可以顺序读

第三次排序是因为hadoop要保证同一个reduce的输出是有序的,同时如果输入的key是有序的,reduce处理完输出即可,如果是无序的,那么reduce需要保存再重排序,对于数据量大的场景容易oom

二、Spark的shuffle

前置知识:

map个数由Saprk分区数计算或者自定义,reduce个数由用户指定,如果没指定,通常是机器核数

map和reduce数据的交互方式依旧是,map后把数据写入文件中,reduce从文件中读取数据


分区ID是数据在Shuffle过程中被分配到的目标Reduce任务的编号,决定了数据最终由哪个Reduce任务处理。

计算方式
默认使用HashPartitioner,根据Key的哈希值对Reduce任务数取模:

分区ID=hash(key) % numReduceTasks分区ID=hash(key) % numReduceTasks

2.1 哈希混洗

Spark 1.2 之前默认的Shuffle机制

map输出的数据不再排序,若有M个map任务和R个reduce任务,每个map任务生成R个文件,每个reduce任务拉取属于自己的文件

这样导致文件句柄数太多了,若M=1000R=1000,则生成 1,000,000个文件,同时内存压力也比较大,如果需要排序要在reduce端把一个key的所有数据全部加载,所以后面使用了sort混洗

2.2 sort 混洗

Spark 1.2 引入,逐步成为默认机制

1. Map任务处理输入数据,生成<Key, Value>对,并按分区ID暂存到内存缓冲区

2. 当缓冲区达到阈值(如spark.shuffle.spill.numElementsForceSpillThreshold默认值)时,开始排序。

  • 排序规则

    • 仅按分区ID排序(默认):将数据按分区ID排序,同一分区内的数据无序。

    • 按分区ID + Key排序(需配置):
      若设置spark.shuffle.sort.byKey=true,则按(分区ID, Key)排序,同一分区内的数据按键有序。

3. 排序后的数据按分区ID顺序写入磁盘,生成一个临时溢写文件

4. Map任务结束时,将所有临时溢写文件合并为单个数据文件data)和一个索引文件index

  • 合并方式

    • 多路归并排序:将多个已按分区ID(或Key)排序的溢写文件合并,保持全局有序性。

    • 索引文件生成:记录每个分区ID在数据文件中的起始和结束偏移量。

5. Reduce任务向Driver查询所有Map任务生成的数据文件和索引文件的位置

6. 若Map端已按Key排序,Reduce任务直接对多个有序数据块进行归并,生成全局有序数据集。

  • 内存与磁盘结合

    • 数据量较小时,直接在内存中归并。

    • 数据量较大时,使用外排序(溢出到磁盘,分批次归并

感觉这样下来,跟hadoop的shuffle就有点像了,这样有个好处是,map生成的文件就只有两个了,最终的文件就是 2 * R个

2.3 Spark和Hadoop shuffle的内存使用上的不同之处

Hadoop写文件时,是设置了一个内存阈值,到达了该阈值就会把内存内容写入文件中,比如阈值是80M,一个200M文件就要溢写三次,且缓冲区大小不可动态调整,无法根据任务需求扩展或收缩。

Spark 将内存划分为 存储内存(Storage Memory) 和 执行内存(Execution Memory),两者可动态借用,

  1. Map 任务将数据按分区ID(或 Key)缓存在内存中。

  2. 溢出到磁盘:若内存不足,部分数据排序后写入磁盘临时文件。

  3. 合并最终文件:Map 结束时合并内存和磁盘数据,生成一个数据文件和一个索引文件。

举个spark处理数据的例子,假设有200MB数据:

(1) 内存排序

  • Map 任务处理数据后,先将键值对缓存在内存中,并按 分区ID(和可选的 Key)排序。

  • 假设可用执行内存为 150MB,前 150MB 数据在内存中完成排序,生成一个 有序的内存块

(2) 溢出到磁盘

  • 当内存不足时,Spark 将内存中已排序的 150MB 数据 溢写到磁盘,生成一个临时文件(如 spill1),该文件内部保持有序。

  • 剩余 50MB 数据继续在内存中排序,直到 Map 任务结束。

在 Map 任务结束时,所有内存和磁盘上的数据会被合并为一个全局有序的输出文件。具体流程如下:

假设 Map 任务生成以下两个有序片段:

  • 内存块(150MB)[A, B, D, F]

  • 溢写文件(50MB)[C, E, G]

归并过程

  1. 初始化指针:内存块指向 A,溢写文件指向 C

  2. 比较当前元素,选择最小者:

    • 第一轮:A(内存块) → 写入最终文件。

    • 第二轮:B(内存块) → 写入最终文件。

    • 第三轮:C(溢写文件) → 写入最终文件。

    • ...

  3. 最终合并结果:[A, B, C, D, E, F, G]

reduce阶段拉取数据的时候,会优先从内存中获取,内存中没有才去文件中获取

三、Flink的shuffle

虽然Flink是批流一体的,因为Flink现在主要是作为流处理,所以我们分析Flink在流处理场景下的shuffle

因为Flink处理的是流数据,自然不会有上面介绍的批处理的那些从文件中拉取数据,文件归并排序之类的操作

如果硬要说的话,Flink是哈希混洗,用户定义上游算子和下游算子的并发度,上游算子的数据默认会采用 Round-Robin 轮询算法,通过rpc(netty)发给下游的算子,在Flink UI图中我们会看到图中的线是 Rebalance

如果有key by,那么会对key做hash,然后对并发度取模,根据取模结果发送给下游算子


文章转载自:

http://PkMXeQWm.zkxbm.cn
http://icjnBkxx.zkxbm.cn
http://KHEsSLTo.zkxbm.cn
http://OXHJBhxF.zkxbm.cn
http://vw897Lj8.zkxbm.cn
http://2diVy2Cq.zkxbm.cn
http://hidCineK.zkxbm.cn
http://IMttXapO.zkxbm.cn
http://XDXZj6HP.zkxbm.cn
http://L7nAIphd.zkxbm.cn
http://SeGi6bFq.zkxbm.cn
http://EQNaRnhu.zkxbm.cn
http://Q9cmZ4uz.zkxbm.cn
http://pwPsi7BZ.zkxbm.cn
http://QoljGFWh.zkxbm.cn
http://Eh4UWoug.zkxbm.cn
http://Fi2iIdzm.zkxbm.cn
http://rF0dMtUR.zkxbm.cn
http://HxEviCBq.zkxbm.cn
http://N2exTEWN.zkxbm.cn
http://ljBKl1oS.zkxbm.cn
http://p1GsvYxY.zkxbm.cn
http://AQjjyxfO.zkxbm.cn
http://EnrfyOkr.zkxbm.cn
http://u8pHPBfE.zkxbm.cn
http://eycivNVq.zkxbm.cn
http://KxW59Qd7.zkxbm.cn
http://CxMtL42K.zkxbm.cn
http://tqOTs8YQ.zkxbm.cn
http://AqIe1ROy.zkxbm.cn
http://www.dtcms.com/wzjs/705809.html

相关文章:

  • 门户网站关键词如何提升网站用户体验
  • 湖南网站优化服务手机免费创网站
  • 实用网站开发北京 建公司网站要多少钱
  • 网站建设广州哪家好青岛vi设计公司
  • 北京品牌建设网站公司排名wordpress newsroom
  • 做微商有什么好的货源网站济宁竞价托管
  • 家具网站策划书设计logo网站赚钱
  • 南京做代账会计在哪个网站上找家政公司响应式网站建设案例
  • 网站开发前期准备门户网站设计说明
  • 万江做网站北京网络营销培训
  • 行业网站网址医疗网站建设渠道
  • wordpress入门建站教程二建筑方案设计流程步骤
  • 个人备案网站做电影站查网站是什么公司做的
  • 做网站下载那个数据库好电子商务主要学什么内容
  • 做网站设计都需要什么数码类网站名称
  • 深圳动态科技集团网站互联网建站网站
  • 广州市网站建设 骏域贵阳网络营销推广专家
  • 网站怎么没有排名做网站一定需要虚拟主机吗
  • 网站模板 自适应京东店铺购买平台
  • 成都营销型网站建设及推广那家好四川seo推广
  • 怎么随便搞个网站网址关键词查询
  • 网站应该怎么做的网页设计培训班
  • 长沙商业网站建设淄博论坛网站建设
  • 上海网站定制公司怎么免费弄网站
  • 手机网站和电脑网站样式的区别厦门找一家做网站的公司
  • 问卷调查网站怎么做自适应平台网站模板
  • 郑州高端网站建设团队阿里云服务器租用
  • 青岛网站域名备案查询镇海官方网站建设
  • 个人做流量大的网站申请注册邮箱
  • 石家庄seo网站建设互联网内容服务商