MapReduce原理及编程

MapReduce简介

MapReduce概念

  • 1、MapReduce是一个分布式计算框架
    它将大型数据操作作业分解为可以跨服务器集群并行执行的单个任务。
    起源于Google
  • 2、适用于大规模数据处理场景
    每个节点处理存储在该节点的数据
  • 3、每个job包含Map和Reduce两部分

MapReduce的设计思想

  • 1、分而治之
    简化并行计算的编程模型
  • 2、构建抽象模型:Map和Reduce
    开发人员专注于实现Mapper和Reducer函数
  • 3、隐藏系统层细节
    开发人员专注于业务逻辑实现

MapReduce特点

  • 1、优点
    易于编程
    可扩展性
    高容错性
    高吞吐量
  • 2、不适用领域
    难以实时计算
    不适合流式计算

MapReduce实现WordCount

实现步骤图解

在这里插入图片描述

MapReduce执行过程

  • 1、数据定义格式
    map: (K1,V1) → list (K2,V2)
    reduce: (K2,list(V2)) → list (K3,V3)
  • 2、MapReduce执行过程
    Mapper
    Combiner
    Partitioner
    Shuffle and Sort
    Reducer
    在这里插入图片描述

Hadoop V1 MR引擎

  • 1、Job Tracker
    运行在Namenode
    接受客户端Job请求
    提交给Task Tracker
  • 2、ask Tracker
    从Job Tracker接受任务请求
    执行map、reduce等操作
    返回心跳给Job Tracker
    在这里插入图片描述

Hadoop V2 YARN

在这里插入图片描述

Hadoop及YARN架构

在这里插入图片描述

Hadoop2 MR在Yarn上运行流程

在这里插入图片描述

InputSplit(输入分片)

在这里插入图片描述

Shuffle阶段

数据从Map输出到Reduce输入的过程
在这里插入图片描述

Key&Value类型

  • 1、必须可序列化(serializable)
    作用:网络传输以及持久化存储
    IntWritable、LongWriteable、FloatWritable、Text、DoubleWritable, BooleanWritable、NullWritable等
  • 2、都继承了Writable接口
    并实现write()和readFields()方法
  • 3、Keys必须实现WritableComparable接口
    Reduce阶段需要sort
    keys需要可比较

MapReduce编程模型

在这里插入图片描述

InputFormat接口

在这里插入图片描述

Combiner类

  • 1、Combiner相当于本地化的Reduce操作
    在shuffle之前进行本地聚合
    用于性能优化,可选项
    输入和输出类型一致
  • 2、Reducer可以被用作Combiner的条件
    符合交换律和结合律
  • 3、实现Combiner
    job.setCombinerClass(WCReducer.class)

Partitioner类

  • 1、用于在Map端对key进行分区
    默认使用的是HashPartitioner(获取key的哈希值 、使用key的哈希值对Reduce任务数求模)
    决定每条记录应该送到哪个Reducer处理
  • 2、自定义Partitioner
    继承抽象类Partitioner,重写getPartition方法
    job.setPartitionerClass(MyPartitioner.class)

OutputFormat接口

在这里插入图片描述

分布式缓存机制(Distributed Cache)

  • 1、在执行MR时向集群中的任务节点发送只读文件
    分发第三方库(jar等)
    共享一些可以装载进内存的文件
    进行类似join连接时,小表的分发
  • 2、符号连接(#)

推测执行

  • 1、问题
    程序bug或负载不均时,部分任务成为短板
    如:100个map任务中的99个完成,剩下1个停留10%
  • 2、使用推测执行启动备份任务
    取最先完成的作为最终结果
    利用资源来换取时间的一种优化策略
    资源很紧张时不适用
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值