MapReduce分布式计算框架


    MapReduce是Hadoop系统核心组件之一,是一种可用于大数据并行处理的计算模型、框架和平台,主要解决海量数据的计算,是目前分布式计算模型中应用较为广泛的一种。

一、MapReduce核心思想:分而治之

使用MapReduce操作海量数据时步骤:

  • 每个MapReduce程序被初始化为一个工作任务
  • 每个工作任务可以分为Map和Reduce l两个阶段
    • Map阶段:负责将任务分解,即把负责的任务分解成若干个简单任务来并行处理,但前提是这些任务没有必然的依赖关系,可以单独执行任务。
    • Reduce阶段:负责将任务合并,即把Map阶段的结果进行全局汇总。
二、MapReduce编程模型:用于处理大规模数据集的并行运算

    其编程思想实现过程通过map()和reduce() 函数来完成
    从数据格式上来看,map()函数接收的数据格式是键值对,产生输出结果也是键值对形式;reduce()函数会将map()函数输出的键值对作为输入,把相同key值的value进行汇总,输出新的键值对。(整个过程相当于键值对转换的过程)

具体MapReduce简易数据模型

  • 将原始数据处理成键值对<K1, V1>形式
  • 将解析后的键值对<K1, V1>传给map()函数,map()函数会根据映射规则,将键值对<K1, V1>映射为一系列中间结果形式的键值对<K2, V2>
  • 将中间形式的键值对<K2, V2>形成<K2, {V2, …}>形式传给reduce()函数处理,把具有相同key的value合并在一起,产生新的键值对<K3, V3>,此时的键值对<K3, V3>就是最终输出结果

注意:可以有Map过程,没有Reduce过程,Map过程产生的数据可以直接写入到HDFS中,当然如果任务复杂,也可以有多个Reduce过程。

三、MapReduce体系结构主要组成部分
  • client
  • JobTracker
  • TaskTracker
  • Task

在这里插入图片描述

四、MapReduce运行模式
  • 本地运行模式:在当前的开发环境模拟MapReduce执行环境,处理的数据及输出结果在本地操作系统(不需要搭建集群)
  • 集群运行模式:把MapReduce程序打成一个jar包,提交到yarn集群上去运行任务。由于yarn集群负责资源管理和任务调度,程序会被框架分发到集群中的节点上并发的执行,因此处理的数据和输出结果都在HDFS文件系统中
五、MapReduce编程实例:词频统计

词频统计原理图:
在这里插入图片描述
具体步骤:
在这里插入图片描述

六、MapReduce基本数据类型的序列化

    MapReduce中的数据类型都要实现Writable接口,以便用这些类型定义的数据可以被序列化进行网络传输和文件存储,效率比java中序列化高效。

  • Boolean => BooleanWritable
  • Byte => ByteWritable
  • Double => DoubleWritable
  • Float => FloatWritable
  • Integer => IntWritable
  • Long => LongWritable
  • String => Text
  • Null => NullWritable

注意:应用过程中也可以使用自定义的序列化类型对象(implements Writable)

七、MapReduce工作原理
  • 分片、格式化数据源
    • 分片操作:将源文件划分为大小相等的小数据块(2.x默认128M),也就是分片,Hadoop会为每一个分片构建一个Map任务,并由该任务运行自定义的map()函数,从而处理分片里的每一条记录
    • 格式化操作:将划分好的分片格式化为键值对(key代表偏移量,value代表每一行内容)
  • 执行MapTask:每个Map任务都有一个内存缓冲区(默认大小100M),输入的分片数据经过Map任务处理后的中间结果,会写入内存缓冲区中,如果写入的数据达到内存缓冲的阈值(80M),会启动一个线程将内存中溢出的数据写入磁盘,同时不影响map中间结果继续写入缓冲区。在溢出过程中,MapReduce框架会对key进行排序,如果中间结果比较大,会形成多个溢出文件,最后缓冲区数据也会全部溢出写入磁盘形成一个溢出文件,如果是多个溢写文件,则最后合并所有的溢写文件为一个文件。
  • 执行Shuffle过程:Shuffle会将MapTask输出的处理结果数据,分发给ReduceTask,并在分发的过程中,对数据按key进行分区和排序
  • 执行ReduceTask
  • 写入文件
1. MapTask工作过程

分为五个阶段:

  • Read阶段
  • Map阶段
  • Collect阶段
  • Spill阶段
  • Combiner阶段
2. ReduceTask工作过程

分为五个阶段:

  • Copy阶段
  • Merge阶段
  • Sort阶段
  • Reduce阶段
  • Write阶段
3. Shuffle工作过程

    shuffle是MapReduce的核心,用来确保每个reduce的输入都是按键排序的。它的性能高低直接决定了整个MapReduce程序性能的高低,map和reduce阶段都涉及到shuffle机制,主要作用是处理“中间结果”。
shuffle过程:

  • Combine(合并操作):所有Combine在map所做的事,减轻了reduce的事情
  • Partition(分区操作):数据归类

MapReduce使用哈希HashPartitioner归类,也可以自定义

八、MapReduce编程组件
  • InputFormat组件: 主要用于描述输入数据的格式,它提供两个功能,分别是数据切分和为Mapper提供输入数据。
    • addInputPath()
    • addInputPaths()
    • setInputPaths()
    • setInputPaths()
  • Mapper组件:Hadoop提供的Mapper类是实现Map任务的一个抽象基类,该基类提供了一个map()方法。
  • Reducer组件:Map过程输出的键值对,将由Reducer组件进行合并处理,最终以某种形式的结果输出。
  • Partitioner组件:Partitioner组件可以躺Map对Key进行分区,从而可以根据不同的key分发到不同的Reduce中去处理,其目的就是将key均匀分布在ReduceTask上。
  • Combiner组件:Combiner组件的作用就是对Map阶段的输出的重复数据先做一次合并计算,然后把新的(key,value)作为你Reduce阶段输出。
  • OutputFormat组件:OutputFormat是一个用于描述MapReduce程序输出格式和规范的抽象类
发布了72 篇原创文章 · 获赞 3 · 访问量 3554

猜你喜欢

转载自blog.csdn.net/id__39/article/details/104986883