MapReduce概述

MapReduce概述

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

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

MapReduce优缺点

优点

  1. MapReducer易于编程
  2. 良好的扩展性
  3. 高容错性
  4. 适合PB级以上海量数据的离线处理

缺点

  1. 不擅长实时计算

    不能在毫秒或秒级内返回结果

  2. 不擅长流式计算

    流式计算的输入数据是动态的。MapReducer的输入数据是静态的,不能动态变化。

  3. 不擅长DAG(有向无环图)计算

    多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。

MapReduce核心思想

  1. MapReducer运算程序一般需要分为2个阶段:Map阶段和Reducer阶段
  2. Map阶段的并发MapTast,完全并行运行,互不相干
  3. Reduce阶段的并发ReduceTask,完全互不相干,但数据依赖上个阶段的所有MapTask并发实例的输出
  4. MapReducer编程模型只能包含一个Map阶段和一个Reduce阶段。如果业务逻辑非常复杂,那么只能多个MapReducer程序串行运行。

MapReduce进程

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

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

MapReduce编程规范

序列化

Hadoop常用数据序列化类型

在这里插入图片描述

什么是序列化

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

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

为什么要序列化

Hadoop是一个集群。在集群上运行MapReduce任务时,Map阶段和Reduce阶段不一定在同一台机器上,可能需要跨网络传输。因此需要序列化。

为什么不用Serializable

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

Hadoop序列化特点:
  1. 紧凑:高效使用存储空间
  2. 快速:读写数据的额外开销小
  3. 互操作:支持多语言的交互

自定义bean对象

  1. 实现Writable接口
  2. 反序列化时,需要反射调用空参构造函数
  3. 重写方法 write 和 readFields 方法
  4. 注意反序列化的顺序和序列化的顺序完全一致
  5. 要想把结果显示在文件中,需要重写toString()

Mapper

  1. 继承Mapper类
  2. Mapper阶段输入数据时kv对的形式
  3. setup()方法 在一个MapTask任务开始时执行一次(整个任务只执行一次)
  4. 业务逻辑写在map()方法中
  5. map()方法(MapTask进程)对每一个<K,V>调用一次
  6. clearup()方法 在一个MapTask任务结束时执行一次

Reducer

  1. 继承Reducer类
  2. Reducer的输入数据类型对应Mapper的输出类型
  3. Reducer的业务逻辑写在reduce()方法中
  4. ReduceTask进程对每一组相同k的<K,V>调用一次reduce()方法

Driver

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alonzo de blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值