MapReduce核心思想编程规范及bean序列化
Posted 刚入门的小仙女
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MapReduce核心思想编程规范及bean序列化相关的知识,希望对你有一定的参考价值。
1. MapReduce 核心思想
- 分布式的运算程序往往需要分成至少 2 个阶段
- 第一个阶段的 MapTask 并发实例,完全并行运行,互不相干
- 第二个阶段的 ReduceTask 并发实例互不相干,但是他们的数据依赖于上一个阶段的所有 MapTask 并发实例的输出
- MapReduce 编程模型只能包含一个 Map 阶段和一个 Reduce 阶段,如果用户的业务逻辑非常复杂,那就只能多个 MapReduce 程序,串行运行。
2. MapReduce 进程
一个完整的 MapReduce 程序在分布式运行时有三类实例进程:
- MrAppMaster :负责整个程序的过程调度及状态协调
- MapTask :负责 Map 阶段的整个数据处理流程
- ReduceTask :负责 Reduce 阶段的整个数据处理流程
3. MapReduce 编程规范
用户编写的程序分为三个部分:Mapper、Reducer 和 Driver。
-
Mapper阶段
用户自定义的Mapper要继承自己的父类 Mapper的输入数据是KV对的形式(KV的类型可自定义) Mapper中的业务逻辑写在map()方法中 Mapper的输出数据是KV对的形式(KV的类型可自定义) map()方法(MapTask进程)对每一个<K,V>调用一次
-
Ruducer 阶段
用户自定义的Reducer要继承自己的父类 Reducer的输入数据类型对应Mapper的输出数据类型,也是KV Reducer的业务逻辑写在reduce()方法中 ReduceTask进程对每一组相同k的<k,v>组调用一次reduce()方法
-
Driver 阶段
相当于YARN集群的客户端,用于提交我们整个程序到YARN集群 提交的是封装了MapReduce程序相关运行参数的job对象
4. Hadoop序列化
4.1 概述
序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。
反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换
4.2 自定义 bean 对象实现序列化接口(Writable)
具体实现 bean 对象序列化步骤如下 7 步:
- 必须实现 Writable 接口
- 反序列化时,需要反射调用空参构造函数,所以必须有空参构造
- 重写序列化方法 write
- 重写反序列化方法 readFields
- 注意反序列化的顺序和序列化的顺序完全一致
- 要想把结果显示在文件中,需要重写 toString(),可用"\\t"分开,方便后续用
- 如果需要将自定义的 bean 放在 key 中传输,则还需要实现 Comparable 接口,因为 MapReduce 框中的 Shuffle 过程要求对 key 必须能排序
以上是关于MapReduce核心思想编程规范及bean序列化的主要内容,如果未能解决你的问题,请参考以下文章