MapReduce Input/OutPut 为每个键值对发出

Posted

技术标签:

【中文标题】MapReduce Input/OutPut 为每个键值对发出【英文标题】:MapReduce Input/OutPut emits for each key value pair 【发布时间】:2012-08-31 22:31:33 【问题描述】:

MapReduce 用于传递和发出键值对的基本信息。 我需要一点点清楚我们通过什么以及发出什么。 这是我的担忧: MapReduce 输入和输出:

1.Map() 方法——它需要单个键值对还是键值对列表并发出什么? 2.对于每个输入键值对,映射器发出什么?相同类型还是不同类型? 3.对于每个中间键,reducer 会发出什么?有类型限制吗? 4.Reducer 接收与相同键关联的所有值。这些值将如何排序,如排序或轨道排序?该顺序是否因运行而异? 5.在shuffle和sort阶段,key和value的呈现顺序是什么?

【问题讨论】:

【参考方案1】:

Map 方法:接收作为输入 (K1,V1) 并返回 (K2,V2)。也就是说,输出的键和值可以与输入的键和值不同。

reducer 方法:在 mapper 的输出被正确打乱后(相同的 key 到同一个 reducer),reducer 的输入是 (K2, LIST(V2)),它的输出是 (K3,V3)。 shuffle 过程的结果是,key 到达了由 key K2 排序的 reducer。

如果您想以特定方式对键进行排序,可以实现键 K3 的 compareTo 方法。

Referring your questions:

1. Answered above.
2. You can emit whatever you want as long it consists of a key and a value. 
   For example, in the WordCount you send as key the word and as value 1.
3. In the WordCount example, the reducer will receive a word and list of number. 
   Then, it will sum up the numbers and emit the word and its sum.
4. Answered above.
5. Answered above.

【讨论】:

我的理解是 1.它接受单个键值对作为输入,并且可以发出任意数量的键值对作为输出,包括零。 2.对于每个键/值pari,它们会根据需要发出尽可能多的中间键/值对,并且不能是相同的类型。 3.Reducer 根据需要发出尽可能多的最终键值对。 4.Values 是按轨道排列的,而且顺序非常从运行到运行。那是对的吗 ?如果我错了,请告诉我。 在随机播放阶段,值不是按顺序排列或升序排列的吗? 值未排序。只有钥匙。【参考方案2】: 对于每个输入 k1,v1 映射发出零个或多个 k2,v2。 对于每个 k2 reducer 接收 k2,list(v1,v3,v4..)。 对于每个输入 k2,list(v) reducer 可以发出零个或多个 k3、v3。

值在第 2 步中任意排序。 Key, value - mapper 和 reducer 的输出应该是相同的类型,即所有的 key 必须是相同的类型,所有的 value 必须是相同的类型。

【讨论】:

以上是关于MapReduce Input/OutPut 为每个键值对发出的主要内容,如果未能解决你的问题,请参考以下文章

./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a

[hadoop] hadoop 运行 wordcount

MapReduce小文件处理之CombineFileInputFormat实现

MapReduce实现单词统计

如何格式化整数? [关闭]

angular 的 @Input@Output 的一个用法