MapReduce概述

Posted 杀智勇双全杀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MapReduce概述相关的知识,希望对你有一定的参考价值。

Hadoop概述

MapReduce简介

官方:基于yarn之上的大数据并行计算的框架
事实上,这是一套分布式编程的API,制定了分布式计算的规则,定义了程序应该怎么分布式运行,不用自己写分布式程序,只要调用MapReduce的API写出来的程序就是分布式程序。

设计思想

分布式分而治之的思想。

分:Map阶段。
合:Reduce阶段。

应用场景

适合:离线大数据的分布式计算。
不适合:实时的高性能的分布式计算场景。

运行阶段

大的分:Map阶段、Reduce阶段。
细的分:五大阶段(也有三大阶段,后续讲述)。
Input:负责读取程序中的数据。
Map、Shuffle、Reduce:负责数据的处理。
Output:负责保存计算的结果。

Input

功能:负责读取整个程序的输入,将文件、数据库中的数据读取到程序中。

使用InputFormat实现。

先将读取到的数据进行分片,切分为多个Split。再将每个分片中每一条数据转换为KV结构,返回每条数据,不同的实现类返回的KV不一样。

默认的类:TextInputFormat extends FIleInputFormat extends InputFormat

K:Long:这一行的偏移量。

V:String:这一行的内容。

Map

实现分布式计算的分。

先根据Input阶段划分的Split,每个Split会启动一个MapTask进程来处理对应Split的数据。MapTask处理每个分片中的KV结构的数据。

之后每个MapTask进程会构建一个Mapper类实例,调用Mapper类中的map方法对每个分片的数据进行处理。处理逻辑由Mapper类的map方法决定,每一条KV会调用一次map方法,参数是KV。

Shuffle

Input读取数据,返回KV(K1V1)。
Map阶段(输入:K1V1,输出:K2V2)。

排序:默认按照K2进行升序排序,排序是为了加快分组的效率。分组:默认按照K2进行分组。相同K2的所有V2在逻辑上属于同一组。

Reduce

实现分布式的合。

Reduce就是一个没有定义的功能的聚合函数,将所有Map的数据的进行聚合。

默认情况会启动1个ReduceTask进程对Shuffle逻辑分组以后的结果进行聚合。

ReduceTask会实例化一个Reducer的类的对象,调用reduce方法对每一组数据进行聚合。聚合的逻辑由reduce方法决定。

Output

将上一步处理的结果【Map/Reduce】进行保存输出。输出可以是文件,也可以是数据库。
通过OutputFormat实现。

调用对应输出类的方法将结果进行输出保存。
默认:TextOutputFormat extends FileOutputFormat extends OutputFormat。
会将K和V写入文件中,K和V在文件中用制表符分隔。

编程规则

Driver类

驱动类,作为程序运行的入口类,最好extends Configured implement Toolmain:作为程序的运行入口。run:用于构建、配置、提交MapReduce Job。需要自己开发。

Input类

输入类,InputFormat。默认:TextInputFormat,读文件,K1是行的偏移量,V1是行的内容。DBInputFormat:读数据库的。TableInputFormatFormat:读Hbase。不用自己开发。

Mapper类

在Map阶段,构建实例化,调用map方法对数据进行处理。必须 extends Mapper。需要重写map方法,需要自己开发。

Reducer类

在Reduce阶段,构建实例化,调用reduce方法对数据进行处理。必须 extends Reducer。需要重写reduce方法,需要要自己开发。

Output类

输出类,OutputFormat。默认:TextOutputFormat,写文件,将K3和V3保存到文件中。DBOutputFormat:写数据库。TableOutputFormat:写Hbase。不要自己写。

数据结构与数据类型

数据结构

键值对:所有的数据都以KV形式存在。
Input:将各种数据变成K1V1。
Map:读K1V1输出K2V2。
Reduce:读K2V2输出K3V3。
Output:保存K3V3。

数据类型

Hadoop中使用的类型不能使用Java中原生的基本类型和引用类型,∵Hadoop中的类型必须支持序列化(分布式计算需要对象的网络传递,必须支持序列化)

Hadoop中自带了很多的序列化类型:

JavaHadoop
intIntWritable
StringText
longLongWritable
doubleDbouleWritable
BooleanBooleanWritable
nullNullWritable

先讲述到这里,MapReduce入门这篇继续讲述MapReduce。

以上是关于MapReduce概述的主要内容,如果未能解决你的问题,请参考以下文章

hadoop-MapReduce概述

MapReduce入门—— MapReduce概述 + WordCount案例实操

MapReduce概述

大数据技术之Hadoop(MapReduce)概述序列化

大数据技术之Hadoop(MapReduce)概述序列化

Hadoop--06---MapReduce_01----概述