MapReduce核心思想编程规范及bean序列化

Posted 刚入门的小仙女

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MapReduce核心思想编程规范及bean序列化相关的知识,希望对你有一定的参考价值。

1. MapReduce 核心思想

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

2. MapReduce 进程

一个完整的 MapReduce 程序在分布式运行时有三类实例进程:

  1. MrAppMaster :负责整个程序的过程调度及状态协调
  2. MapTask :负责 Map 阶段的整个数据处理流程
  3. ReduceTask :负责 Reduce 阶段的整个数据处理流程

3. MapReduce 编程规范

用户编写的程序分为三个部分:MapperReducerDriver

  1. Mapper阶段

     	用户自定义的Mapper要继承自己的父类
     	Mapper的输入数据是KV对的形式(KV的类型可自定义)
     	Mapper中的业务逻辑写在map()方法中
     	Mapper的输出数据是KV对的形式(KV的类型可自定义)
     	map()方法(MapTask进程)对每一个<K,V>调用一次
    
  2. Ruducer 阶段

     	用户自定义的Reducer要继承自己的父类
     	Reducer的输入数据类型对应Mapper的输出数据类型,也是KV
     	Reducer的业务逻辑写在reduce()方法中
     	ReduceTask进程对每一组相同k的<k,v>组调用一次reduce()方法
    
  3. Driver 阶段

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

4. Hadoop序列化

4.1 概述

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

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

具体实现 bean 对象序列化步骤如下 7 步:

  1. 必须实现 Writable 接口
  2. 反序列化时,需要反射调用空参构造函数,所以必须有空参构造
  3. 重写序列化方法 write
  4. 重写反序列化方法 readFields
  5. 注意反序列化的顺序和序列化的顺序完全一致
  6. 要想把结果显示在文件中,需要重写 toString(),可用"\\t"分开,方便后续用
  7. 如果需要将自定义的 bean 放在 key 中传输,则还需要实现 Comparable 接口,因为 MapReduce 框中的 Shuffle 过程要求对 key 必须能排序

以上是关于MapReduce核心思想编程规范及bean序列化的主要内容,如果未能解决你的问题,请参考以下文章

大数据技术之Hadoop(MapReduce)概述序列化

大数据之Hadoop(MapReduce):MapReduce核心思想

Hadoop-MapReduce

Hadoop-MapReduce

一文带你了解大数据技术之MapReduce

Mapreduce编程-----WordCount程序编写及运行