文章目录

  • MapReduce分布式编程模型
    • 1.定义
    • 2.优缺点
    • 3.MapReduce核心思想
    • 4.MapReduce进程
    • 5.MapReduce编程规范
  • Hadoop序列化
    • 1.什么是序列化
    • 2.Hadoop序列化
    • 3.序列化重要性
    • 4.常用数据序列化类型
    • 5.自定义bean对象实现序列化接口(Writable)

MapReduce分布式编程模型

1.定义

Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架,其核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。

2.优缺点

优点

1)MapReduce 易于编程。 它简单的实现一些接口,就可以完成一个分布式程序,这个分布式程序可以分布到大量廉价的PC机器上运行。也就是说你写一个分布式程序,跟写一个简单的串行程序是一模一样的。就是因为这个特点使得MapReduce编程变得非常流行。
2)良好的扩展性。 当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展它的计算能力。
3)高容错性。 MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,这就要求它具有很高的容错性。比如其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,而且这个过程不需要人工参与,而完全是由 Hadoop内部完成的。
4)适合PB级以上海量数据的离线处理。 它适合离线处理而不适合在线处理。比如像毫秒级别的返回一个结果,MapReduce很难做到。

缺点

不擅长
1)实时计算。 MapReduce无法像Mysql一样,在毫秒或者秒级内返回结果。
2)流式计算。 流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化。这是因为MapReduce自身的设计特点决定了数据源必须是静态的。
3)DAG(有向图无环图)计算。 多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。

3.MapReduce核心思想

以wordcount为例进行分析。

1)分布式的运算程序往往需要分成至少2个阶段。
2)第一个阶段的map task并发实例,完全并行运行,互不相干。
3)第二个阶段的reduce task并发实例互不相干,但是他们的数据依赖于上一个阶段的所有maptask并发实例的输出。
4)MapReduce编程模型只能包含一个map阶段和一个reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个mapreduce程序,串行运行。

4.MapReduce进程

一个完整的mapreduce程序在分布式运行时有三类实例进程:
1)MrAppMaster:负责整个程序的过程调度及状态协调。
2)MapTask:负责map阶段的整个数据处理流程。
3)ReduceTask:负责reduce阶段的整个数据处理流程。

5.MapReduce编程规范

用户编写的程序分成三个部分:Mapper,Reducer,Driver(提交运行mr程序的客户端)
1)Mapper阶段
(1)用户自定义的Mapper要继承自己的父类
(2)Mapper的输入数据是KV对的形式(KV的类型可自定义)
(3)Mapper中的业务逻辑写在map()方法中
(4)Mapper的输出数据是KV对的形式(KV的类型可自定义)
(5)map()方法(maptask进程)对每一个<K,V>调用一次

2)Reducer阶段
(1)用户自定义的Reducer要继承自己的父类
(2)Reducer的输入数据类型对应Mapper的输出数据类型,也是KV
(3)Reducer的业务逻辑写在reduce()方法中
(4)Reducetask进程对每一组相同k的<k,v>组调用一次reduce()方法
3)Driver阶段
整个程序需要一个Drvier来进行提交,提交的是一个描述了各种必要信息的job对象

Hadoop序列化

一般来说,“活的”对象只生存在内存里,关机断电就没有了。而且“活的”对象只能由本地的进程使用,不能被发送到网络上的另外一台计算机。 然而序列化可以存储“活的”对象,可以将“活的”对象发送到远程计算机。

1.什么是序列化

序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储(持久化)和网络传输。
反序列化就是将收到字节序列(或其他数据传输协议)或者是硬盘的持久化数据,转换成内存中的对象。

2.Hadoop序列化

Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,header,继承体系等),不便于在网络中高效传输。所以,hadoop自己开发了一套序列化机制(Writable),精简、高效。

3.序列化重要性

因为Hadoop在集群之间进行通讯或者RPC调用的时候,需要序列化,而且要求序列化要快,且体积要小,占用带宽要小。所以必须理解Hadoop的序列化机制。
序列化和反序列化在分布式数据处理领域经常出现:进程通信和永久存储。然而Hadoop中各个节点的通信是通过远程调用(RPC)实现的,那么RPC序列化要求具有以下特点:
1)紧凑:紧凑的格式能让我们充分利用网络带宽,而带宽是数据中心最稀缺的资源。
2)快速:进程通信形成了分布式系统的骨架,所以需要尽量减少序列化和反序列化的性能开销,这是基本的;
3)可扩展:协议为了满足新的需求变化,所以控制客户端和服务器过程中,需要直接引进相应的协议,这些是新协议,原序列化方式能支持新的协议报文;
4)互操作:能支持不同语言写的客户端和服务端进行交互;

4.常用数据序列化类型

Java类型 Hadoop Writable类型
boolean BooleanWritable
byte ByteWritable
int IntWritable
float FloatWritable
long LongWritable
double DoubleWritable
string Text
map MapWritable
array ArrayWritable

5.自定义bean对象实现序列化接口(Writable)

1)自定义bean对象要想序列化传输,必须实现序列化接口,需要注意以下7项。
(1)必须实现Writable接口。
(2)反序列化时,需要反射调用空参构造函数,所以必须有空参构造。

 public FlowBean() {super();}

(3)重写序列化方法

@Overridepublic void write(DataOutput out) throws IOException {out.writeLong(upFlow);out.writeLong(downFlow);out.writeLong(sumFlow);}

(4)重写反序列化方法

 @Overridepublic void readFields(DataInput in) throws IOException {upFlow = in.readLong();downFlow = in.readLong();sumFlow = in.readLong();}

(5)注意反序列化的顺序和序列化的顺序完全一致
(6)要想把结果显示在文件中,需要重写toString(),可用”\t”分开,方便后续用。
(7)如果需要将自定义的bean放在key中传输,则还需要实现comparable接口,因为mapreduce框中的shuffle过程一定会对key进行排序。

 @Overridepublic int compareTo(FlowBean o) {// 倒序排列,从大到小return this.sumFlow > o.getSumFlow() ? -1 : 1;}

MapReduce分布式编程模型相关推荐

  1. erlang分布式编程模型

    erlang分布式编程有两种模型 一.分布式erlang 运行在可信的网络环境中 1.rpc提供的远程过程调用 rpc:call(Node,Mode,Fun,Args) ->Result|{ba ...

  2. MapReduce既是编程模型又是计算框架

    learn from 从0开始学大数据(极客时间) MapReduce 编程模型 包含 Map 和 Reduce 两个过程 map 的主要输入是一对 <Key, Value> 值,输出一对 ...

  3. PAI分布式机器学习平台编程模型演进之路

    摘要: 在云栖计算之旅第5期-大数据与人工智能大会上,来自阿里云大数据事业部的九丰分享了<PAI分布式机器学习平台编程模型演进之路>.他主要介绍了在集团中使用机器学习解决大数据问题时如何通 ...

  4. Hadoop MapReduce编程模型

    MapReduce编程模型 目录 MapReduce编程模型 1.MapReduce编程模型简介 2.什么是MapReduce 3.MapReduce的优缺点 4.MapReduce程序设计方法 5. ...

  5. mapreduce工作流程_详解MapReduce中的五大编程模型

    前言 我们上一节讲了关于 MapReduce 中的应用场景和架构分析,最后还使用了一个CountWord的Demo来进行演示,关于MapReduce的具体操作.如果还不了解的朋友可以看看上篇文章:[初 ...

  6. 详解MapReduce中的五大编程模型

    前言 我们上一节讲了关于 MapReduce 中的应用场景和架构分析,最后还使用了一个CountWord的Demo来进行演示,关于MapReduce的具体操作.如果还不了解的朋友可以看看上篇文章:初识 ...

  7. mapreduce 编程模型

    MapReduce是在总结大量应用的共同特点的基础上抽象出来的分布式计算框架,它适用的应用场景往往具有一个共同的特点:任务可被分解成相互独立的子问题.基于该特点,MapReduce编程模型给出了其分布 ...

  8. MapReduce编程模型

    1.MapReduce简介 MapReduce是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在Hadoop集群上. 一个完整的 ...

  9. Mapreduce编程模型(一)

    1.1Mapreduce模型简介 Mapreduce是一种可用于数据处理的编程模型,Hadoop上可以运行各种语言版本的Mapreduce程序.Mapreduce程序是并行运行的,采用了分治的思想.编 ...

最新文章

  1. 使用SQL_TRACE进行数据库诊断
  2. 算法学习之路|数位dp简要分析
  3. node.js学习笔记(4) http服务
  4. CodeForces - 1055C Lucky Days(数论)
  5. spring 注释的作用_Spring的@Primary注释在起作用
  6. React 系列之 怎么学最快速有效
  7. 【OpenCV学习】基于轮廓寻找的视频流运动检测
  8. shell 执行失败重试_Smart Retry主要是用来进行方法重试
  9. Exchange 2010与Exchange Online混合部署PART 3:混合准备
  10. 使用idea开发vue初始步骤
  11. 如何在kylo中添加数据源
  12. 科技热点周刊|ClickHouse 融资 2.5 亿美元、个人信息保护法正式实施、Facebook 改名 Meta
  13. JSP文件过大编译失败 异常is exceeding the 65535 bytes limit错误
  14. 2022届浙江工业大学考研计算机技术专硕上岸经验 初试复试经验
  15. DolphinDB Database丨 最简最快的WorldQuant 101 Alpha因子实现
  16. 随手笔记之逆序输出数字
  17. html中添加水印效果
  18. 大学本科计算机考试小抄,大学考试允许带小抄 一页开卷学生抄到手酸
  19. 在ubuntu下烧写映像文件到SD卡--基于三星210开发板
  20. word2016使用Latex编辑公式

热门文章

  1. Google Filament 源码学习(二):Material System (一)
  2. 技术拯救的网瘾少年,安全盒子王松的执念 | 宅客故事
  3. Atlas:手淘Native容器化框架和思考-玄黎
  4. HTML学习2之常用标签详细介绍
  5. 35岁以后的Android程序员出路在哪里?最强技术实现
  6. 团队作业五之旅游行业手机APP分析
  7. rm -rf xxx遇到device or resource busy
  8. composer 安装laravel 5.5 苹果终端
  9. MYSQL的简单查询
  10. 瑞数FSSBBIl1UgzbN7N443T分析