• 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进程)对每一个调用一次
    6. clearup()方法 在一个MapTask任务结束时执行一次

    Reducer

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

    Driver

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

  • 相关阅读:
    BetaFlight深入传感设计之七:GPS&Baro高度数据融合
    C++ | 高维数组、指针、返回指向数组的指针的函数
    图像分割数据集的相关操作(二)—— albumentations 数据增强
    AIGC: 2 语音转换新纪元-Whisper技术在全球客服领域的创新运用
    Jmeter测试添加凭证和导出压测结果
    vue3+vite+ts真实项目笔记
    基于ssm的电动车实名制挂牌管理系统
    linux内核网络收包过程(一)
    浅谈霍尔电流传感器在汽车电池管理系统中的应用
    医学图像分割利器:U-Net网络详解及实战
  • 原文地址:https://blog.csdn.net/weixin_57025392/article/details/127692322