MapReduce

MapReduce编程模型

课程目标
 
- 理解基本术语,比如:MapReduce、Combiner、Partitioner、Shuffle等
- 理解MapReduce编程模型,掌握用MapReduce开发并行程序
- 理解MapReduce高级功能/组件、工作机制
- 掌握采用MapReduce常用案例及解决方法,学以致用

1.1MapReduce定义

MapReduce是一种简化并行计算的编程模型,用于进行大数据量的计算。

MapReduce是一个分布式运行编程的编程框架,使用户开发“基于Hadoop的数据分析应用”的核心框架。

1.2MapReduce优缺点

一.优点:易于编程,良好的扩展性,高容错性,擅长对PB级以上海量数据进行离线处理。

解释:

      (1)  易于编程:它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分不到大量廉价的PC机器上运行。也就是说你写一个分布式程序,就写一个简单的串行程序一模一样的。就是因为这个特点使得MapReduce编程变得流行起来。

       (2) 良好的扩展性:当你的计算机资源不能得到满足的时候,你可以通过简单的增加机器来扩展它的计算能力。

       (3) 高容错性:MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,就是要求它具有很高的容错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而且全是由hadoop内部完成的。

        (4)擅长对PB级以上的海量数据进行离线处理:可以实现上千台服务器集群并发工作,提供数据处理能力。

二.缺点:不擅长实时计算,不擅长流式计算,不擅长DAG(有向图)计算

       (1)不擅长实时计算:MapReduce无法像MySQL一样,在毫秒或者很短的时间内返回结果。

       (2)不擅长流式计算:流式计算的输入数据是动态的,而且MapReduce的输入数据集是静态的,不能动态变化。就是因为MapReduce自身的设计特点决定了数据源必须是静态的。

       (3)不擅长DAG(有向图)计算:多个应用程序存在一定的依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,二十使用后每个MapReduce作业的输出都会写入磁盘,会造成大量的磁盘IO,导致性能非常的低下。

1.3MapReduce进程

一个完整的MapReduce进程在分布式运算时有三类实列进程:

(1)MrAppMaster:负责整个程序的过程跳读以及状态协调。

(2)MapTask:负责Map阶段的整个数据处理流程。

(3)ReduceTask:负责Reduce阶段的整个数据流程。

Java类型Hadoop Writable类型
BooleanBooleanWritable
ByteByteWritable
IntIntWritable
FloatFloatWritable
LongLongWritable
DoubleDoubleWritable
StringText
MapMapWritable
ArrayArrayWritable

1.5MapReduce编程规范

1.Mapper阶段

(1)用户自定义的Mapper要继承自己的父类

(2)Mapper的输入数据是kv对的形式(kv的类型是自定义)

(3)Mapper中业务逻辑写在map()方法中

(4)Mapper的输出数据是kv对的形式(kv的类型可以自定义)

(5)map()方法(MapTaask进程)对每一个<k,v>调用一次

2.Reducer阶段

(1)用户自定义的Reducer要继承自己的父类

(2)Reducer的输入数据类型对应的是Mapper的输出数据类型,也是kv

(3)Reducer的业务逻辑写在reduce()方法中

(4)ReduceTask进程对每一组相同的k的<k,v>组调用一次reducce()方法

3.Driver阶段

相当于YARN集群的客户端,用于体骄傲我们整个程序到Yarn集群,提交的是封装了MapReduce程序相关运行参数的job对象

1.6WordCount案例操作

1.需求

给定文本文件,统计文本文件中单词的个数,输出每个单词出现的总次数

(1)输入数据

I am somebody
I am smart and kind
I am important 
I am starve of education
I have places to go
I have people to impress
I have world to change

(2)输出数据

2.需求分析

Mapper部分

输入(0,I am somebody)k1=0,v1="I am somebody"

<,I am smart and kind>

012345678910111213
Iamsomebody换行符

3.1将MapTask传给我们的文本内容先转成String

3.2根据空格将这一行切分成单词

I

am

somebody

3.3将单词输出为<单词,1>k2

<I,1>

<am,1>

<somebody,1>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值