MapReduce编程基础
MapReduce任务可以被分为map和reduce两部分。
Map任务
map任务可以细分为4个阶段:record reader、mapper、combiner、partitioner
map任务的输出被称为中间键,会被发送到reducer做后续处理。
1.record reader
record reader 将输入split解析成记录。record reader 的目的是将输入数据解析成记录,但不负责解析记录本身。它将数据转换为键/值对的形式,并传递给mapper处理。通常键是数据在文件中的位置,值是组成及记录的数据块。
2.map
在mapper中,用户定义的map代码通过处理record reader解析的每个键/值对来产生0个或多个新的键/值对结果。其中,键/值对的选择对MapReduce作业的完成效率来说非常重要。
键是数据在reducer中处理时被分组的依据,值是reducer需要分析的数据。
3.combiner
combiner是一个可选的本地reducer,可以在map阶段聚合数据(注意:combiner是属于本地map的)。combiner通过执行用户指定的来自mapper的中间结果做单个map范围内的聚合。combiner可以产生特别大的性能提升。
4.partitioner
partitioner的作用是将mapper(如果使用了combiner的话就是combiner)的输出的键/值对拆分分片,每个reducer对应一个分片。默认情况下采用散列值进行划分,这种方法不仅能够随机的将整个键空间平均发给每个reducer,同时也能保证不同mapper产生的相同的键可以被发送到同