相关疑难解决方法(0)

hadoop:0 reducer和identity reducer之间的区别?

我只是想确认我对减速器和减速器之间的差异的理解.

  • 0 reducer意味着将跳过reduce步骤并且mapper输出将是最终输出
  • 身份减少器意味着洗牌/分拣仍然会发生?

hadoop mapreduce

25
推荐指数
2
解决办法
2万
查看次数

新Hadoop API中的identityreducer

我花了差不多一天但无法弄清楚如何在新的Hadoop API中使用IdentityReducer.我能找到的所有引用或类都使用旧的API.显然,在新的API代码库中混合旧的API idetntitreducer类并不顺利.任何帮助将不胜感激.

hadoop mapreduce

19
推荐指数
1
解决办法
6548
查看次数

深入了解Map中地图阶段的内部工作会减少hadoop中的工作吗?

我正在读Hadoop: The definitive guide 3rd edtition汤姆怀特.它是理解内部的优秀资源Hadoop,尤其是Map-Reduce我感兴趣的内部.

从书中,(页205):

随机和排序

MapReduce保证每个reducer的输入按键排序.系统执行排序的过程 - 将映射输出作为输入传递给Reducer - 称为shuffle.

我从中推断出,在将键发送到reducer之前,它们被排序,表明作业的map阶段的输出被排序.请注意:我不称之为mapper,因为map阶段包括mapper(由程序员编写)和MR框架的内置排序机制.


地图方面

每个map任务都有一个循环内存缓冲区,用于将输出写入.默认情况下,缓冲区为100 MB,可以通过更改io.sort.mb属性来调整大小.当缓冲区的内容达到某个阈值大小(io.sort.spill.per,默认为0.80或80%)时,后台线程将开始将内容溢出到磁盘.在溢出发生时,地图输出将继续写入缓冲区,但如果缓冲区在此期间填满,则地图将阻塞,直到溢出完成.
在写入磁盘之前,线程首先将数据划分为与最终将被发送到的reducer相对应的分区.在每个分区中,后台线程按键执行内存中排序,如果有组合器函数,则在排序输出上运行.运行组合器功能可以实现更紧凑的映射输出,因此可以将更少的数据写入本地磁盘并传输到reducer.

我对上一段的理解是,当映射器生成键值对时,键值对被分区和排序.一个假设的例子:

考虑使用mapper-1进行字数统计:

>mapper-1 contents
partition-1
   xxxx: 2
   yyyy: 3
partition-2
   aaaa: 15
   zzzz: 11
Run Code Online (Sandbox Code Playgroud)

(请注意每个分区数据按键排序,但分区-1的数据和分区2的数据不必按顺序排序)


继续阅读本章:

每次内存缓冲区达到溢出阈值时,都会创建一个新的溢出文件,因此在映射任务写入其最后一个输出记录后,可能会有多个溢出文件.在任务完成之前,溢出文件将合并到单个分区和排序的输出文件中.配置属性io.sort.factor一次控制要合并的最大流数; 默认值为10.

我的理解是(请知道上面的段落中的粗体短语,欺骗了我):在map-task中,有几个文件可能会溢出到磁盘,但它们会合并到一个仍然包含分区并进行排序的文件中.考虑与上面相同的例子:

在单个map-task完成之前,其中间数据可以是:

mapper-1内容

spill 1:             spill 2:           spill 2:
    partition-1         partition-1        partition-1
                          hhhh:5       
       xxxx: 2            xxxx: 3             mmmm: 2
       yyyy: 3            yyyy: 7             yyyy: 9 

    partition-2         partition-2        partition-2
       aaaa: 15           bbbb: 15 …
Run Code Online (Sandbox Code Playgroud)

sorting hadoop mapreduce hadoop2

6
推荐指数
1
解决办法
2506
查看次数

组合器在哪里组合映射器输出 - 在映射阶段还是减少Map-reduce工作中的阶段?

我的印象是组合器就像在本地映射任务上执行的reducer一样,即它聚合单个Map任务的结果,以减少输出传输的网络带宽.

从阅读中Hadoop- The definitive guide 3rd edition,我的理解似乎是正确的.

从第2章(第34页)

组合器函数许多MapReduce作业受到群集上可用带宽的限制,因此最大限度地减少map和reduce任务之间传输的数据是值得的.Hadoop允许用户指定要在地图输出上运行的组合器函数 - 组合器函数的输出形成reduce函数的输入.由于组合器函数是一种优化,因此Hadoop无法保证为特定的地图输出记录调用它的次数(如果有的话).换句话说,调用组合器函数零,一次或多次应该从reducer产生相同的输出.

所以我在wordcount问题上尝试了以下内容:

job.setMapperClass(mapperClass);
job.setCombinerClass(reduceClass);
job.setNumReduceTasks(0);
Run Code Online (Sandbox Code Playgroud)

这是柜台:

14/07/18 10:40:15 INFO mapred.JobClient: Counters: 10
14/07/18 10:40:15 INFO mapred.JobClient:   File System Counters
14/07/18 10:40:15 INFO mapred.JobClient:     FILE: Number of bytes read=293
14/07/18 10:40:15 INFO mapred.JobClient:     FILE: Number of bytes written=75964
14/07/18 10:40:15 INFO mapred.JobClient:     FILE: Number of read operations=0
14/07/18 10:40:15 INFO mapred.JobClient:     FILE: Number of large read operations=0
14/07/18 10:40:15 INFO mapred.JobClient:     FILE: Number of write operations=0
14/07/18 10:40:15 INFO …
Run Code Online (Sandbox Code Playgroud)

hadoop mapreduce hadoop2

5
推荐指数
1
解决办法
5565
查看次数

标签 统计

hadoop ×4

mapreduce ×4

hadoop2 ×2

sorting ×1