Hadoop:认识MapReduce

news2024/11/26 6:00:35

MapReduce是一个用于处理大数据集的编程模型和算法框架。其优势在于能够处理大量的数据,通过并行化来加速计算过程。它适用于那些可以分解为多个独立子任务的计算密集型作业,如文本处理、数据分析和大规模数据集的聚合等。然而,MapReduce也有其局限性,比如对于需要快速迭代的任务或者实时数据处理,MapReduce可能不是最佳选择。

总的来说,MapReduce是大数据技术中的一个重要概念,它在Hadoop生态系统中发挥着关键作用,特别是在处理大规模数据集时,它提供了一种可靠且高效的方法来并行处理数据。本篇我们来讲解一下MapReduce的相关内容。

一 MapReduce模型介绍

随着需要处理的数据量激增,我们开始借助分布式并行编程来提高程序的性能,分布式并行程序运行在大规模计算机集群上,可以并行执行大规模数据处理任务,从而获得海量计算的能力

谷歌公司最先提了分布式并行模型MapReduce,hadoop MapReduce则是其的开源实现。但是在MapReduce出现之前,就已经有MPI一类的并行计算框架了,两者的区别主要在于:

传统并行计算框架MapReduce
集群架构共享式(共享内存/共享存储)非共享式

容错性

容错性差容错性好
价格相对较低
硬件&扩展性刀片服务器+高速网+SAN,扩展性差普通PC机,扩展性好
学习难度
使用场景实时、细粒度、计算密集型批处理、非实时、数据密集型

可以看出,两者最大的区别在与其适用的场景不同,之前我们对于并行计算的要求更多注重计算密集型,而云计算则更注重对“大数据”的处理,因此传统的并行计算框架已经远远不能满足我们的需求了。

MapReduce的优点在于其易于编程、具有良好的扩展性以及高容错性,可以实现上千台服务器集群并发工作,提供数据处理能力。但同样的,MapReduce也不适合进行实时计算或流式计算

MapReduce将复杂的、运行于大规模集群上的并行计算过程高度抽象到了两个函数——map和reduce。通过MapReduce框架,我们不需要掌握分布式编程的细节,也能够容易的将自己的程序运行在分布式系统上。

MapReduce的一个重要理念就是“计算向数据靠拢”,而不是传统的“数据向计算靠拢”。

MapReduce框架采用了master/slave架构,包括一个master和若干个slave,master上运行作业跟踪器JobTracker,负责整个作业的调度和处理以及失败和恢复,slave上运行负责具体任务执行的组件TaskTracker,负责接受JobTracke发给它的作业处理指令,完成具体的任务处理。

map函数的输入为<k,v>键值对,每一个输入的<k,v>键值对会输出一批<k2,v2>中间结果。

reduce函数的输入为<k,list(v)>,输出为<k,v>键值对。list(v)表示一批属于同一个k的value。

二 MapReduce体系结构

MapReduce的体系结构包括:

  • Client 客户端

用户编写的MapReduce程序通过Client提交到JobTracker端 ,用户可通过Client提供的一些接口查看当前提交作业的运行状态。

  • JobTracker 作业跟踪器。

JobTracker负责资源监控和作业调度。

JobTracker 监控所有TaskTracker与Job的健康状况,一旦发现失败,就将相应的任务转移到其他节点

JobTracker负责任务的调度,即将不同的Task分派到相应的TaskTracker中。

JobTracker 会跟踪任务的执行进度、资源使用量等信息,并将这些信息发送给TaskScheduler,而调度器会在资源出现空闲时, 选择合适的任务去使用这些资源

  • TaskScheduler 任务调度器

负责任务的调度,即将不同的Task分派到相应的TaskTracker中。

  • TaskTracker 

TaskTracker会周期性地通过“心跳”将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker 发送过来的命令并执行相应的操作(如启动新任务、杀死任务等) 。

TaskTracker 使用“slot”等量划分本节点上的资源量(CPU、内存等)。 一个Task 获取到一个slot 后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上的空闲slot分配给Task使用。slot 分为Map slot 和 Reduce slot 两种,分别供MapTask 和Reduce Task 使用,两者不通用。

  • Task 

Task 分为Map Task 和Reduce Task 两种,在一台机器上可以同时运行两种任务,均由TaskTracker启动

三 MapReduce工作流程

不同的map任务之间不会进行通信。

不同的Reduce任务之间不会发生任何信息交换。

用户不能显式地从一台机器向另一台机器发送消息。

所有的数据交换都是通过MapReduce框架自身去实现。

1) MapReduce 框架使用 InputFormat模块做Ma前的预处理,比如验证输入的格式是否符合输入定义;然后,将输入文件切分为逻辑上的多个 InputSplit。 InputSplit是 MapReduce对文件进行处理和运算的输入单位,只是一个逻辑概念,每个 InputSplit并没有对文件进行实际切分,只是记录了要处理的数据的位置和长度
2)因为 InputSplit是逻辑切分而非物理切分,所以还需要通过 RecordReader(RR)根据InputSplit中的信息来处理 InputSplit中的具体记录,加载数据并将其转换为适合Map任务读取的键值对,输入给Map任务
3)Map任务会根据用户自定义的映射规则,输出一系列的<key,value>作为中间结果

4)为了让Reduce可以并行处理Map的结果,需要对Map的输出进行一定的分区(Partition)、排序(Sort)、合并(Combine)、归并(Merge)等操作,得到<key,value-list>形式的中间结果,再交给对应的Reduce来处理,这个过程称为Shuffle
5)Reduce以一系列<key,value-list>中间结果作为输入,执行用户定义的逻辑,输出结果交给OutputFormat模块
6)OutputFormat 模块会验证输出目录是否已经存在,以及输出结果类型是否符合配置文件中的配置类型,如果都满足,就输出Reduce的结果到分布式文件系统


本篇我们简单介绍了MapReduce模型及其工作流程,下面我们会借助章鱼大数据平台完成我们的第一个MapReduce练习,通过代码编写进一步理解MapReduce的原理及流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1449177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cron表达式介绍和使用

Cron表达式是一种用于配置定时任务的字符串&#xff0c;它由数字、字符和符号组成&#xff0c;用于指定任务在某个时间点或周期性地执行。其通常包含六个或七个字段&#xff0c;每个字段代表一个时间单位&#xff0c;如下表所示&#xff1a; 域必须取值范围特殊字符秒是[0, 59…

OpenGL-ES 学习(2)---- DepthTest

深度测试 OpenGL-ES 深度测试是指在片段着色器执行之后&#xff0c;利用深度缓冲区所保存的深度值决定当前片段是否被丢弃的过程 深度缓冲区通常和颜色缓冲区有着相同的宽度和高度&#xff0c;一般由窗口系统自动创建并将其深度值存储为 16、 24 或 32 位浮点数。(注意只保存…

EasyRecovery2024全新官方汉化中文版下载

确实&#xff0c;EasyRecovery以其强大的功能而闻名。以下是它的一些主要功能特点&#xff1a; 全面恢复能力&#xff1a;EasyRecovery可以恢复从各种存储设备中丢失的数据&#xff0c;包括硬盘、U盘、SD卡、数码相机、手机等。无论是因为误删除、格式化、分区丢失、病毒攻击还…

2-7基础算法-位运算

一.基础 位运算经常考察异或的性质、状态压缩、与位运算有关的特殊数据结构、构造题。 位运算只能应用于整数&#xff0c;且一般为非负整数&#xff0c;不能应用于字符、浮点等类型。 左移操作相当于对原数进行乘以2的幂次方的操作&#xff0c;低位补0 右移操作相当于对原数进…

Elasticsearch使用场景深入详解

Elasticsearch是一个开源的、分布式的、RESTful风格的搜索和数据分析引擎。它能够解决越来越多的用例&#xff0c;并不仅仅局限于全文搜索。以下是Elasticsearch的一些主要使用场景及其深入详解。 1. 全文搜索 Elasticsearch最初和最基本的应用场景就是全文搜索。全文搜索是指…

上位机图像处理和嵌入式模块部署(上位机主要功能)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 目前关于机器视觉方面&#xff0c;相关的软件很多。比如说商业化的halcon、vision pro、vision master&#xff0c;当然也可以用opencv、pytorch自…

第18讲 投票帖子管理实现

后端&#xff1a; /*** 删除指定id的投票信息* param id* return*/ GetMapping("/delete/{id}") Transactional public R delete(PathVariable(value "id")Integer id){voteDetailService.remove(new QueryWrapper<VoteDetail>().eq("vote_id…

clang前端

Clang可以处理C、C和Objective-C源代码 Clang简介 Clang可能指三种不同的实体&#xff1a; 前端&#xff08;在Clang库中实现&#xff09;编译驱动程序&#xff08;在clang命令和Clang驱动程序库中实现&#xff09;实际的编译器&#xff08;在clang-ccl命令中实现&#xff0…

Codeforces Round 925 (Div. 3) E. Anna and the Valentine‘s Day Gift (Java)

Codeforces Round 925 (Div. 3) E. Anna and the Valentine’s Day Gift (Java) 比赛链接&#xff1a;Codeforces Round 925 (Div. 3) E题传送门&#xff1a;E. Anna and the Valentine’s Day Gift 题目&#xff1a;E. Anna and the Valentine’s Day Gift 样例 #1 样例输…

DS:二叉树的顺序结构及堆的实现

创作不易&#xff0c;兄弟们给个三连&#xff01;&#xff01; 一、二叉树的顺序存储 顺序结构指的是利用数组来存储&#xff0c;一般只适用于表示完全二叉树&#xff0c;原因如上图&#xff0c;存储不完全二叉树会造成空间上的浪费&#xff0c;有的人又会问&#xff0c;为什么…

JVM(1)基础篇

1 初始JVM 1.1 什么是JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 Java源代码执行流程如下&#xff1a; 分为三个步骤&#xff1a; 编写Java源代码文件。 使用…

SpringBoot+Vue3 完成小红书项目

简介 该项目采用微服务架构&#xff0c;实现了前后端分离的系统设计。在前端&#xff0c;我们选择了 Vue3 配合 TypeScript 和 ElementUi 框架&#xff0c;以提升开发效率和用户体验。而在后端&#xff0c;则是运用 SpringBoot 和 Mybatis-plus 进行开发&#xff0c;保证了系统…

CFS三层靶机

参考博客&#xff1a; CFS三层内网靶场渗透记录【详细指南】 - FreeBuf网络安全行业门户 CFS三层靶机搭建及其内网渗透【附靶场环境】 | TeamsSix CFS三层网络环境靶场实战 - PANDA墨森 - 博客园 (cnblogs.com) CFS三层靶机实战--内网横向渗透 - 知乎 (zhihu.com) CFS靶机…

C++类和对象-C++对象模型和this指针->成员变量和成员函数分开存储、this指针概念、空指针访问成员函数、const修饰成员函数

#include<iostream> using namespace std; //成员变量 和 成员函数 分开储存的 class Person { public: Person() { mA 0; } //非静态成员变量占对象空间 int mA; //静态成员变量不占对象空间 static int mB; //函数也不占对象空间…

安卓价值1-如何在电脑上运行ADB

ADB&#xff08;Android Debug Bridge&#xff09;是Android平台的调试工具&#xff0c;它是一个命令行工具&#xff0c;用于与连接到计算机的Android设备进行通信和控制。ADB提供了一系列命令&#xff0c;允许开发人员执行各种操作&#xff0c;包括但不限于&#xff1a; 1. 安…

儿时游戏“红色警戒”之“AI警戒”

一、红色警戒里“警戒”命令背后的算法原理是什么 在《红色警戒》系列即时战略游戏中&#xff0c;“警戒”命令背后的算法原理相对简单但又实用&#xff0c;其核心目标是让单位能够自动检测并反击一定范围内的敌方单位。虽然具体的实现细节未公开&#xff0c;但可以推测其基本…

ICLR 2023#Learning to Compose Soft Prompts for Compositional Zero-Shot Learning

组合零样本学习&#xff08;CZSL&#xff09;中Soft Prompt相关工作汇总&#xff08;一&#xff09; 文章目录 组合零样本学习&#xff08;CZSL&#xff09;中Soft Prompt相关工作汇总&#xff08;一&#xff09;ICLR 2023#Learning to Compose Soft Prompts for Compositional…

变形金刚:第 2 部分:变形金刚的架构

目录 一、说明 二、实现Transformer的过程 第 1 步&#xff1a;代币化&#xff08;Tokenization&#xff09; 第 2 步&#xff1a;对每个单词进行标记嵌入 第 3 步&#xff1a;对每个单词进行位置嵌入 第 4 步&#xff1a;输入嵌入 第 5 步&#xff1a;编码器层 2.5.1 多头自注…

Linux makefile 大型多文件的处理

最简单的例子是 main.cpp test.cpp test.h 首先将这三个写好 然后的话 test.cpp 上面输出 helloworld 首先我们在同一个目录下创建一个makefile 文件 然后用vim 编辑它 如下图&#xff08;使用的c&#xff09; mybin 是我们的可执行程序 gcc是编译的命令 gcc 前面必…

[HCIE]vxlan --静态隧道

实验目的:1.pc2与pc3互通&#xff08;二层互通&#xff09;&#xff1b;2.pc1与pc3互通&#xff08;三层互通&#xff09; 实验说明&#xff1a;sw1划分vlan10 vlan20 ;sw2划分vlan30&#xff1b;上行接口均配置为Trunk 实验步骤&#xff1a; 1.配置CE1/CE2/CE3环回口互通&a…