iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >hadoop之MapReduce框架原理是什么
  • 898
分享到

hadoop之MapReduce框架原理是什么

2023-07-05 17:07:57 898人浏览 泡泡鱼
摘要

今天小编给大家分享一下hadoop之mapReduce框架原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。MapRe

今天小编给大家分享一下hadoopmapReduce框架原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    MapReduce框架的简单运行机制:

    MapReduce是分为两个阶段的,MapperTask阶段,和ReduceTask阶段。(中间有一个Shuffle阶段)

    Mapper阶段,可以通过选择什么方式(K,V的选择对应不同的方法)来读取数据,读取后把数据交给Mapper来进行后续的业务逻辑(用户写),让后进入Reduce阶段通过Shuffle来拉取Mapper阶段的数据,让后通过OutputFORMat(等方法)来写出(可以是ES,mysqlHBase,文件)

    Mapper阶段: 

    InputFormat数据输入:

    切片与MapTask并行度决定机制:

    MapTask个数,决定了并行度(相当于在生成map集合的过程中有几个人在干活),**(不一定越多越好,当数据量小的时候可能开启的众多MapTask的时间用一个MapTask已经计算完成)

    数据块:Block是hdfs物理上把数据分成一块一块。数据块是HDFS存储数据单位。

    数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。数据切片是MapReduce程序计算输入数据的单位,一个切片会对应启动一个MapTask。

    hadoop之MapReduce框架原理是什么

    job提交过程源码解析

    因为我们找的job提交,所以在job提交函数哪里打个断点,

    步入函数后   

    ensureState(JobState.DEFINE);  是确保你的状态是正确的(状态不对或者running 都会抛异常)

    setUseNewapi();       处理Hadoop不同版本之间的API兼容

    connect();          连接,(客户端需要与集群或者本机连接)

    checkSpecs(job); 校验 校验输出路径是否已经创建,是否有参

    return submitter.submitJobInternal(Job.this, cluster);   核心代码    步入的时候需要点两下,

    第一个步入是步入的参数Job  第二个才步入此方法 

    这个方法是提交job(在集群模式下,提交的job包含(通过客户端方式把jar包提交给集群),在本地不需要提交jar包,jar在本地是存在的)

    还会进行切片,生成切片信息(几个切片就有几个MapTask)

    还会 生成xml文件

    综上  job提交会交三样东西(jar,xml文件,切片信息---》集群模式下)

    最后会删除所有的信息文件

    切片逻辑:

    **(切片是每一个文件单独切片)

    在本地是32m一块,前边说过,默认一块对应一个切片,但是有前提条件,再你减去32m的时候,余下最后一块如果大于1.1倍就重新分配切片,但如果小于1.1,则不能更新分片

    例子1:

    已有一个32.1m的数据   物理分块是(32m+0.1m)切片分布是(1个切片,因为32.1/32=1.003125<1.1   所以使用一个切片)

    例子2:

    已有一个100m的数据

    100-32-32=36>32(36/32=1.125>1.1   所以最后36m需要分配两个切片)

    **块的大小没办法改变,但是可以调切片大小(maxSize让切片调小)(minSize让切片调大)

    hadoop之MapReduce框架原理是什么

    切片总结

    hadoop之MapReduce框架原理是什么

    hadoop之MapReduce框架原理是什么

    (开一个MapTask  默认是占1g内存+1个cpu)

    hadoop之MapReduce框架原理是什么

    1)FileInputFormat实现类

    思考:在运行MapReduce程序时,输入的文件格式包括:基于行的日志文件、二进制格式文件、数据库表等。那么,针对不同的数据类型,MapReduce是如何读取这些数据的呢?

    FileInputFormat常见的接口实现类包括:TextInputFormat、KeyValueTextInputFormat、NLineInputFormat、CombineTextInputFormat和自定义InputFormat等。(应用场景的不同选择不同的接口实现类)

    TextInputFormat是默认的FileInputFormat实现类。按行读取每条记录。键是存储该行在整个文件中的起始字节偏移量, LongWritable类型。值是这行的内容,不包括任何行终止符(换行符和回车符),Text类型。

    CombineTextInputFormat用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个MapTask处理。

    进行虚拟存储

    (1)虚拟存储过程:

    将输入目录下所有文件大小,依次和设置的setMaxInputSplitSize(切片大小)值比较,如果不大于设置的最大值,逻辑上划分一个块。如果输入文件大于设置的最大值且大于两倍,那么以最大值切割一块;当剩余数据大小超过设置的最大值且不大于最大值2倍,此时将文件均分成2个虚拟存储块(防止出现太小切片)。

    hadoop之MapReduce框架原理是什么

     测试

    再不使用CombineTextInputFormat情况下(默认TextInputFormat)

    hadoop之MapReduce框架原理是什么

    可以看到切片为4

    添加代码,设置实现类为CombineTextInputFormat     和   设置虚拟存储切片大小

    // 如果不设置InputFormat,它默认用的是TextInputFormat.classjob.setInputFormatClass(CombineTextInputFormat.class); //虚拟存储切片最大值设置4mCombineTextInputFormat.setMaxInputSplitSize(job, 4194304);

    hadoop之MapReduce框架原理是什么

    可以看到,现在是3个切片

    我们可以通过改变虚拟切片大小来改变调用的切片的数量

    综上:影响切片的数量的因素为:(1)数据量的大小(2)切片的大小(一般会自动调整)(3)文件格式(有些文件是不可切片的)

    影响切片大小的因素:   HDFS中块的大小(通过调maxsize,minsize与块的大小进行比较来判断)

    Shuffle阶段:

    shuffle阶段是一个从mapper阶段出来的后的阶段,会写入(k,v)一个环形缓冲区(缓冲区分为两半,一半存储索引,一半存储数据,默认100m,到达80%后会反向逆写(减少时间消耗,提高效率,逆写是因为不需要等待全部溢写后在进行写入操作)逆写入文件前会进行分区(分区的个数与reduceTask的个数有关)排序(对key进行排序,但是存储位置并不发生改变,只改变索引的位置,改变存储位置消耗资源较大))写入文件后会进行归并排序(在有序的情况下,归并是最高效的))

    排序:

    排序可以自定义排序,举例全排序:

    自定义了一个Bean类,bean对象做为key传输,需要实现WritableComparable接口重写compareTo方法,就可以实现排序。

     Combiner合并:

    并不满足所有生产环境下,只有在不影响最终业务逻辑下才可以实现(求和就可以,算平均值就不可以) 

    combiner与reducetask区别如下:

    hadoop之MapReduce框架原理是什么

    ReduceTask阶段:

    (1)Copy阶段:ReduceTask从各个MapTask上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。

    (2)Sort阶段:在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。按照MapReduce语义,用户编写reduce()函数输入数据是按key进行聚集的一组数据。为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个MapTask已经实现对自己的处理结果进行了局部排序,因此,ReduceTask只需对所有数据进行一次归并排序即可。

    (3)Reduce阶段:reduce()函数将计算结果写到HDFS上。

    ReduceTask的个数可以手动进行设置,设置几就会产生几个文件(分区同上)

    Reduce Join:

    简述流程:

    (1)自定义bean对象(序列化反序列化函数---implements Writable)

    (2)写mapper类     先重写setup方法(因为本案例需要两个文件,初始化(读多个文 希望先获取到文件名称(多文件) 一个文件一个切片   setup方法是一个优化手段 获取文件名称)

    (3)写reduce类(业务逻辑)   先创建一个集合(类型为bean类型)和bean对象用于存储

    用for循环遍历value(key是一样的  一样的key才会进入同一个reduce方法)

    获取文件名判断写出不同的业务逻辑

    "order"表:

    先创建一个bean对象,用于存储数据,用于后续写入集合

    用到方法   BeanUtils.copyProperties(tmpOrderBean,value);  获取原数据

    让后加入上述创建的集合 orderBeans.add(tmpOrderBean);

    “pd”表:

    BeanUtils.copyProperties(pdBean,value);直接获取原数据

    存储结束,结合阶段:

    使用增强for

    orderbean.setPname(pdBean.getPname());

    使用set函数直接设置集合中的pname

    让后写入

    context.write(orderbean,NullWritable.get());
    业务结束

    Reduce Join的缺点:这种方式中,合并的操作是在Reduce阶段完成,Reduce端的处理压力太大,Map节点的运算负载则很低,资源利用率不高,且在Reduce阶段极易产生数据倾斜。

    Map Join:

    使用场景

    Map Join适用于一张表十分小、一张表很大的场景。

    Map端实现数据合并就解决了Reduce Join的缺点(数据倾斜)

    简述流程:

    在map类中

    setup方法:将较小文件读入缓存,将数据存储到全局的map集合中,将缓存中的数据全部写入

    重写的map方法中:

    转换成字符串在切割,通过切割后的数组获取map集合中的pname

    让后重新设置输出文件的格式进行写出

    以上就是“hadoop之MapReduce框架原理是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: hadoop之MapReduce框架原理是什么

    本文链接: https://www.lsjlt.com/news/353839.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • hadoop之MapReduce框架原理是什么
      今天小编给大家分享一下hadoop之MapReduce框架原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。MapRe...
      99+
      2023-07-05
    • hadoop中mapreduce的作用是什么
      MapReduce是Hadoop中的一种编程模型,用于处理大规模数据集的并行计算。它将数据分为若干个小块,并在集群中的多个节点上并行...
      99+
      2024-03-14
      hadoop
    • MapReduce的工作原理是什么
      本篇文章为大家展示了MapReduce的工作原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive...
      99+
      2023-06-03
    • Spring框架的原理是什么
      这篇文章主要讲解了“Spring框架的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring框架的原理是什么”吧!简要介绍spring的原理,并结合一个简单的实例,如何配置使用...
      99+
      2023-06-03
    • hadoop框架结构核心是什么
      这篇文章主要为大家展示了“hadoop框架结构核心是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“hadoop框架结构核心是什么”这篇文章吧。图示:DKhadoop技术技术架构图hadoop...
      99+
      2023-06-02
    • VB.NET虚拟框架原理是什么
      这篇文章给大家分享的是有关VB.NET虚拟框架原理是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。大家都知道微软公司推出的.NETFramework3.5SP1,自今年二月以来就已经测试,还有Visual S...
      99+
      2023-06-17
    • laravel框架运行原理是什么
      Laravel框架的运行原理主要是基于MVC(模型-视图-控制器)架构模式。以下是Laravel框架的运行原理的基本步骤:1. 路由...
      99+
      2023-09-06
      laravel
    • springboot框架的工作原理是什么
      Spring Boot 是一个基于 Spring 框架的快速开发应用程序的框架,它简化了 Spring 应用程序的开发和部署过程。S...
      99+
      2023-10-25
      springboot
    • php框架的底层原理是什么
      这篇文章主要介绍了php框架的底层原理是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二...
      99+
      2023-06-14
    • ASP.NET MVC 2.0框架的原理是什么
      ASP.NET MVC 2.0框架的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用微软VS工具开发Web应用程序主要有两种方式:一种是常用的创建ASP.NET W...
      99+
      2023-06-17
    • Android图片框架Glide原理是什么
      本篇内容主要讲解“Android图片框架Glide原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android图片框架Glide原理是什么”吧!首先引入依赖    ...
      99+
      2023-07-04
    • Hadoop的工作原理是什么
      Hadoop的工作原理是基于分布式存储和计算的概念。Hadoop由两个核心组件组成:Hadoop分布式文件系统(HDFS)和MapR...
      99+
      2024-03-11
      Hadoop
    • Spring Security 安全框架的原理是什么
      本篇文章给大家分享的是有关Spring Security 安全框架的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。认证授权分析用户在进行资源访问时,要求系统要对用户进...
      99+
      2023-06-20
    • React前端框架实现原理是什么
      这篇文章主要介绍“React前端框架实现原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“React前端框架实现原理是什么”文章能帮助大家解决问题。vdomreact 和 vue 都是基于 v...
      99+
      2023-07-02
    • mfc框架的基本运行原理是什么
      MFC(Microsoft Foundation Classes)框架是微软公司开发的一套C++类库,用于简化Windows应用程序...
      99+
      2024-03-02
      mfc
    • Java大数据开发Hadoop MapReduce的优缺点是什么
      这篇文章主要介绍了Java大数据开发Hadoop MapReduce的优缺点是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java大数据开发Hadoop MapReduce的优缺点是什...
      99+
      2023-07-05
    • hadoop的基本工作原理是什么
      Hadoop的基本工作原理是将大规模数据分布式存储在多台服务器上,并通过MapReduce编程模型进行数据处理和分析。具体来说,Ha...
      99+
      2024-04-09
      hadoop
    • hadoop数据去重的原理是什么
      Hadoop数据去重的原理是通过MapReduce模型进行实现的。具体步骤如下:1. Map阶段:将需要去重的数据集拆分成多个小块,...
      99+
      2023-10-19
      hadoop
    • struts框架的原理和应用方法是什么
      Struts框架是一个用于开发Java Web应用程序的MVC(模型-视图-控制器)框架。它提供了一种结构化的方式来组织和管理Web...
      99+
      2023-10-26
      struts
    • 大数据框架中Hadoop和Spark的异同是什么
      大数据框架中Hadoop和Spark的异同是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在大数据框架中Hadoop和Spark可以说是很火的了,这俩个框架都是对数据进行存...
      99+
      2023-06-28
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作