hadoop03-MapReduce【尚硅谷】

news2024/9/29 18:09:54

大数据学习笔记

MapReduce

一、MapReduce概述

  1. MapReduce是一个分布式运算程序的编程框架,是基于Hadoop的数据分析计算的核心框架

MapReduce处理过程为两个阶段:Map和Reduce。

  • Map负责把一个任务分解成多个任务;
  • Reduce负责把分解后多任务处理的结果汇总。
  1. MapReduce优点
  • MapReduce易于编程
    它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的PC机器上运行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。就是因为这个特点使得MapReduce编程变得非常流行。
  • 良好的扩展性
    当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展它的计算能力。
  • 高容错性
    -MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,这就要求它具有很高的容错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而完全是由Hadoop内部完成的。
  • 适合PB级以上海量数据的离线处理
    可以实现上千台服务器集群开发工作,提供数据处理能力。
  1. MapReduce缺点
  • 不擅长实时计算
  • 不擅长流式计算
    流式计算的输入数据是动态的,而MapReduce的输入数据是静态的,不能动态变化。这是因为MapReduce自身的设计特点决定了数据源必须是静态的。
  • 不擅长DAG(有向图)计算
    多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。
  1. MapReduce核心编程思想
    1)分布式的运算程序往往需要分成至少2个阶段。
    2)第一个阶段的MapTask并发实例,完全并行运行,互不相干。
    3)第二个阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出。
    4)MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。
    总结:分析WordCount数据流走向深入理解MapReduce核心思想。
    在这里插入图片描述
  2. 常用序列化类型
    在这里插入图片描述
  3. MapTask的并行度决定机制
    数据块:Block是HDFS物理上把数据分成一块一块。
    数据切分:数据切分只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。(只是在切分时默认按照块大小来切分)
    在这里插入图片描述
  4. FileInputFormat切片源码解析
    1) 程序先找到你数据存储的目录。
    2)开始遍历处理(规划切片)目录下的每一个文件
    3)遍历第一个文件ss.txt
    a) 获取文件大小fs.sizeOf(ss.txt)
    b) 计算切片大小
    computeSplitSize(Math.max(minSize.Math.min(maxSize,blocksize)))=blocksize=128M
    c) 默认情况下,切片大小=blocksize
    d)开始切,形成第一个切片:ss.txt–0:128M 第二个切片ss.txt–128:256M 第三个切片ss.txt–256M:300M(每次切片时,都要判断切完剩下的部分是否大于块的1.1倍,不大于1.1倍就划分一块切片)
    e)将切片信息写到一个切片规划文件中
    f)整个切片的核心过程在getSplit()方法中完成
    g) InputSplit只记录了切片的元数据信息,比如起始位置、长度以及所在的节点列表等。
    4)提交切片规划文件到YARN上,YARN上的MrAppMaster就可以根据切片规划文件计算开启MapTask个数。
  5. FileInputFormat切片机制
    1)简单地按照文件的内容长度进行切片
    2)切片大小,默认等于Block大小
    3)切片时不考虑数据集整体,而是逐个针对每一个文件单独切片
    在这里插入图片描述
    针对不同的文件类型FileInputFormat有不同的文件接口。
  6. CombineTextInputFormat切片机制
    CombineTextInputFormat用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个MapTask处理。
  7. NLineInputFormat
    NLineInputFormat每个map进程处理的InputSplit不再按Block块去划分,而是按NLineInputFormat指定的行数N来划分。
  8. NLineInputFormat
    可指定分片数。
    在这里插入图片描述

二、自定义inputformat案例

  1. 需求
    在这里插入图片描述
  1. 自定义一个类继承FileInputFormat
    1)重写isSplitable()方法,返回false不可分割
    2)重写createRecordReader(),创建自定义的RecordReader对象,并初始化
  2. 改写RecordReader,实现一次读取一个完整文件封装为KV
    1)采用IO流一次读取一个文件输出到value中,因为设置了不可切片,最终把所有文件都封装到了value中
    2)获取文件路径信息+名称,并设置key
  3. 设置Driver
    1)设置输入的inputFormat
    2)设置输出的outputFormat
    在这里插入图片描述

二、MapReduce详细工作流程

  1. MapReduce详细工作流程(一)
  1. 待处理文本 xx.txt
  2. 提交前要获取参数信息,形成一个任务分配的规划
  3. 提交信息 job(看是yarn 还是本地)
  4. APPmaster接收请求,根据切片来计算出开多少个MapTask
  5. 按照默认切片方式128M为一块,默认按照TextInputFormat读数据
  6. 将kv内容交给Mapper(逻辑运算内容) 业务逻辑
  7. 将数据写到环形缓冲区,包含元数据信息和真实输入的kv,元数据中包含索引、分区信息、key起始、value起始等信息。
  8. 分区、排序。
  9. 将缓冲区文件,溢写到文件,并分区且区内有序。
  10. Merge 归并,将溢写出的文件合并并排序
  11. 合并
    在这里插入图片描述
  1. MapReduce详细工作流程(二)
  1. reduce根据当前分区的个数(MapTask数目)开启reduce Task进程
  2. 下载到ReduceTask本地磁盘,对每个分区做合并并进行归并排序
    14.使用reduce方法 读文件数据
  3. 分组
  4. 默认TextOutputFormat

三、Shuffle机制

  1. Shuffle机制
    Map方法之后,Reduce方法之前的数据处理过程称之为Shuffle。
  2. Map方法将 kv数据写入环形缓冲区,默认100M 当达到80%时会向磁盘溢写,(可选流程)将溢写到磁盘的分区进行合并排序
  3. reduce 拷贝maptask处理的分区数据放入内存,如果内存不够写入磁盘,对每一个map来的数据归并排序,按照相同的key执行reduce方法。
    在这里插入图片描述

四、Partition分区

要求将统计结果按照条件输出到不同文件(分区)中去
分区总结:
在这里插入图片描述

五、排序

指定排序规则。

  1. 概述
    排序是MapReduce框架中最重要的操作之一。
    MapTask和ReduceTask均会对数据按照key进行排序。该操作属于Hadoop的默认行为。任何应用程序中的数据均会被排序,而不管逻辑上是否需要。
    默认排序是按照字典顺序排序,且实现该排序的方法是快速排序

对应MapTask,它会将处理的结果暂时放到环形缓冲区中,当环形缓冲区使用率达到一定阈值后,再对缓冲区中的数据进行一次快速排序,将这些有序数据溢写到磁盘上,而当数据处理完毕后,它会对磁盘上所有文件进行归并排序
对于ReduceTask,它会从每个MapTask上远程拷贝相应的数据文件,如果文件大小超过一定阈值,则溢写磁盘上,否则存储在内存中。如果磁盘上文件数目达到一定阈值,则进行一次归并排序以上传一个更大文件;如果内存中文件大小或者数目超过一定阈值,则进行一次合并后将数据溢写到磁盘上。当所有数据拷贝完毕后,ReduceTask统一对内存和磁盘上的所有数据进行一次归并排序
2. 排序分类
1)部分排序
MapReduce根据输入记录的键对数据集排序。保证输出的每个文件内部有序
2)全排序
最终输出结果只有一个文件,且文件内部有序。实现方式是只设置一个ReduceTask。但该方法在处理大型文件时效率极低,因为一台机器处理所有文件,完全丧失了MapReduce所提供的并行架构。
3)辅助排序
在reduce端对key进行分组。应用于:在接收的key为bean对象时,想让一个或几个字段相同(全部字段比较不相同)的key进入到同一个reduce方法时,可以采用分组排序。
4)二次排序
自定义排序,如果compareTo中的判断条件为两个即为二次排序。

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

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

相关文章

必应ai注册方法

1.进行配置下载Microsoft Edge Canary,链接下载 Microsoft Edge Insider Channels,打开Microsoft Edge Canary,在Header Editor - Microsoft Edge Addons中安装Header Editor插件,点击Header Editor图标,选择右下角的&…

网页唤起 APP中Activity的实现原理

疑问的开端大家有没有想过一个问题:在浏览器里打开某个网页,网页上有一个按钮点击可以唤起App。这样的效果是怎么实现的呢?浏览器是一个app;为什么一个app可以调起其他app的页面?说到跨app的页面调用,大家是…

python之面向对象编程

1、面向对象介绍: 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种类 只要是对象,就肯定有属性 2、 面向对象的几个特性: class类: 一个类即对一类拥有相同属性的对象的…

STM32笔记

目录 1.1. 预备阶段 1.2. 单片机介绍 2. 初识STM32 2.1. STM32 1.1. 预备阶段 1.2. 单片机介绍 1.2.1. 单片机是什么 单片微型计算机(Single Chip Microcomputer)简称为单片机(Microcontrollers),也称为微控制单元(Microcontroller Uni…

Python对遥感影像重采样,以及重采样方法

首先,本次重采样使用的是GDAL方法完成 参考了以下博客,并根据自己的需要进行了删改以及原理的探究: 重采样:栅格影像重采样 我使用了下该代码,发现是可行的,但是仍然存在一定的问题,即他的采样…

【java web篇】Maven的基本使用以及IDEA 配置Maven

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

Redis高级-主从复制相关操作

2.1 主从复制简介 2.1.1 高可用 首先我们要理解互联网应用因为其独有的特性我们演化出的三高架构 高并发 应用要提供某一业务要能支持很多客户端同时访问的能力,我们称为并发,高并发意思就很明确了 高性能 性能带给我们最直观的感受就是:速…

西北工业大学大学物理(I)下期末考试2021-2022选填解析

11 告诉你n2了,那么l0或者1,后续限制类推。2 几乎每年都出。散射波波长的偏移只与散射角有关。3 产生激光的条件。先认识到激光就是受激幅射光放大。受激辐射是产生激光的必要条件,粒子数偏转是产生激光的必要条件,谐振腔也需要。…

速来~与 Werner Vogels 博士一起探索敏捷性与创新速度一起提升的秘方

Amazon Web Services 的现代应用程序创新一直是 Amazon 公司坚持追求的核心目标。约20年前,我们经历了一次彻底的转型,旨在建立起“发明、发布、再发明、再发布、重新开始、洗牌、再重复”的快速迭代流程。正是此番探索,彻底改变了我们构建应…

OAK相机如何将yoloV8模型转换成blob格式?

编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 ▌前言 Hello,大家好,这里是OAK中国,我是助手…

Paddle配置

目录: 1.激活环境 2.版本选择 突发情况:ModuleNotFoundError: No module named paddle 检验是否安装成功 1.激活环境 Anaconda: conda remove -n paddle --all conda activate paddle 2.版本选择 打开链接:https://www.pa…

银行数字化转型导师坚鹏:BLM银行数字化转型战略课程大纲

BLM银行数字化转型战略——以BLM模型为核心,实现知行果合一 课程背景: 很多银行存在以下问题: 不知道如何系统地制定银行数字化转型战略? 不清楚其它银行数字化转型战略是如何制定的? 不知道其它银行数字化转型战略…

【离线数仓-8-数据仓库开发DWD层设计要点-工具域互动域流量域用户域相关事实表】

离线数仓-8-数据仓库开发DWD层-工具域&互动域&流量域&用户域相关事实表离线数仓-8-数据仓库开发DWD层设计要点-工具域&互动域&流量域&用户域相关事实表一、工具域相关事实表1.工具域优惠券领取事务事实表&使用(下单)事务事实…

基于nodejs+vue的果蔬商城在线销售系统vscode

水果蔬菜在线销售借助于当今盛行互联网技术,为消费者和供应商提供了一个更加方便的交易平台,使消费者足不出户就可以选购所需商品,省下许多时间和精力。商家通过该销售系统可以快速了解市场行情,更好地适应市场需求,扩…

【华为OD机试模拟题】用 C++ 实现 - 找到它(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明找到它题目输入输出示例一输入输出示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD …

工具篇(四)基于WPS的数据处理和分析

作者的话 大家好,我是一名练习时长两年半的数据分析师,今天想和大家分享一下我在使用WPS进行数据操作时的经验。 在日常工作中,数据处理是我们最常用到的功能之一。而在处理数据时,一个强大的工具是至关重要的。我个人非常喜欢使…

Clickhouse学习:MergeTree

MergeTree一、MergeTree逻辑存储结构二、MergeTree物理存储结构三、总结一、MergeTree逻辑存储结构 如上图所示,在排序键(CountrID、Date)上做索引,数据会按照这两个字段先后排序ClickHouse是稀疏索引,每隔8192行做一个索引,如(a,1),(a,2),比如想查a,要读取[0,3)之间的内容,稀疏…

2023年三月份图形化四级打卡试题

活动时间 从2023年3月1日至3月21日,每天一道编程题。 本次打卡的规则如下: 小朋友每天利用10~15分钟做一道编程题,遇到问题就来群内讨论,我来给大家答疑。 小朋友做完题目后,截图到朋友圈打卡并把打卡的截图发到活动群…

网络原理之初识

目录 一. 网络互连 1. 局域网 2. 广域网 二. 网络通信基础 1. IP 地址 2. 端口号 3. 网络协议 4. 协议分层 5. TCP/IP 五层网络模型 (简述) 6. 网络数据传输的基本流程 一. 网络互连 随着时代的发展,越来越需要计算机之间互相通信&am…

【华为OD机试模拟题】用 C++ 实现 - IPv4 地址转换成整数(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明IPv4 地址转换成整数题目输入输出示例一输入输出说明示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,