`
liudeh_009
  • 浏览: 243281 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MapReduce的输入输出机制

阅读更多

       MapReduce确保每个reducer的输入都按键排序.将map的输出作为输入传给reducer的过程称为shuffle,学习shuffle是如何工作的有助于我们更好的理解MapReduce
       每个Map任务都有一个内存缓冲区,用于存储任务的输出,默认情况下缓冲区的大小为100MB,一旦缓冲区内容达到阙值(默认0.8),一个后台线程便会把内容写到磁盘.在写磁盘的过程中,map输出继续被写到缓冲区,但此时如果缓冲区被填满,map会阻塞直到写磁盘过程完成.
      在写磁盘之前,线程还会根据最终要传送的reducer把数据划分成相应的分区,并对每个分区进行内排序,如果有一个combiner,它会在排序后的输出上运行.运行combiner的意义在于使map输出更紧凑,使得写到本地磁盘和传给reducer的数据更少.
      写磁盘时压缩map的输出会让写磁盘的速度更快,节约磁盘空间,并减少传给reducer的数据量.用于文件分区的工作线程的设置是针对每个tasktracker,而不是针对map任务槽,默认为40
      reducer端通过http方式得到输出文件的分区.一般情况下,reduce任务需要集群上若干个map任务的map输出作为其输入.每个map任务完成时间不同,因此只要有一个map任务完成,reduce任务就开始复制其输出,reduce任务有少量复制线程,默认为5.由于reduce任务有可能失败,因此tasktracker并不会在第一个reducer检索到map输出时就立即从磁盘上删除它们,而是等jobtracker通知作业完成后执行删除操作的.
      如果map输出相当小则直接复制到reduce的内存,不需要写磁盘.随着磁盘上的副本越来越多,后台线程会将它们合并为更大的,排好序的文件,为了合并,压缩的map输出都必须在内存中被解压缩,
      复制完map输出,reduce任务进行排序阶段,这个阶段会合并map输出,维持其顺序排序.如果有50个map输出,而合并因子为10,合并将进行5趟,每趟将10个文件合并成一个文件,因此最后有5个中间文件.最后直接把数据输入reduce函数,从而省略了一次磁盘往返行程,没有将5个文件合并一趟.
      在reduce阶段,.对已排序的每个键都调用reduce函数,此阶段的输出直接输出到文件系统,一般为HDFS.由于tasktracker也是存储数据的节点,因此reduce输出的第一个块副本将会写到本地磁盘.
      理解shuffle的过程对MapReduce的调优非常有好处.从上可以看出,为shuffle过程提供尽量多的内存空间,避免多次溢出写磁盘,让数据常驻内存都有利于性能的提高.

0
1
分享到:
评论

相关推荐

    MapReduce类型及格式

    Combine的输入输出键值对类型与Reduce阶段相同,这有助于减少网络传输的数据量和提高性能。 2. Partition:负责将Map输出的键值对分配给对应的Reduce任务。Partitioner决定了Map输出的每个键值对应该传递给哪个...

    MapReduce输出至hbase共16页.pdf.zip

    5. 错误处理和容错机制:为了保证数据的完整性和一致性,需要考虑MapReduce作业失败或网络中断等情况,确保数据能正确写入HBase。 四、优化策略 1. 分区策略:根据业务需求,合理设计HBase的分区策略,避免热点...

    MapReduce基础.pdf

    - **容错性**:MapReduce框架内置了容错机制,当某个任务失败时,框架会自动重试该任务,确保数据处理的完整性。 #### 六、MapReduce的限制 尽管MapReduce是一种强大的数据处理模型,但它也有一定的局限性: - **...

    MapReduce 设计模式

    书中可能还会包含其他更高级的主题,如自定义输入/输出格式、MapReduce工作流以及如何优化MapReduce作业性能等。总的来说,《MapReduce设计模式》是一本实用的参考书,对于希望深入理解和利用MapReduce框架的IT专业...

    大数据实验四-MapReduce编程实践

    3. **编写main方法**:设置MapReduce作业的配置信息,如指定输入输出路径、Mapper和Reducer类等,并启动作业执行。 ##### 实验目的 1. **掌握基本的MapReduce编程方法**:理解MapReduce的基本原理和编程流程,学会...

    MapReduce详解包括配置文件

    2. **不擅长流式计算**:MapReduce的设计假设输入数据集是静态不变的,对于动态更新的数据流处理不够灵活。 3. **不擅长DAG(有向无环图)计算**:在涉及多个任务间复杂的依赖关系时,每个任务的输出都需要写入磁盘...

    MapReduce发明人关于MapReduce的介绍

    接下来的部分(原文未完全提供)可能会深入探讨MapReduce的基本编程模型,给出具体的应用案例,解释其内部架构,如数据分片、任务调度、容错机制等,并可能涉及MapReduce如何适应不同规模和类型的数据集,以及如何...

    大数据知识仓库涉及到数据仓库建模、实时计算、大数据、数据中台、系统设计、Java、算法等代码

    1、数据编排技术: Alluxio概览 Alluxio部署 Alluxio整合计算引擎 2、datalake数据湖技术: Hudi概览 Hudi整合Spark Hudi整合Flink ...MapReduce输入输出剖析 MapReduce的工作机制 5.3 Yarn 等等太多了!!!

    MapReduce的实现细节

    #### 五、MapReduce中的通信机制 在Hadoop MapReduce中,服务器间的通信主要依赖于远程过程调用(RPC)机制。具体来说: - 客户端通过RPC接口向作业服务器提交作业。 - 作业服务器通过RPC接口分配任务给任务服务器。...

    Hadoop MapReduce Cookbook 源码

    3. **数据输入与输出**:探讨InputFormat和OutputFormat接口,理解如何自定义输入输出格式以适应不同类型的数据源。 4. **错误处理与容错机制**:讲解Hadoop的检查点、重试和故障恢复策略,以确保任务的可靠性。 5...

    MapReduce简单程序示例

    开发者通常需要实现Mapper和Reducer类,并配置作业的输入输出路径、分区策略等参数。 对于初学者,理解并编写一个简单的MapReduce程序通常从处理文本数据开始。例如,我们可以编写一个程序来计算一个大型文本文件中...

    大数据 hadoop mapreduce 词频统计

    在这个过程中,Hadoop MapReduce通过并行化处理和容错机制,能够高效地处理大规模数据,即使在硬件故障的情况下也能确保数据完整性。同时,MapReduce的编程模型相对简单,使得开发者能够专注于业务逻辑,而不是底层...

    mapreduce案例文本文件.zip

    这可能意味着压缩包内有一个或多个文件,这些文件可能是用于MapReduce作业的输入数据,也可能是作业执行后的输出结果。如果其中包含源代码,那么读者可以通过查看和运行这些代码来更好地理解MapReduce的工作机制。 ...

    MapReduce2.0源码分析与实战编程

    6. **实战编程**:MapReduce编程涉及定义Mapper和Reducer类,以及配置输入输出格式。例如,自定义InputFormat处理非标准输入,OutputFormat定义结果存储方式。此外,还需关注作业提交、监控和调试技巧。 7. **...

    MapReduce研究现状 .zip

    5. **输入输出格式优化**:选择合适的输入输出格式,如SequenceFile或TextOutputFormat,可以提高读写效率。 6. **内存管理**:合理设置Java堆大小,避免因内存溢出导致的任务失败。 对于Hadoop的问题,常见的挑战...

    Hadoop_MapReduce教程.doc

    作业配置包含输入输出路径、任务参数等信息。客户端提交作业给JobTracker,JobTracker负责分发软件、配置并监控任务执行。 10. **应用案例**: MapReduce在许多领域都有广泛应用,如搜索引擎的PageRank计算、日志...

    MapReduce 编程模型

    Map函数接收键值对作为输入,并产生一系列新的键值对作为输出。这个过程可以理解为数据的初步处理和转换,如清洗、筛选等。 2. **Reduce阶段**:经过Map阶段处理后产生的所有中间键值对,将根据键进行分组,具有...

Global site tag (gtag.js) - Google Analytics