MapReduce概述
Posted 杀智勇双全杀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MapReduce概述相关的知识,希望对你有一定的参考价值。
MapReduce概述
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 Tool
。main
:作为程序的运行入口。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中自带了很多的序列化类型:
Java | Hadoop |
---|---|
int | IntWritable |
String | Text |
long | LongWritable |
double | DbouleWritable |
Boolean | BooleanWritable |
null | NullWritable |
先讲述到这里,MapReduce入门这篇继续讲述MapReduce。
以上是关于MapReduce概述的主要内容,如果未能解决你的问题,请参考以下文章