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

4.1 概述

1、概念

是一种分布式并行编程模型,也是一个处理和生成超大数据集的算法模型的计算框架

2、与传统分布式并行编程模型的不同

(1)集群的架构性和容错性:

  • 采用典型的非共享式架构
  • 集群中,每个节点都有自己的内存,任何一个节点出问题都不会影响其他节点,集群又设计了荣誉和容错机制

(2)硬件价格和扩展性
集群可以随意增加节点,只需要廉价的PC机就可以。
(3)编程和学习难度:
不需要有丰富经验的并行计算和分布式处理系统的程序员,它会自动实现分布式部署,部署到集群的各个机器上运行。
(4)适用场景:
非实时的批处理以及数据密集型的应用

3、主要思想

分而治之(策略)
(1)描述:一个存储在分布式存储系统中的大规模数据集被切分成多个独立的分片(split),这些分片交给多个Map任务并行处理,Map任务生成的结果,会作为Reduce任务的输入,最终由Reduce任务合并结果,生成最终结果,并写入分布式文件系统。
(2)上升到抽象模型:Mapreduce借鉴Lisp函数式语言的思想,用Map和Reduce两个函数为高层并行编程提供抽象模型
(3)上升到框架:为Mapreduce设计提供了统一的计算框架,为程序员隐藏了大多数系统层的处理细节

计算向数据靠拢(理念)
Mapreduce会将Map运行于在就近与数据节点上,即将计算节点和存储节点放一起运行,减少节点之间数据传输的开销。


4.2 MapReduce架构(主从架构)

在这里插入图片描述

1、Client

(1)将用户编写的MapReduce程序提交到JobTracker端。
(2)用户通过Client提供的一些接口查看作业运行状态

2、JobTracker

(1)负责资源监控和作业调度,监控所有TaskTracker与Job的健康状况
(2)JobTracker会跟踪任务执行进度、资源使用情况,并将这些汇报给任务调度器端

3、TaskTracker

(1)TaskTracker会周期性地通过心跳将本节点上资源地使用情况和任务运行情况汇报给JobTracker,同时接收JobTracker发送过来地任务命令,执行相应地操作。
(2)TaskTracker通过shot(任务槽)等量划分本节点上的资源量来分配资源,shot分为MapShot和ReduceShot分别供Map和Reduce使用。

4、Task

Map和Reduce是两种Task,均有TaskTracker启动。


4.3 MapReduce核心函数

1、Map函数

输入是分布式文件系统的文件块,将其转化成键值对,然后输出一批键值对,这些键值对是计算的中间结果,这批键值对会被缓存到内存中,周期性的写入本地磁盘。

2、Reduce函数

输入是相同键值k的value集合,就是<k,list(value)>,然后对这些value处理,并把这些值汇总求和,生成一个键值对。


4.4 MapReduce工作流程

在这里插入图片描述

1、加载文件

从分布式文件系统中加载文件

2、任务分片

InputFormat对文件进行格式验证,把大文件在逻辑上(用户自定义)切分成很多split(分片)。每个分片对应一个Map任务,Map任务即数量由split数量

3、Map任务

记录阅读器根据分片的位置和长度信息,从文件系统中相关的各个数据块中读出来,输出<Key,Value>形式。然后作为Map的输入,Map中就是用户自己撰写的逻辑,处理完后生成一堆的<Key,Value>。

4、shuffle过程

在这里插入图片描述
(1)简介:Map任务生成的<Key,list(Value)>先写入到内存中,当缓存满的时候再发生溢写,即写到本地磁盘中,同时清空内存,溢写的时候经历分区、排序、合并操作,生成多个磁盘文件,然后把多个磁盘文件的分区归并成一个磁盘文件的分区,然后通知Reduce任务取走相应的磁盘分区。Reduce各个不同的机器中的Map任务中取走属于自己任务的分区,然后进行归并,然后合并。然后把结果输入给reduce任务

(2)Map端的shuffle过程

在这里插入图片描述
1)从分布式文件系统中加载文件,InputFormat对文件进行格式验证,把大文件在逻辑上(用户自定义)切分成很多split(分片)。每个分片对应一个Map任务。
2)Map任务生成的<Key,list(Value)>先写入到内存中,当缓存满的时候再发生溢写
3)溢写的过程中需要对数据分区(分区数量取决于Reduce任务数量),然后每个分区里的相关数据要进行排序(默认操作),然后可能发生合并操作(combine),即是对相同K的键值对相加,减少写入磁盘数据量。然后把这些数据写入磁盘,生成一个磁盘文件。
4)对多个溢写文件进行规并,生成一个大的文件,这个文件里面都是分区,排序的,然后写入本地磁盘。
5)JobTracker检测到这个过程结束后,通知Reduce取走属于自己的分区。

(3)Reduce端的shuffle过程
在这里插入图片描述
(1)Reduce任务接到JobTracker通知去相应的Map任务所在的机器上面拉到自己本地(自己的机器上)
(2)由于从多个不同的Map任务上拉取的数据,先归并(生成一个KeyList,比如<a,<1,1,1>>),再合并(如果用户定义了,比如<a,1>,<a,1>—><a,2>),再写入到磁盘。
(3)在磁盘上再归并成大文件。
(4)把文件给Reduce任务处理。

4.5 MapReduce应用程序执行流程

在这里插入图片描述
用户写完应用程序后

(1)程序进行部署:把程序分配到不同机器上,一个机器作为Master,部分机器作为Woker,一部分执行Map任务,一部分执行Reduce任务。把执行的应用程序逻辑分发到这些机器上。
(2)Master监控集群的空闲状态,讲MapReducer任务分配一部分Woker执行Map任务,一些Woker执行Reduce任务。
(3)对大文件进行分片,然后用记录阅读器生成键值对,然后提交给Map函数,然后输出中间文件(一堆Keyvalue文件),写入缓存。
(4)缓存数据写满后,把缓存中的数据经过分区排序,可能发生的合并操作,写入磁盘。
(5)负责执行Reduce任务的机器使用远程调用从各个相关Map任务的机器中属于自己的数据,拉入到本地,把数据归并,然后传给用户自定义的Reduce函数。
(6)把相关的结果写入到分布式文件系统
注意:虽然Map阶段的Map任务和Reduce阶段的Reduce任务都是并行的,但是Reduce阶段依赖于Map阶段数据,所以一个MapReduce模型都是只有一个Map阶段和一个Reduce阶段。

4.6 MapReduce存在的问题

(1)存在单点故障

(2)JobTracker大包大揽导致任务过重

  • 既要管资源管理调度分配
  • 也要管任务的调度、监控以及失败的恢复

(3)容易内存溢出:分配资源的时候只考虑任务数,不考虑每个任务数到底消耗多少cpu和内存。

(4)资源划分不合理:他是把cpu资源打包,然后强行的等分成很多slot,再把slot划分给Map和Reduce,两者不能转化,导致如果一方空闲一方忙碌,资源划分不合理。

(5)MapReduce 主要面向对大规模数据的处理,适用于离线批
处理场景。

(6)由于每次操作需要遍历所有数据,MapReduce 并不适用于
需要实时响应的系统。

(7) 源代码层面分析的时候,代码非常的难读,增加 bug 修复和版本维护的难度。

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

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:59:33-

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