MapReduce 概述原理说明

news2024/9/26 1:22:28

文章目录

  • MapReduce概述
    • 一、MapReduce定义
    • 二、MapReduce 优缺点
      • 1、MapReduce 优点
        • (1)、MapReduce 易于编程
        • (2)、良好的扩展性
        • (3)、高容错性
        • (4)、适合PB级以上的海量数据的离线处理
      • 2、MapReduce 缺点
        • (1)、不擅长实时计算
        • (2)、不擅长流式计算
        • (3)、不擅长DAG(有向图)计算
    • 三、MapReduce 核心编程思想
      • 1、Map阶段
      • 2、Reduce 阶段
      • 3、若干细节问题
    • 四、MapReduce 进程
    • 五、官方WordCount源码
    • 六、常用序列化类型
    • 七、MapReduce 编程规范
      • 1、Mapper阶段
      • 2、Reduce 阶段
      • 3、Driver 阶段

MapReduce概述

一、MapReduce定义

  1. MapReduce 是一个分布式运算程序的编程框架,是用户开发"基于Hadoop"的数据分析应用的核心框架
  2. MapReduce
    核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上

二、MapReduce 优缺点

1、MapReduce 优点

(1)、MapReduce 易于编程

它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的PC机器上运行,也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的,因为这个特点使得MapReduce编程变得非常流行

(2)、良好的扩展性

当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展它的计算能力

(3)、高容错性

MapReduce设计的初衷就是使程序能够布置在廉价的PC机器上,这就要求它具有很高的容错性,比如其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而完全由Hadoop内部完成的

(4)、适合PB级以上的海量数据的离线处理

可以实现上千台服务器集群并发工作,提供数据处理能力

2、MapReduce 缺点

(1)、不擅长实时计算

MapReduce 无法像MySQL一样,在毫秒或者秒级内返回结果

(2)、不擅长流式计算

流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化,这是因为MapReduce自身的设计特点决定了数据源必须是静态的

(3)、不擅长DAG(有向图)计算

多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出,在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下

三、MapReduce 核心编程思想

1、Map阶段

  1. MapReduce 运算程序一般需要分成两个阶段:Map阶段和Reduce阶段
  2. Map阶段的并发MapTask,完全并发运行,互不相干

MapReduce 默认一个文件的大小是128MB,要是超出了就会分成一个一个的块,这里将这个文件分为了三个块,将块分好之后,就会启动相应的进程,MapTask ,它运行MapTask是怎么读取数据的呢,它不是一下全部读进去,它是按行进行读取的,按空格切分行内的单词,看具体是什么,比如看下面这个流程图,Spark Hive中间有空格那么就按照空格切分行内的单词,如果中间是制表符,那么就用\t 来切割,看具体的情况。然后切割完成之后它就形成单词了,KV键值对(单词,1),比如下面这个流程图 <spark,1>,<Hive,1> 就切成这种形式了,一个单词出现了几次的键值对。然后要进行分区,方便Reduce阶段好进行统计,三个文件块,每个文件块都分为两个区,一个区是a-p开头的单词,一个区是q-z开头的单词
在这里插入图片描述

2、Reduce 阶段

Reduce 阶段的数据都来源于,Map阶段

  1. Reduce 阶段的并发Reduce Task,完全互不相干,但是他们的数据依赖于上一个阶段的所有 MapTask 并发示例的输出
  2. MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行
    在这里插入图片描述

3、若干细节问题

当理清Map阶段和Reduce阶段流程分别要做的事情之后,还需要处理以下的问题:

  1. MapTask 是如何运行
  2. ReduceTask如何工作
  3. MapTask如何控制分区排序等
  4. MapTask和ReduceTask之间如何衔接
  5. 四、MapReduce 进程

运行一个MapReduce程序需要开启几个进程? 下面这三个类需要我们启动
一个完整的MapReduce程序在分布式运行时有三类实例进程:

  1. MrAppMaster:负责整个程序的过程调度及状态协调

  2. MapTask:负责Map阶段的整个数据处理流程

  3. ReduceTask:负责Reduce阶段的整个数据处理流程

五、官方WordCount源码

采用反编译工具编译源码,发现WordCount案例有Map类,Reduce类和Driver驱动类,且数据的类型是Hadoop自身封装的序列化类型

六、常用序列化类型

常用的数据类型对应的Hadoop数据序列化类型
Java 类型Hadoop Writable类型
booleanBoolenWritable
byteByteWritable
intIntWritable
floatFloatWritable
longLongWritable
doubleDoubleWritable
StringText
mapMapWritable
arrayArrayWritable

七、MapReduce 编程规范

这些步骤基本上都是固定的,有一个套路
用户编写的程序分为三个部分:Mapper、Reduce、和Driver

1、Mapper阶段

(1) 用户自定义的Mapper要继承自己的父类
(2) Mapper的输入数据是KV键值对的形式(KV的形式可自定义)
(3) Mapper中的业务逻辑写在map()方法中
(4) Mapper的输出数据是KV对的形式(KV的类型可自定义)
(5) map() 方法(MaspTask进程) 对每一个<K,V> 只调用一次

2、Reduce 阶段

(1) 用户自定义的Reduce继承自己的父类
(2) Reduce的输入数据类型对应Mapper的输出数据类型,也是KV
(3) Reduce 的业务逻辑写在reduce() 方法中 根据自己需求重写这个方法
(4) ReduceTask 进程每一组相同k的<K,V> 组调用一次reduce() 方法

3、Driver 阶段

相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象

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

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

相关文章

二叉树进阶

博主的博客主页&#xff1a;CSND博客 Gitee主页&#xff1a;博主的Gitee 博主的稀土掘金&#xff1a;稀土掘金主页 博主的b站账号&#xff1a;程序员乐 公众号——《小白技术圈》&#xff0c;回复关键字&#xff1a;学习资料。小白学习的电子书籍都在这。 目录根据二叉树创建字…

基于java+springmvc+mybatis+vue+mysql的协同过滤算法的电影推荐系统

项目介绍 基于协同过滤算法的电影推荐系统利用网络沟通、计算机信息存储管理&#xff0c;有着与传统的方式所无法替代的优点。比如计算检索速度特别快、可靠性特别高、存储容量特别大、保密性特别好、可保存时间特别长、成本特别低等。在工作效率上&#xff0c;能够得到极大地…

Hive自定义UDF函数

以下基于hive 3.1.2版本 Hive中自定义UDF函数&#xff0c;有两种实现方式&#xff0c;一是通过继承org.apache.hadoop.hive.ql.exec.UDF类实现&#xff0c;二是通过继承org.apache.hadoop.hive.ql.udf.generic.GenericUDF类实现。 无论是哪种方式&#xff0c;实现步骤都是&…

网上超市系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 研究内容&#xff1a;设计开发简单购网上超市系统&#xff0c;采用Java语言&#xff0c;使用ySQL数据库&#xff0c; 实…

毕业设计 单片机家用燃气可视化实时监控报警仪 - 物联网 嵌入式 stm32

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理4.1 硬件部分4.2 软件部分5 部分核心代码6 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两…

SAP ABAP 开发管理 代码内存标记 位置使用清单(Mark of memory id)

SAP ABAP 开发管理 代码内存标记 位置使用清单&#xff08;Mark of memory id&#xff09; 引言&#xff1a; 代码内存标记&#xff08;Mark of memory id&#xff09;是我开发中对 ABAP MEMORY ID 使用管理的一种方法&#xff0c;他能有效保障使用了 ABAP MEMORY ID 程序的可…

25岁从运维转向软件开发是选择Python还是Java

25岁的年龄不大&#xff0c;若是有扎实的基础&#xff0c;后期转转向软件开发是个不错的选择&#xff0c;Python是目前最火的编程语言&#xff0c;python作为人工智能的主要编程语言也有着不错的发展前景。 关于编程语言的选择&#xff0c;如果从就业的角度出发应该重点考虑一…

[附源码]Nodejs计算机毕业设计基于框架的校园爱心公益平台的设计与实现Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

Mechatrolink III转EtherCAT网关模块解决方案

概述 工业以太网在工业控制领域越来越流行&#xff0c;协议种类较多&#xff0c;例如Mechatrolink III、EtherCAT、Powerlink、Profinet、EtherNet/IP等等&#xff0c;在数控加工领域主流的协议有Mechatrolink III、EtherCAT。但是各种协议之间很难通信协作。 安川电机的Mech…

CPOFDM-16QAM性能仿真,输出接收端的星座图

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 CP-OFDM&#xff08;Cyclic Prefix Orthogonal Frequency Division Multiplexing&#xff0c;循环前缀正交频分复用&#xff09;通信系统采用多个正交子载波&#xff08;Orthogonalsub-Carrier&a…

非科班出身零基础能学好编程吗

近几年IT行业越来越火热&#xff0c;有很多人想转行跨界进入这个行业&#xff0c;那么作为初学者的你&#xff0c;是不是也很困惑&#xff0c;0基础非科班出身能学好编程吗&#xff1f; 编程是一个技术活&#xff0c;没有专业知识想进入这个行业是行不通的&#xff0c;这也决定…

Go工程化项目布局

如果你尝试学习Go&#xff0c;或者你正在为自己建立一个Poc或者一个玩具项目&#xff0c;这个项目布局是没有啥必要的&#xff0c;从一些简单的事情开始&#xff08;一个main文件绰绰有余&#xff09;。当有更多的人参与这个项目的时候&#xff0c;你讲需要更多的结构&#xff…

基于springboot超市进销存管理系统(Java毕业设计,包含部署文档)

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

神经网络种类及应用领域,常用的神经网络有哪些

1、神经网络算法的三大类分别是&#xff1f; 神经网络算法的三大类分别是&#xff1a; 1、前馈神经网络&#xff1a; 这是实际应用中最常见的神经网络类型。第一层是输入&#xff0c;最后一层是输出。如果有多个隐藏层&#xff0c;我们称之为“深度”神经网络。他们计算出一…

[附源码]Python计算机毕业设计Django网上鲜花购物系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

一篇文章带你轻松手撕AVL树的构建

1.AVL树介绍 我们知道一般情况下二叉搜索树的查找效率是很高的&#xff0c;但是遇到极端情况下时间复杂度就会来到O(N) 那么为了消除这种极端情况的影响&#xff0c;我们就需要调节这个二叉树通过一些操作转成一颗二叉平衡树&#xff0c;调节完毕就会得到一颗AVL树。 2.AVL树模…

【Linux】第二部分 保姆级手把手教你如何安装Linux

【Linux】第二部分 保姆级手把手教你如何安装Linux 文章目录【Linux】第二部分 保姆级手把手教你如何安装Linux2.保姆级手把手教你如何安装Linux首先下载vmware接下来下载centOS**接着开启虚拟机,对操作系统进行配置**总结2.保姆级手把手教你如何安装Linux 首先下载vmware vm…

阿里云服务器安装oracle11g

1.服务器配置 //linux版本 CentOS-7-x86_64 //oracle版本 linux.x64_11gR2 //查看服务器的CPU个数 cat /proc/cpuinfo | grep physical | sort -n | uniq | wc -l //查看服务器的型号 dmidecode -s system-product-name //查看服务器的cpu型号…

LeetCode题解 14 (3,98) 无重复字符的最长子串,验证二叉搜索树

文章目录无重复字符的最长子串(3)代码解答&#xff1a;验证二叉搜索树(98)代码解答&#xff1a;无重复字符的最长子串(3) 从题目中可以得知我们要找到该字符串中没有重复元素的最长字串,这道题可以采用滑动窗口的方法来解决,今天在这里我们采用新的方法来解决。 首先我们先将该…

转行学Python开发 怎么快速入门

对于很多转行的新手而言&#xff0c;直接参加培训班是最省时省力的事情&#xff0c;参加培训班既不用担心自己学不会&#xff0c;也不用担心遇到不懂的问题时没有人解答&#xff0c;更重要的是培训班理论实践的教学更贴合实际市场需求。 Python目前是IT行业需求量最大的语言&a…