相关疑难解决方法(0)

mapreduce作业的map阶段输出总是排序?

我对从Mapper获得的输出有点困惑.

例如,当我运行一个简单的wordcount程序时,使用此输入文本:

hello world
Hadoop programming
mapreduce wordcount
lets see if this works
12345678
hello world
mapreduce wordcount
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

12345678    1
Hadoop  1
hello   1
hello   1
if  1
lets    1
mapreduce   1
mapreduce   1
programming 1
see 1
this    1
wordcount   1
wordcount   1
works   1
world   1
world   1
Run Code Online (Sandbox Code Playgroud)

如您所见,mapper的输出已经排序.我根本没跑Reducer.但我发现在另一个项目中,mapper的输出没有排序.所以我对此完全清楚..

我的问题是:

  1. 映射器的输出总是排序吗?
  2. 排序阶段是否已经集成到映射器阶段,以便映射阶段的输出已经在中间数据中排序?
  3. 有没有办法从sort and shuffle阶段收集数据并在它进入Reducer之前保留它?减速器带有一个键和一个迭代列表.有没有办法,我可以保留这些数据吗?

hadoop mapreduce hadoop2

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

组合器在哪里组合映射器输出 - 在映射阶段还是减少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 ×2

hadoop2 ×2

mapreduce ×2