• 大数据学习2(MapReduce)


    思想:分而治之

    一,执行流程

    由图我们可以看到, MapReduce存在以下4个独立的实体。

    1. JobClient:运行于client node,负责将MapReduce程序打成Jar包存储到HDFS,并把Jar包的路径提交到Jobtracker,由Jobtracker进行任务的分配和监控。
    2. JobTracker:运行于name node,负责接收JobClient提交的Job,调度Job的每一个子task运行于TaskTracker上,并监控它们,如果发现有失败的task就重新运行它。
    3. TaskTracker:运行于data node,负责主动与JobTracker通信,接收作业,并直接执行每一个任务。
    4. HDFS:用来与其它实体间共享作业文件。

    各实体间通过以下过程完成一次MapReduce作业:

    1. JobClient通过RPC协议向JobTracker请求一个新应用的ID,用于MapReduce作业的ID
    2. JobTracker检查作业的输出说明。例如,如果没有指定输出目录或目录已存在,作业就不提交,错误抛回给JobClient,否则,返回新的作业ID给JobClient
    3. JobClient将作业所需的资源(包括作业JAR文件、配置文件和计算所得得输入分片)复制到以作业ID命名的HDFS文件夹中
    4. JobClient通过submitApplication()提交作业
    5. JobTracker收到调用它的submitApplication()消息后,进行任务初始化
    6. JobTracker读取HDFS上的要处理的文件,开始计算输入分片,每一个分片对应一个TaskTracker
    7. TaskTracker通过心跳机制领取任务(任务的描述信息)
    8. TaskTracker读取HDFS上的作业资源(JAR包、配置文件等)
    9. TaskTracker启动一个java child子进程,用来执行具体的任务(MapperTask或ReducerTask)
    10. TaskTracker将Reduce结果写入到HDFS当中

    二,工作原理

    Map任务处理

    1. 需要对输入文件进行“分片”,也就是把所要输入的文件copy到HDFS中
    2. 启动job读取HDFS中的文件。每一行解析成一个<k,v>。每一个键值对调用一次map函数
    3. 重写map(),对第一步产生的<k,v>进行处理,转换为新的<k,v>输出
    4. 对输出的key、value进行分区
    5. 对不同分区的数据,按照key进行排序、分组。相同key的value放到一个集合中
    6. (可选) 对分组后的数据进行归约

    Reduce任务处理

    1. 进入reduce阶段。相同的key的map输出会到达同一个reducer,reducer对key相同的多个value进行“reduce操作”
    2. 多个map任务的输出,按照不同的分区,通过网络复制到不同的reduce节点上
    3. 对多个map的输出进行合并、排序。
    4. 重写reduce函数实现自己的逻辑,对输入的key、value处理,转换成新的key、value输出
    5. 把reduce的输出保存到文件中

           

       Map-Reduce框架的运作完全基于<key,value>对,即数据的输入是一批<key,value>对,生成的结果也是一批<key,value>对,只是有时候它们的类型不一样而已。Key和value的类由于需要支持被序列化(serialize)操作,所以它们必须要实现Writable接口,而且key的类还必须实现WritableComparable接口,使得可以让框架对数据集的执行排序操作。 

    Map:<k1,v1> ->list<k2,v2>

    Reduce:<k2,list<v2>> -><k3,v3>

    一个Map-Reduce任务的执行过程以及数据输入输出的类型如下所示:

    (input)<k1,v1> -> map -> <k2,v2> -> combine -> <k2,v2> -> reduce -> <k3,v3>(output)

    原文链接:https://www.jianshu.com/p/ca165beb305b

    原文链接:https://blog.csdn.net/spy_h/article/details/80747329

  • 相关阅读:
    zoj 3632 Watermelon Full of Water
    将字符串切割成数组 componentsSeparatedByString
    paip.C#.NET多线程访问 toolStripStatusLabel
    EBS后台取消死锁检查代码和取消死锁会话步骤经验
    Java泛型深入题目
    Win7下BootCamp蓝屏问题解决方案二
    一步步开发 Spring MVC 应用
    批处理获取U盘、可移动硬盘的盘符
    一种松耦合的分层插件系统的设计和实现
    分享一个开源的批量修改VC工程属性的小工具
  • 原文地址:https://www.cnblogs.com/dongchao3312/p/13290137.html
Copyright © 2020-2023  润新知