zoukankan      html  css  js  c++  java
  • 大数据框架-Mapreduce过程

    1、Shuffle

     [从mapTask到reduceTask: Mapper -> Partitioner ->Combiner -> Sort ->Reducer]

    mapper对job任务进行键值对构建并写入环形内存缓冲区[缓冲区满了,map停止直到全写入磁盘],大小100MB(io.sort.mb),一旦达到0.8(io.sort.spill.percent)读入量,即将内存内容经过partitioner分区和sort排序,和combiner合并写入到磁盘一个溢写出文件目录下(mapred.local.dir)。当数据读取完成,将磁盘所有溢出文件合并成一个大文件(同样是经过分区和排序后的文件)。将映射关系提交给AppMaster。

    reducer通过心跳机制到AppMaster获取映射关系,再通过Http方式得到文件分区,不同区号文件进入不同reducer,再合并排序进行reduce处理。

    Mapper:输出键值对集合(函数setup、map、cleanup、run);

    Partitioner:分区,并确保分区号大于或等于reducer的个数。对Mapper结果进行计算确定交给哪个reducer来计算;

    Combiner:在map端执行减少传输到reducer的数据量,看作本地的reducer,实现本地key的归并;但combiner不能改变key/value的类型,适用于不影响最终结果场景(累加、最大值);

    Sort:按照key值排序。

    2、hadoop序列化类型(全都继承Writable)

    Text:类似于java中的String

    基础Writable对象(IntWritableLongWritable BooleanWritable ByteWritable...)

    自定义序列化对象

    (实现writable接口;

    同时实现序列化函数write和反序列化函数readFiles,但写和读顺序和类型要一致;

    重写tostring方法,否则输出结果为类全名+hascode值

    需要无参构造方法)

    3、MapReduce任务实现流程

    Client将JAR包信息发送到RM(PRC通信)

    RM返回一个jar包存储路径(固定)和一个jobID

    Client对路径进行拼接,通过FileSystem将jar包写入到hdfs中(默认情况下jar包写10份)

    Client再将jobID,jar包地址,其他配置发送给RM

    RM将任务放入调度器(默认先进先出),NM通过心跳机制获取Mapreduce任务,在HDFS上下载JAR包,启动子进程运行任务

    (1)、具体执行过程如下:

     

    函数中主体为submit(),先进行connect(),再使用submitter进行任务调度。

    A.

    初始化Job持有的cluster对象引用(cluster引用中持有ClientProtocol对象引用)。

    Ps: ClientProtocol:RPCserver的代理对象,也可以理解为RM进程对象)。定义了客户端与nameNode间的接口,客户端对文件系统的所有操作都需要通过这个接口,同时客户端读、写文件等操作也需要先通过这个接口与NamenodeRPC通信后后,再进行数据块的读出和写入操作。

    B.

    通过提交器提交job任务,返回一个PATH

    也返回一个Job的ID

    拼接上述PATH和JobID

    将jar包信息拷贝到HDFS中  job信息,存放job地址和副本数量

    提交到服务端RM  jobid、jar包地址,其他配置信息,通过RPC通信

  • 相关阅读:
    微信小程序购物商城系统开发系列-目录结构
    微信小程序购物商城系统开发系列-工具篇
    如何用js获取浏览器URL中查询字符串的参数
    Search for a Range
    Search in Rotated Sorted Array
    permutation递归方法
    Permutations
    next permutation
    4Sum
    3Sum Closest
  • 原文地址:https://www.cnblogs.com/xiongchang95/p/9633220.html
Copyright © 2011-2022 走看看