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

Hadoop:认识MapReduce

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的原理及流程。

相关文章:

Hadoop:认识MapReduce

MapReduce是一个用于处理大数据集的编程模型和算法框架。其优势在于能够处理大量的数据&#xff0c;通过并行化来加速计算过程。它适用于那些可以分解为多个独立子任务的计算密集型作业&#xff0c;如文本处理、数据分析和大规模数据集的聚合等。然而&#xff0c;MapReduce也有…...

9.4 OpenGL帧缓冲:纹理和帧缓冲之间的反馈循环

纹理和帧缓冲之间的反馈循环 Feedback Loops Between Textures and the Framebuffer 当在图形编程中&#xff0c;特别是OpenGL这样的图形API中处理纹理&#xff08;Texture&#xff09;和帧缓冲区&#xff08;Framebuffer&#xff09;时&#xff0c;可能会出现一种称为“反馈循…...

相机图像质量研究(6)常见问题总结:光学结构对成像的影响--对焦距离

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…...

fast.ai 机器学习笔记(二)

机器学习 1&#xff1a;第 5 课 原文&#xff1a;medium.com/hiromi_suenaga/machine-learning-1-lesson-5-df45f0c99618 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这些笔记将继续更…...

vue3 elementplus DateTimePicker 日期时间设置默认时间为当天

DateTimePicker里面有个自带属性 可以实现这个需求&#xff0c;如图&#xff1a; // 设置当前当天时间范围 00: 00: 00 - 23:59:59 const currentDate [setDefaultDate(0), setDefaultDate(1)]const setDefaultDate (type:number ): string > {let t ;let date new Da…...

2024年笔记--centos docker离线安装启动失败

Failed to start Docker Application Container Engine 错误如下&#xff1a; [rootel70 docker]# systemctl start docker.service Job for docker.service failed because start of the service was attempted too often. See "systemctl status docker.service" …...

2024.2.10 DMS(数据库管理系统)初体验

数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件&#xff0c;用于建立、使用和维护数据库&#xff0c;简称DBMS。它对数据库进行统一的管理和控制&#xff0c;以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据&#xff0c;数据库管…...

zk集群--集群同步

1.概述 前面一章分析了集群下启动阶段选举过程&#xff0c;一旦完成选举&#xff0c;通过执行QuorumPeer的setPeerState将设置好选举结束后自身的状态。然后&#xff0c;将再次执行QuorumPeer的run的新的一轮循环&#xff0c; QuorumPeer的run的每一轮循环&#xff0c;先判断…...

复习面经哦

1.函数可以变量提升 JavaScript 中的函数存在变量提升的概念&#xff0c;这意味着在执行代码之前&#xff0c;函数声明会被提升到其作用域的顶部。这使得你可以在函数声明之前调用函数。然而&#xff0c;这种行为只适用于函数声明&#xff0c;而不是函数表达式。 下面是一些关…...

c++ STL系列——(二)vector

引言 在现代C编程中&#xff0c;std::vector是最常用的动态数组实现之一&#xff0c;它是C标准模板库&#xff08;STL&#xff09;的一部分。vector提供了一种方式&#xff0c;以单一数据结构来存储元素集合&#xff0c;并且可以动态地调整大小以适应新元素。本文将深入探讨ve…...

STM32能够做到数据采集和发送同时进行吗?

STM32能够做到数据采集和发送同时进行吗&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「STM32的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&am…...

5.Swift常量

Swift 常量 在 Swift 中&#xff0c;除了可以声明变量&#xff08;使用 var 关键字&#xff09;&#xff0c;还可以声明常量&#xff08;使用 let 关键字&#xff09;。常量在赋值后就不能再修改其值&#xff0c;适合用于存储不会改变的数据。以下是关于 Swift 常量的一些重要…...

Linux运行级别 | 管理Linux服务

Linux运行级别 级别&#xff1a; 0关机1单用户2多用户但是不运行nfs网路文件系统3默认的运行级别&#xff0c;给一个黑的屏幕&#xff0c;只能敲命令4未使用5默认的运行级别&#xff0c;图形界面6重启切换运行级别&#xff1a; init x管理Linux服务 systemctl命令&#xf…...

Nginx 配置 SSL证书

成功配置SSL证书后&#xff0c;您将能够通过HTTPS加密通道安全访问Nginx服务器。 一、准备材料 SSL证书绑定的域名已完成DNS解析&#xff0c;即您的域名与主机IP地址相互映射。您可以通过DNS验证证书工具&#xff0c;检测域名DNS解析是否生效。具体操作&#xff1a; 【1】登录…...

如何正确理解和获取S参数

S参数是网络参数&#xff0c;定义了反射波和入射波之间的关系&#xff0c;给定频率的S参数矩阵指定端口反射波b的矢量相对于端口入射波a的矢量&#xff0c;如下所示&#xff1a; bS∙a 在此基础上&#xff0c;如下图所示&#xff0c;为一个常见的双端口网络拓扑图&#xff1a;…...

Sping Cloud Hystrix 参数配置、简单使用、DashBoard

Sping Cloud Hystrix 文章目录 Sping Cloud Hystrix一、Hystrix 服务降级二、Hystrix使用示例三、OpenFeign Hystrix四、Hystrix参数HystrixCommand.Setter核心参数Command PropertiesFallback降级配置Circuit Breaker 熔断器配置Metrix 健康统计配置Request Context 相关参数C…...

CSS太极动态图

CSS太极动态图 1. 案例效果 我们今天学习用HTML和CSS实现动态的太极&#xff0c;看一下效果。 2. 分析思路 太极图是由两个旋转的圆组成&#xff0c;一个是黑圆&#xff0c;一个是白圆。实现现原理是使用CSS的动画和渐变背景属性。 首先&#xff0c;为所有元素设置默认值为0…...

TI毫米波雷达开发——High Accuracy Demo 串口数据接收及TLV协议解析 matlab 源码

TI毫米波雷达开发——串口数据接收及TLV协议解析 matlab 源码 前置基础源代码功能说明功能演示视频文件结构01.bin / 02.binParseData.mread_file_and_plot_object_location.mread_serial_port_and_plot_object_location.m函数解析configureSport(comportSnum)readUartCallback…...

基于tomcat运行jenkins常见的报错处理

目录 1.jenkins.util.SystemProperties$Listener错误 升级jdk11可能遇到的坑 2.java.lang.RuntimeException: Fontconfig head is null, check your fonts or fonts configuration 3.There were errors checking the update sites: UnknownHostException:updates.jenkins.i…...

算法学习——LeetCode力扣二叉树篇1

算法学习——LeetCode力扣二叉树篇1 144. 二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 描述 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&a…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...