Hadoop3教程(七):MapReduce概述

news2024/10/6 6:05:29

文章目录

  • (68) MR的概述&优缺点
  • (69)MR的核心思想
    • MapReduce进程
  • (70)官方WC源码&序列化类型
  • (71)MR的编程规范
    • Mapper
    • Reducer
    • Driver
  • (72)WordCount案例需求分析
  • 参考文献

(68) MR的概述&优缺点

MapReduce是一个分布式运算程序的编程框架,简单的说,就是一个 分布式计算框架,是Hadoop的核心所在。

MR的核心功能,是将用户编写的业务逻辑代码和自身组件相融合,整合成一个完整的分布式运算程序,并发运行在Hadoop集群上。

优点:

  • 易于编程。用户只关心业务逻辑就可以;
  • 良好的扩展性。可动态增加服务器节点,以解决计算资源不足的问题;
  • 高容错性。如果有一台节点崩溃,不会影响整个集群的计算。其他可用节点会接过崩溃节点的任务,继续计算。
  • 适合海量数据的计算。这里的海量,一般是指TB以上级别的。

缺点:

  • 不擅长实时计算。无法达到mysql这种毫秒级查询,无法快速响应;
  • 不擅长流式计算。指数据一条条过来,实时的流式计算。一般是spark streaming和flink适合做这个。MR的特性决定了其数据源必须是静态的。
  • 不擅长DAG有向无环图。像是迭代计算,即DAG中,任务一的输出会作为任务二的输入,任务二的输出则会作为任务三的输入,以此类推,是一个链式的结构。MR不擅长处理这种,当然,只是不擅长,不是不支持。相比来讲,spark更适合用来处理这种任务。( 因为spark的中间结果是基于内存的,而MR是基于磁盘,重复IO性能太低下

(69)MR的核心思想

经典案例:统计一段话中每个单词出现的总次数,其中a~p的结果放在一个文件,q~z的结果放在一个文件里。

MR的计算分为两个阶段:Map阶段和Reduce阶段。

接下来我们以经典案例,来讲解MR的主要工作流程,如图:

在这里插入图片描述

1) Map阶段,是任务分配阶段,一般是按照块大小,每个MapTask负责处理一块数据。这个块一般是128M。

这个阶段的MapTask并发实例,完全并发运行,互不相干。

在我们刚说的这个案例里,MapTask中都做了些什么呢?

  • 一行一行读数据,进行处理;
  • 按照空格分割行内单词;
  • 把切出来的单词,组成KV键值对(单词,1)
  • 将所有的KV键值对,按照单词首字母,分成两个分区(ap分区和qz分区),导出至磁盘保存。

2) Reduce阶段,就是任务汇总统计阶段。

这一阶段的ReduceTask并发实例也是互不相干,但是它们依赖于Map阶段所有MapTask并发实例的输出。

在这个案例里,因为结果需要有2个文件,所以这里会有2个ReduceTask,一个负责汇总出ap,一个负责汇总出qz,并分别输出至文件。

在一个MR计算过程中,只能包含一个Map阶段和一个Reduce阶段。如果用户的业务逻辑过于复杂,那么可以创建多个MR计算程序,串行计算。这就相当于链式的有向无环图计算了。

一些问题细节:

  • MapTask内部是如何工作的?
  • ReduceTask内部是如何工作的?
  • MapTask内部是如何排序、控制分区的?
  • MapTask和ReduceTask之间是如何衔接的?

这些问题都将在后面一一解答。

MapReduce进程

一个完整的MR程序在分布式运行的时候,会产生三种类型的进程:

  • MrAppMaster:是ApplicationMaster的子进程,负责整个Mr程序的过程调度及状态协调;
  • MapTask:负责Map阶段的数据处理流程;
  • ReduceTask:负责Reduce阶段的数据处理流程

MapTask和ReduceTask似乎都是yarnchild,这里仅供参考一下。

(70)官方WC源码&序列化类型

WordCount(即WC),这是Hadoop里一个很经典的MR案例,教程后面很多地方在讲解底层原理的时候都会以WC为例做讲解。

官方WordCount的源码在哪儿呢?

大概在Hadoop安装目录的share/hadoop/mapreduce/hadoop-mapreduce-example-xxx.jar,这里面存储了Hadoop的一些代码案例。

jar包反编译工具:jd-gui。

WC的源码里,核心是三个类:

  • 主类,负责调度/驱动
  • TokenizerMapper类,继承了Mapper
  • IntSumReducer类,继承了Reducer

分工很明确。

另外,这里简单介绍下hadoop中常用的数据序列化类型,后面讲序列化的时候会用到:

Java类型Hadoop Writable类型
BooleanBooleanWritable
ByteByteWritable
IntIntWritable
FloatFloatWritable
LongLongWritable
DoubleDoubleWritable
StringText
MapMapWritable
ArrayArrayWritable
NullNullWritable

(71)MR的编程规范

用户在编写一个完整的MR程序时,需要实现3个部分,即Mapper、Reducer和Driver。

Mapper

Mapper阶段:

  • 用户自定义的Mapper,要继承对应的系统Mapper类;
  • Mapper的输入数据需要是KV键值对的形式;
  • Mapper中的业务逻辑,需要写在Mapper类里声明的map()方法里;
  • Mapper的输出数据,也需要是KV对的形式;
  • map()方法对每一个KV对,都调用一次;(每个KV都会跑一遍属于自己的map()方法)

Reducer

Reducer阶段:

  • 用户自定义的Reducer,要继承对应的系统Reducer类;
  • Reducer的输入类型跟Mapper的输出类型是要保持一致的。这个很好理解,串行的毕竟;
  • Reducer的业务逻辑,需要写在Reducer类里声明的reduce()方法里;
  • 在ReduceTask进程中,reduce()对==每一组相同K==的KV对,都调用一次;(所以这里容易发生数据倾斜)

注意,最后一条,Mapper跟Reducer是不一样的。Reducer是每一组相同K的KV对,进一个reduce()。

这个其实很好理解,Reducer阶段就是做汇总的,它是一个数据量减少的过程,其实就是一个把n条具有相同特征的数据,合并成一条数据的过程。

以WC举例,第一句话里字母a出现了3次,第二句话里字母a出现了4次,即mapper会分别输出两个键值对,即(a,3)和(a,4),Reducer则会将这两个键值对输入同一个reduce()进行加和,并最终输出(a,7)。

Driver

Driver阶段:

相当于yarn集群的客户端,用于提交整个程序到YARN集群,具体提交的是什么呢?其实是封装了MR程序相关运行参数的一个job对象。所以驱动类里其实就是定义一些运行参数之类的。

(72)WordCount案例需求分析

一个标准的WordCount需求:统计给定的文本文件中,每一个单词出现的次数。

我们需要针对这个需求,编写对应的Mapper、Reducer和Driver。

这里就不展示代码了,只是展示一下各个类的主要功能。

Mapper负责:

  • 将MapTask传过来的文本内容先转换成string;
  • 根据空格将这一行切分成单词;
  • 将切出来的单词,包装成键值对<单词,1>的形式;

Reducer负责:

  • 将相同K的value值加在一起;
  • 输出该K的总次数;

Driver阶段:

  • 获取配置信息,获取job对象实例;
  • 指定本程序的jar包所在的本地路径;
  • 关联Mapper和Reducer业务类;
  • 指定Mapper的输出类型(K和V是什么类型);
  • 指定最终输出的类型。(整个MR程序结束后的输出,而不是Reducer阶段的输出)
  • 指定job的输入文件的所在目录;
  • 指定job的输出结果的所在目录(输出目录不能提前存在?);
  • 提交作业;

参考文献

  1. 【尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放】

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

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

相关文章

C# 图解教程 第5版 —— 第3章 C# 编程概述

文章目录 3.1 一个简单的 C# 程序&#xff08;*&#xff09;3.2 标识符3.3 关键字3.4 Main&#xff1a;程序的起始点&#xff08;*&#xff09;3.5 空白3.6 语句&#xff08;*&#xff09;3.7 从程序中输出文本3.7.1 Write&#xff08;*&#xff09;3.7.2 WriteLine&#xff08…

【数据结构】排序--选择排序(堆排序)

目录 一 堆排序 二 直接选择排序 一 堆排序 堆排序(Heapsort)是指利用堆积树&#xff08;堆&#xff09;这种数据结构所设计的一种排序算法&#xff0c;它是选择排序的一种。它是 通过堆来进行选择数据。 需要注意的是排升序要建大堆&#xff0c;排降序建小堆。 直接选择排…

Vue2+SpringBoot实现数据导出到csv文件并下载

前言 该功能用于导出数据到csv文件&#xff0c;并且前端进行下载操作。涉及到java后端以及前端。后端获取数据并处理&#xff0c;前端获取返回流并进行下载操作。csv与excel文件不大相同。如果对导出的数据操作没有很高要求的话&#xff0c;csv文件就够了。具体差异自行百度。我…

nodejs+vue教学辅助管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

nodejs+vue考研信息查询系统-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

python特别篇—github基本操作手册

一、开始使用 1.1 “Hello world” 1.1.1 github介绍 GitHub是一个基于Git版本控制系统的代码托管平台。它提供了一个在线的代码仓库&#xff0c;使开发者可以将自己的代码存储在云端&#xff0c;并与其他开发者进行协作。GitHub不仅仅是一个代码托管平台&#xff0c;还提供了…

IDEA中查看整个项目代码行数

近期正在手撸Spring源码&#xff0c;想要看下自己写了多少行代码。记录下如何查看项目的代码行数&#xff0c;方便日后查阅

【论文笔记】LLM-Augmenter

github&#xff1a;https://github.com/pengbaolin/LLM-Augmenter&#xff08;暂无处readme外其他文件&#xff09; paper&#xff1a;https://arxiv.org/pdf/2302.12813.pdf ![在这里插入图片描述](https://img-blog.csdnimg.cn/24cba6213c0f4c00a5646eb9007b3aa2.png#pic_cen…

【OS】操作系统课程笔记 第五章 并发性——互斥、同步和通信

并发性&#xff1a;并发执行的各个进程之间&#xff0c;既有独立性&#xff0c;又有制约性&#xff1b; 独立性&#xff1a;各进程可独立地向前推进&#xff1b; 制约性&#xff1a;一个进程会受到其他进程的影响&#xff0c;这种影响关系可能有3种形式&#xff1a; 互斥&am…

【从零开始学习Redis | 第三篇】在Java中操作Redis

前言&#xff1a; 本文算是一期番外&#xff0c;介绍一下如何在Java中使用Reids &#xff0c;而其实基于Java我们有很多的开源框架可以用来操作redis&#xff0c;而我们今天选择介绍的是其中比较常用的一款&#xff1a;Spring Data Redis 目录 前言&#xff1a; Spring Data…

Koordinator 协同 containerd NRI 增强容器 QoS,提升应用性能

作者&#xff1a;韩柔刚 - 阿里云&#xff0c;张康 - Intel 随着云基础业务类型和硬件资源的日益丰富&#xff0c;数据中心的资源利用率得到了显著提高&#xff0c;但也带来了资源争用的风险。在提高节点资源利用率的同时&#xff0c;确保应用程序的 QoS&#xff08;Quality o…

铜死亡+机器学习+WGCNA+分型生信思路

今天给同学们分享一篇单基因泛癌免疫实验生信文章“IGF2BP3 overexpression predicts poor prognosis and correlates with immune infiltration in bladder cancer”&#xff0c;这篇文章于2023年2月3日发表在BMC Cancer期刊上&#xff0c;影响因子为3.8。 膀胱癌是全球最常见…

利用向导创建MFC

目录 1、项目的创建&#xff1a; 2、项目的管理 &#xff1a; 3、分析以及生成的项目代码 &#xff1a; &#xff08;1&#xff09;、查看CFrame中的消息映射宏 &#xff08;2&#xff09;、自动生成事件 &#xff08;3&#xff09;、在CFrame中添加对应的鼠标处理函数 …

基于静电放电优化的BP神经网络(分类应用) - 附代码

基于静电放电优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于静电放电优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.静电放电优化BP神经网络3.1 BP神经网络参数设置3.2 静电放电算法应用 4.测试结果…

python爬虫入门详细教程-采集云南招聘网数据保存为csv文件

python爬虫之User-Agent大全、随机获取User-Agent 网站地址数据提取技术介绍采集目标流程分析python代码实现 网站地址 https://www.ynzp.com/ 这个网址特别适合新手拿来练习&#xff0c;你采集多了还有个验证码页面&#xff0c;验证码是4位数字&#xff0c;很清晰&#xff0c…

C++笔记之通用多态函数包装器std::function

C笔记之通用多态函数包装器std::function code review! 文章目录 C笔记之通用多态函数包装器std::function1.存储自由函数&#xff0c;lambda&#xff0c;std::bind 调用的结果2.存储到成员的调用3.存储到函数对象四.基本语法五.使用std::function定义函数对象六.使用std::fu…

UGUI交互组件ScrollView

一.ScrollView的结构 对象说明Scroll View挂有Scroll Rect组件的主体对象Viewport滚动显示区域&#xff0c;有Image和mask组件Content显示内容的父节点&#xff0c;只有个Rect Transform组件Scrollbar Horizontal水平滚动条Scrollbar Vertical垂直滚动条 二.Scroll Rect组件的属…

Unity角色或摄像机移动和旋转的控制脚本

该脚本挂载到需要被移动、旋转控制的物体身上&#xff0c;也可以之间挂在到摄像机上&#xff01; 挂载到摄像机上可以实现第一人称视角控制&#xff01; 挂载到物体身上&#xff0c;配合摄像机跟踪脚本可以实现&#xff0c;第三人称视角控制&#xff01; 第一人称视角 将角…

【每日一题】只出现一次的数字 II

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;位运算 写在最后 Tag 【位运算】【数组】【2023-10-15】 题目来源 137. 只出现一次的数字 II 题目解读 找出数组中仅出现一次的数字&#xff0c;其余数字仅出现三次。要求线性时间复杂度求解。 解题思路 本题的朴素…

基于nodejs+vue教学辅助管理系统

学生&#xff1b;首页、个人中心、本课程设计了线上教学辅助系统 ,学生可以此系统实现在线学习&#xff0c;作业提交管理、作业成绩管理。随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。教师&#xff1a;首页、个人中心、课程信息管理、教学资料管理、作业信息管…