MapReduce类型与格式

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函数

}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值