没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
MapReduce 详解
第 1 章 MapReduce 入门
1.1 MapReduce 定义
Mapreduce 是一个分布式运算程序的编程框架,是用户开发“基于 hadoop 的数据分析应用”
的核心框架。
Mapreduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布
式运算程序,并发运行在一个 hadoop 集群上。
1.2 MapReduce 优缺点
1.2.1 优点
1.MapReduce 易于编程
它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价
的 PC 机器上运行。就是因为这个特点使得 MapReduce 编程变得非常流行。
2.良好的扩展性
当计算资源不能得到满足的时候,可以通过简单的增加机器来扩展它的计算能力。
3.高容错性
MapReduce 设计的初衷就是使程序能够部署在廉价的 PC 机器上,这就要求它具有很高的容
错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至
于这个任务运行失败,而且这个过程不需要人工参与,而完全是由 Hadoop 内部完成的。
4.适合 PB 级以上海量数据的离线处理
它适合离线处理而不适合在线处理。比如像毫秒级别的返回一个结果,MapReduce 很难做
到。
1.2.2 缺点
MapReduce 不擅长做实时计算、流式计算、DAG(有向图)计算。
1. 实时计算
MapReduce 无法像 Mysql 一样,在毫秒或者秒级内返回结果。
2. 流式计算
流式计算的输入数据是动态的,而 MapReduce 的输入数据集是静态的,不能动态变化。这
是因为 MapReduce 自身的设计特点决定了数据源必须是静态的。
3. DAG(有向图)计算
多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,
MapReduce 并不是不能做,而是使用后,每个 MapReduce 作业的输出结果都会写入到磁盘,
会造成大量的磁盘 IO,导致性能非常的低下。
1.3 MapReduce 核心思想
MapReduce 核心思想,如图
1)分布式的运算程序往往需要分成至少 2 个阶段。
2)第一个阶段的 maptask 并发实例,完全并行运行,互不相干。
3)第二个阶段的 reduce task 并发实例互不相干,但是他们的数据依赖于上一个阶段的所有
maptask 并发实例的输出。
4)MapReduce 编程模型只能包含一个 map 阶段和一个 reduce 阶段,如果用户的业务逻辑
非常复杂,那就只能多个 mapreduce 程序,串行运行。
1.4 MapReduce 进程(MR)
一个完整的 mapreduce 程序在分布式运行时有三类实例进程:
1)MrAppMaster:负责整个程序的过程调度及状态协调。
2)MapTask:负责 map 阶段的整个数据处理流程。
3)ReduceTask:负责 reduce 阶段的整个数据处理流程。
1.5 MapReduce 编程规范
用户编写的程序分成三个部分:Mapper、Reducer 和 Driver。
1.Mapper 阶段
(1)用户自定义的 Mapper 继承 Mapper
(2)Mapper 的输入数据是 KV 对的形式(KV 的类型可自定义)
(3)Mapper 中的业务逻辑写在 map()方法中
(4)Mapper 的输出数据是 KV 对的形式(KV 的类型可自定义)
(5)map()方法(maptask 进程)对每一个<K,V>调用一次
2.Reducer 阶段
(1)用户自定义的 Reducer 继承 Reducer
(2)Reducer 的输入数据类型对应 Mapper 的输出数据类型,也是 KV
(3)Reducer 的业务逻辑写在 reduce()方法中
(4)Reducetask 进程对每一组相同 k 的<k,v>组调用一次 reduce()方法
3.Driver 阶段(关联 Mapper 和 Reducer,并且提交任务到集群)
相当于 yarn 集群的客户端,用于提交我们整个程序到 yarn 集群,提交的是封装了 mapreduce
程序相关运行参数的 job 对象
第 2 章 Hadoop 序列化
2.1 序列化概述
2.1.1 什么是序列化
序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储(持久化)
和网络传输。
反序列化就是将收到字节序列(或其他数据传输协议)或者是硬盘的持久化数据,转换成内
存中的对象。
2.1.2 为什么要序列化
一般来说,“活的”对象只生存在内存里,关机断电就没有了。而且“活的”对象
只能由本地的进程使用,不能被发送到网络上的另外一台计算机。 然而序列化可以存储“活
的”对象,可以将“活的”对象发送到远程计算机。
2.1.3 为什么不用 Java 的序列化 serilazable
Java 的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很
多额外的信息(各种校验信息,header,继承体系等),不便于在网络中高效传输。所以,
hadoop 自己开发了一套序列化机制(Writable),特点如下:
1.紧凑
紧凑的格式能让我们充分利用网络带宽,而带宽是数据中心最稀缺的资源
2.快速
进程通信形成了分布式系统的骨架,所以需要尽量减少序列化和反序列化的性能开销,这是
基本的;
3.可扩展
协议为了满足新的需求变化,所以控制客户端和服务器过程中,需要直接引进相应的协议,
这些是新协议,原序列化方式能支持新的协议报文;
4.互操作
能支持不同语言写的客户端和服务端进行交互;
2.2 常用数据序列化类型
表 4-1 常用的数据类型对应的 hadoop 数据序列化类型
Java 类型
Hadoop Writable 类型
boolean
BooleanWritable
byte
ByteWritable
int
IntWritable
剩余16页未读,继续阅读
资源评论
wangleipin
- 粉丝: 3
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功