MapReduce类型与格式

本文详细解析了MapReduce类型的工作流程,包括Map、Partition、Combine、Reduce四个阶段,并提供了Java接口代码实现。此外,介绍了如何配置默认MapReduce作业,包括设置输入格式、映射器、归并器、输出格式等关键参数,以及如何产生输入分片和记录读取过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MapReduce类型

map:(k1,v1)->(k2,v2)

partition:(K2,V2)->Integer

combine:(K2,list(V2))->(K2,list(V2))

reduce(k2,list(v2))->list(k3,v3)

java接口代码

public interface Mapper<K1,V1,K2,V2> extends JobConfigurable,Closeable{

 void map(K1 key,V1 value,OutputCollector<K2,V2> output,Reporter reporter) throws IOException;

}

public interface Reducer<K2,V2,K3,V3> extends JobConfigurable,Closeable{

void reduce(K2 key,Iterator<v2> values,OutputCollector<k3,V3> output,Reporter reporter) throws IOException;

}

默认MapReduce作业

JobConf  conf = 

conf.setInputFormat(TextInputFormat.class); //LongWritable,Text

conf.setNumMapTask(1);//真正Map任务的数量将取决于输入文件的大小及文件块的大小(split)

conf.setMapperClass(IdentityMapper.class);

conf.setMapOutputRunnerClass(MapRunner.class);//map任务是由MapRunner负责运行的,回调map函数

conf.setMapOutputKeyClass(LongWritable.class);

conf.setMapOutputValueClass(Text.class);


conf.setPartitionerClass(hashPartitioner.class);


conf.setNumReduceTask(1);

conf.setReducerClass(IdentityReducer.class);


conf.setOutputKeyClass(LongWritable.class);

conf.setOutputValueClass(Text.class);

conf.setOutputFormat(TextOutputFormat.class);


JobClient.runJob(conf);


输入格式

InputSplit 长度getLength() 和存储位置getLocations()

长度用来排序分片,以便优先处理最大的分片,从而最小化作业运行时间

存储位置:以便map任务尽量放在分片数据附近。

InputFormat负责产生输入分片并将它们分割成记录 

getSplits(JobConf job,int numSplits) 产生分片传递给jobtracker,分配给taskTracker,map任务(MapRunner)把输入分片传递给getRecordReader()方法

RecordReader<K,V> getRecordReader(InputSplit split,JobConf job, Reporter reporter); 

MapRunner中部分代码

K key = reader.createKey();

V value = reader.createValue();

while(reader.next(key.value)){

mapper.map(key,value,output,reporter);//回调所写的map函数

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值