Mapreduce编程八大步
1.1:指定读取的文件位于哪里
FileInputFormat.setInputPaths()指定如何对输入文件进行格式化,把输入文本每一行解析为键值对
job.setInputFormatClass()
1.2:指定自定义的Map类
job.setMapperClass()
//map输出的<k,v>类型,如果<k3,v3>的类型与<k2,v2>类型一致,则可以省略
//job.setMapOutputKeyClass()
//job.setMapOutputValueClass()
1.3:分区
job.setPartitionerClass()
//设置reduce任务个数
//job.setNumReducetasks(1)
1.4:TODO 排序 分组
1.5:规约
job.setCombinerClass()
2.1:指定自定义的Reduce类
job.setReduceClass()
//指定reduce的输出类型
//job.setOutputKeyClass()
//job.setOutputValueClass()
2.2:指定写出的文件位置
FileOutputFormat.setOutputPath()
指定如何对输出文件格式化类型
job.setoutputFormatClass()
2.3:把job提交给JobTracker运行
System.exit(status)
MapReduce程序的执行步骤:
1.Map任务处理
1.1 读取输入文件内容,解析成key,value对,对输入文件的每一行,解析成key,value对。每一个键值对调用一次map
函数
1.2 写自己的逻辑,对输入的key,value处理,转换成新的key,value输出
1.3 对输出的key,value进行分区
1.4 对不同分区的数据,按照key进行排序,分组相同key的value放到一个集合中
1.5 (可选)分组后的数据进行规约
2. reduce任务处理
2.1 对多个Map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点
2.2 对多个map任务的输出进行合并,排序,写reduce函数自己的逻辑,对输入的key,value处理,转换成新的key,value输出
2.3 把reduce的输出保存到文件中