`

Hadoop 之shuffle(将map输出转化为reducer的输入的过程)

 
阅读更多
Hadoop之shuffle

我们知道每个reduce task输入的key都是按照key排序的。
但是每个map的输出只是简单的key-value而非key-valuelist,所以洗牌的工作就是将map输出转化为reducer的输入的过程。

在map结束之后shuffle要做的事情:
map的输出不是简单的写入本地文件,而是更多的利用内存缓存和预排序工作,以提高效率。
io.sort.mb 用于控制 map 输出时候的内存大小,默认100Mb。
当map所使用的buffer达到一定比例的时候,会启动一个线程来将内存中数据写入磁盘。此时map过程不会暂停直到内存消耗完位置。这个线程会先将内存中的数据按照reducer的数据切分成多块,可能是按照reducer大小hash,然后对于每个块里面的数据按照key进行sort排序,此时假如定义了一个combiner函数,那么排序的结果就是combiner的输入。每当数据缓存大小达到了限制,一个新的spill文件就会被创建。所以,当map所有的数据都被处理了之后,就需要对多个spill文件进行合并操作。

combiner的作用是为了压缩mapper的输出结果,另外combiner函数需要满足n次combiner之后,输出结果都保持一致。当然,合并成一个文件的时候hadoop默认不会压缩数据,但是可以通过设置参数指定某个压缩类对数据进行压缩。

在reducer开始之前shuffle要做的事情分为两步copy和sort 阶段:

copy phrase
每个reducer  task新建几个thread用于将mapper的输出并行copy过来,copy时机是当一个mapper完成之后就可以进行。
但是reducer是如何知晓某个mapper是否完成了任务呢,mapper完成之后会给tasktracker发送一个状态更新,然后tasktraker会将该信息发送给jobtrack。然后reducer中的一个线程负责询问jobtracker 每个map的输出位置。而每个mapper上的输出数据需要等到整个job完成之后,jobtracker会通知删除。

sort phrase
将多个map输出合并成一个输入。
example:50个map输出 分5轮进行文件合并,每次将10个文件合并成一个。
最后5个文件可能直接进入reducer阶段。
关于Task中所谓的Speculative Execution是指当一个job的所有task都在running的时候,当某个task的进度比平均进度慢时才会启动一个和当前Task一模一样的任务,当其中一个task完成之后另外一个会被中止,所以Speculative Task(推测式任务)不是重复Task而是对Task执行时候的一种优化策略。


转自:http://www.cnblogs.com/zhanghuijunjava/archive/2013/04/29/3036557.html

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    hadoop之map/reduce

    Mapper是MapReduce的第一阶段,它的主要任务是对输入数据进行处理,将其转化为键值对(key-value pairs)形式。在给定的描述中,提到输入数据是从HDFS导入并通过Sqoop的,通常这些数据是以行格式存储,字段之间用...

    hadoop Join代码(map join 和reduce join)

    本文将深入探讨Map JOIN和Reduce JOIN两种在Hadoop中实现JOIN的方法,并通过代码示例来阐述它们的工作原理。 1. Map JOIN: Map JOIN在Hadoop中主要应用于小表与大表的连接。小表的数据可以完全加载到内存中,而大...

    Hadoop mapreduce实现wordcount

    MapReduce 是 Apache Hadoop 的核心组件之一,它为大数据处理提供了一个分布式计算框架。WordCount 是 MapReduce 框架中经典的入门示例,它统计文本文件中每个单词出现的次数。在这个案例中,我们将深入探讨如何在 ...

    Hadoop Map Reduce教程

    该框架将任务分解为一系列较小的任务(Map 和 Reduce),并在集群中的多台计算机上并行执行这些任务。 - **应用场景**:适用于大数据分析、搜索引擎索引构建、日志文件分析等场景。 #### 二、MapReduce 工作原理 1...

    Hadoop MapReduce实战手册(完整版)

    每个Map任务处理一个数据块,将其转化为中间键值对。Reduce阶段则负责聚合Map阶段产生的中间结果,根据相同的键进行归并,最终生成最终结果。 在书中,作者可能详细介绍了MapReduce的工作原理,包括JobTracker和...

    Hadoop源代码分析

    6. **Shuffle与Sort**:Map的输出经过排序后传递给Reducer,这个过程称为Shuffle。Shuffle过程中,数据会被分区并按key排序,以便Reducer能正确处理。 7. **故障恢复机制**:Hadoop设计有强大的容错机制,当...

    提高hadoop的mapreduce job效率笔记

    在大数据处理领域,Hadoop MapReduce 是一个至关重要的框架,用于分布式处理海量数据。通过优化 MapReduce Job 的配置和设计,可以显著提升处理效率。以下是一些关键知识点,旨在帮助你提升 Hadoop MapReduce Job 的...

    Hadoop Map-Reduce教程

    Map 函数接收输入数据块,并将其转换为一系列键值对。这一阶段的主要任务是对输入数据进行预处理,包括分割、过滤等操作。 ##### Reduce 阶段 Reduce 函数接收来自 Map 函数产生的键值对,并对其进行汇总、排序、...

    尚硅谷大数据技术之Hadoop

    2. 自定义InputFormat和OutputFormat:展示如何根据数据格式定制输入输出格式,以适应不同的数据源和需求。 3. 键值对处理:通过自定义Partitioner、Comparator和Reducer,实现更复杂的键值对排序和分区逻辑。 4. ...

    Hadoop源码分析

    Map阶段的源码中,我们能看到InputFormat类负责切分输入数据,生成RecordReader对象,该对象读取数据并转化为键值对。Mapper类处理这些键值对,生成新的中间键值对。Map任务的输出会被分区和排序,然后通过网络传输...

    第02节:hadoop精讲之map reduce原理及代码.rar

    Driver类会初始化Job对象,设置输入输出路径,配置Mapper和Reducer类,以及其他的参数设置。最后,通过Job的submit()方法提交作业到Hadoop集群。 在Hadoop生态系统中,MapReduce可以与其他组件如HDFS(Hadoop ...

    Hadoop学习总结

    Mapper接收输入记录,进行处理(如词频统计),并将结果输出为键值对(, value>)。 2. **Reduce阶段**:Reducer从所有Mapper中收集相同键的值,将它们组合并处理,最终生成新的键值对作为输出。这一步骤通常用于...

    Hadoop源码剖析

    首先,Mapper是Hadoop MapReduce的第一阶段,它负责将输入数据转化为键值对。Mapper类的核心方法是map(),这个方法接收一个键值对,经过业务逻辑处理后,生成新的键值对。Mapper的运行环境由RecordReader提供输入,...

    Windows平台下Hadoop的Map/Reduce开发

    在Windows平台上进行Hadoop的Map/Reduce开发可能会比在Linux环境下多一些挑战,但通过详细的步骤和理解Map/Reduce的工作机制,开发者可以有效地克服这些困难。以下是对标题和描述中涉及知识点的详细说明: **Hadoop...

    hadoop demo wordcount

    3. 输入输出格式:了解Hadoop如何处理输入文件和生成输出文件,包括RecordReader和RecordWriter接口。 4. 分布式缓存:如果需要,可以学习如何使用Hadoop的分布式缓存来共享文件或jar包。 5. Java编程:因为Hadoop ...

    MapReduce初级案例

    Reducer函数则直接将输入的key输出为输出的key,value部分设置为空。 通过上述案例,初学者可以了解到MapReduce如何处理并行化计算,以及如何编写Map和Reduce函数来实现数据处理的具体需求。这个案例也展示了如何将...

    hadoop 入门

    - Shuffle与Sort:Mapper的输出被排序并分组,为Reducer准备输入。 - Reduce阶段:Reducer处理来自Mapper的键值对,执行聚合或汇总操作,产生最终结果。 2. **Hadoop 应用开发** 开发Hadoop应用通常涉及编写...

    Hadoop_MapReduce教程.doc

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

    Hadoop中单词统计案例运行的代码

    1. **输入**:输入数据通常是以块(Block)的形式存储在HDFS(Hadoop Distributed File System)上,每个块大小默认为128MB。 2. **Mapper**:Map函数将输入块中的每一行文本作为键值对(, Text>,行号与整行内容)...

Global site tag (gtag.js) - Google Analytics