IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 分布式编程MapReduce -> 正文阅读

[大数据]分布式编程MapReduce

MapReduce的策略:

1.采用分而治之

2.把非常庞大的数据集,切分成非常多的独立的小分片

3.然后为每一个小分片单独地启动一个map任务

4.最终通过多个map任务,并行地在多个机器上去处理


MapReduce的理念:

·计算向数据靠拢而不是数据向计算靠拢

·要完成一次数据分析时,选择一个计算节点,把运算数据分析的程序放到计算节点上运行

·然后把它所涉及的数据,全部从各个不同的节点上面拉过来,传输到计算发生的地方


? MapReduce slave架构:


MapReduce模型的核心函数:

Map函数:该函数的输入来自分布式文件系统的文件块,这些文件块的格式是任意的,可以是文档格式,也可以是二进制格式,将输入的元素转换为<key,value>的形式

函数输入输出说明
Map

<k1,v1>

如:

<行号,“abc”>

List(<k2,v2>)

如:<“a”,1>

<“b”,2>? ? <“c”,3>

1.将小数据集进一步解析成一批<key,value>对,输入Map函数中进行处理

2.每一个输入的<k1,v1>会输出一批<k2,v2>。其中<k2,v2>是计算的中间结果

Reduce

<k2,List(v2)>

如:

<"a",<1,1,1>>

<k3,v3>

<"a",3>

输入的中间结果<k2,List(v2)>中的List(v2)表示是一批属于同一个k2的value

?Reduce函数:该函数的任务就是将一个输入的一系列具有相同键值对的键值对以某种方式组合起来,输出处理后的键值对,输出结果会合并成一个文件。

输入输出

<key,value-list>

一个键以及一堆值的列表

value-list是值的列表,比如前面key是a后面的一堆值列表<1,1,1>就是

一堆的值,很多的值构成一个列表list

对value-list进行一个reduce的结果对这些值进行一个汇总求和

求和以后就生成一个<key,value-list>


MapReduce的体系结构

?Client(客户端):通过client可以提交用户编写的应用程序,用户通过它将应用程序交到JobTracker端,也可以查看当前提交作业的运行状态

JobTracker(作业跟踪器):1.负责资源的监控和作业的调度? ?2.监控底层的其他TaskTracker以及当前运行的Job的健康状况? 3.一旦检查到失败的情况就把这个任务转移到其他节点继续执行跟踪任务执行进度和资源的使用量

TaskTracker(任务调度器):1.执行具体的相关任务,一般接收JobTracker发送过来的命令? ? 2.把一些自己的资源使用情况,以及任务的运行进度通过心跳的方式发送给JobTracker。它通过slot的概念检查自己的资源使用状况,任务调度器将内存和CPU资源打包,然后等分成若干个slot

Tack(任务) :分为map任务和reduce任务,map任务调用map函数,reduce任务调用reduce函数



MapReduce工作流程

?流程概述:一个大的MapReduce作业,首先会被拆分为若干个Map任务,但Map任务结束会生成许多个<key,value>的中间结果,这些中间结果会被发送到Reduce中处理,具有相key的<key,value>会被发送到同一个Reduce任务,Reduce任务会对中间结果进行汇总计算,然后输出到分布式文件系统。


MapReduce的各个执行阶段

?1.MapReduce框架通过InputFormat检验输入格式是否正确,然后将文件分为逻辑上的多个InputSplit,因为只是逻辑概念,每一个InputSplit并没有对文件进行实际的切分,只是记录了数据的位置和长度?

2.通过PecordReader(RR)根据InputSplit中的信息来处理InputSplit中的具体内容,加载数据并转换会适合Map任务读取的<key,value>键值对

3.Map任务输出一系列<key,value>作为中间结果

4.通过Shuffle过程对Map输出的中间结果进行排序,合并,归并等操作

5.Reduce以一系列<key,value-list>为中间结果输出到OutputFormat模块

6.OutputFormat模块对输出目录是否存在进行检查,以及输出结果类型是否符合配置文件中的类型,如果满足就输出到分布式文件系统


Shuffle过程详解

Shuffle简介:

?(1)在Map端的Shuffle过程:Map任务的结果首先被写入缓存,当缓存满时启动溢写操作,在Map任务结束之前?溢写文件会被归并成一个磁盘文件然后交给Reduce任务

(2)在Reduce端的Shuffle过程:Reduce任务对从Map端的不同数据进行处理归并后交给Reduce处理


Map端的Shuffle过程:

?1.输入数据和执行Map任务:输入的数据一般保持在分布式文件系统的文件块中,Map任务将接受<key,value>作为输入后一定的映射规则将其转换为多个<key,value>输出

2.写入缓存:Map结果首先写入缓存,积累到一定量后再一次批量写入磁盘

3.溢写(分区,排序和归并):缓存的容量默认为100MB,但缓存量达到80MB的时候将数据写入磁盘,留有20MB容量进行缓存数据,在溢写到磁盘前缓存中的数据首先会被分区,然后对相同key的数据进行归并


Reduce端的Shuffle过程:

?(1)领取数据:每个Reduce任务会不断地通过RPC向JobTracker询问Map任务是否以及完成,若JobTracker检测到Map任务完成就好通知Reduce任务领取属于自己的分区数据到本地磁盘

(2)归并数据:将数据写的Reduce任务的缓存中,缓存过连也会溢写到磁盘,然后对数据进行排序,归并,再传输带Reduce任务

(3)把数据写到Reduce任务:执行Reduce函数中的各种映射,输出最终结果,并将结果保持到分布式文件系统中(比如HDFS或GFS)

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:22:23  更:2022-10-22 21:23:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/22 12:22:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码