zoukankan      html  css  js  c++  java
  • MapReduce概述

    MapReduce 定义

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

    MapReduce 优缺点

    • 优点

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

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

    MapReduce 核心思想

    MapReduce 进程

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

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

    常用数据序列化类型

    Java类型 Hadoop Writable 类型
    Byte ByteWritable
    Int IntWritable
    Long LongWritable
    Float FloatWritable
    Double DoubleWritable
    Boolean BooleanWritable
    String Text
    Map MapWritable
    Array ArrayWritable
    Null NullWritable

    MapReduce编程规范

    用户编写的程序分成三个部分:Mapper、Reducer 和 Driver。

    • Mapper
      • 用户自定义的Mapper要继承自己的父类
      • Mapper的输入数据是KV对的形式(KV的类型可自定义)
      • Mapper中的业务逻辑写在map()方法中
      • Mapper的输出数据是KV对的形式(KV的类型可自定义)
      • map()方法(MapTask进程)对每一个<K,V>调用一次
    • Reducer阶段
      • 用户自定义的Reducer要继承自己的父类
      • Reducer的输入数据类型对应Mapper的输出数据类型,也是KV
      • Reducer的业务逻辑写在reduce()方法中
      • ReduceTask进程对每一组相同k的<k,v>组调用一次reduce()方法
    • Driver阶段
      相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象

    MapReduce序列化

    什么是序列化

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

    为什么要序列化

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

    为什么不用Java的序列化

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

    Hadoop序列化的特点

    • 紧凑:高效使用存储空间
    • 快速:读写数据的额外开销小
    • 互操作:支持多语言的交互
  • 相关阅读:
    摄像机Rtsp地址格式大全
    Html5 播放Hls格式视频
    Libx264 编码错误 Input picture width(320) is greater than stride (0)
    xtrabackup: error: last checkpoint LSN (3409281307) is larger than last copied LSN (3409274368). #2
    通过FEDERATED存储引擎同步两实例间的表数据
    MySQL将内存用在了哪里
    通过performance schema收集慢查询
    记一次定时备份任务的失败原因
    mysqld got signal 11
    修改mysql数据的字符集校验规则使其区分大小写
  • 原文地址:https://www.cnblogs.com/ding-dang/p/14633263.html
Copyright © 2011-2022 走看看