菜鸟Hadoop学习笔记------Maper&Reducer过程分析

Benboerba_ 2013-08-02 08:09:14
为了分析MapReduce过程不重写map和reduce方法,查看结果,学习相关类;
开发环境Eclipse;
输入文件为一个.txt文件。

package org.cqut.hadoop;

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;
import org.apache.hadoop.util.GenericOptionsParser;

/**
*
* 测试不重写Map和Reduce方法得到的结果;
*
* */
public class OtherLazyMapReduce {

public static void main(String args[]) throws IOException,
InterruptedException, ClassNotFoundException {

Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args)
.getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Erro ! System Will Exit");
System.exit(2);
}


Job job = new Job(conf, "OtherLazyMapReduce");// 1.利用配置文件初始化一个Job,并且命名一个由MapReduce框架处理的Job;


/***********InputFormat类************/
/*
* InputFormat类;
*
* 作用:
* 1.设置输入的形式;
* 2.将输入的数据按照相应的形式分割成一个个spilts后再进一步拆分成<key,value>对作为Mapper的输入;
* 3.默认使用TextInputFormat类进行处理;
* 4.可以通过job.setInputFormatClass()方法进行设置;
*
* */
job.setInputFormatClass(TextInputFormat.class);


/*****Mapper类**********/
/*
* Mapper类
*
* 作用:
* 1.接受MapReduce框架处理后的<key,value>对;
* 2.并且通过实现map()方法,转化为中间结果的<key,value>对;
* 3.可以通过job.setMapperClass()进行设置;
*
**/
job.setMapperClass(Mapper.class);// 设置默认的Mapper类接受InputFormatClass类分解的键值对;



/*****MapOutputKey/valueClass****/

/*
*设置中间输出的key和value的类型;
* */
job.setMapOutputKeyClass(LongWritable.class);
job.setMapOutputValueClass(Text.class);

/*******Combiner类*****/
/*
* 作用:
* 1.实现combine()方法,合并中间结果中具有相同key值的键值对;
* 2.可以通过job.setCombinerClass()进行设置;
*
* */
job.setCombinerClass(Reducer.class);// 合并中间结果具有相同key值的键值对传人指定的Reducer;


/******Partitioner类**************/
/*
* Partitioner类
*
* 作用:
* 1.用于在Shuffle过程中按照key值将中间数据分解成R份,每一份由一个Reducer负责处理;
* 2.默认采用哈希函数完成Shuffle过程;
* 3.可以通过job.setPartitionerClass()设置;
*
*/
job.setPartitionerClass(HashPartitioner.class);


/*************Reducer类**********/
/*
* Reducer类
*
* 作用:
* 1.实现reduce()方法
* 2.将中间结果合并,得到最终结果;
* 3.可以通过job.setReducerClass()设置;
*/
job.setReducerClass(Reducer.class);


/***********Outputkey/valueClass类******/
/*
* OutputFormat类
*
* 作用:设置Reducer过程输出最终结果键值对的类型;
*/
job.setOutputKeyClass(LongWritable.class);
job.setOutputValueClass(Text.class);



/********OutputFormatClass类****************/
/*
* 作用:设置输出的结果的形式;
*
* */
job.setOutputFormatClass(TextOutputFormat.class);


FileInputFormat.addInputPath(job, new Path(otherArgs[0]));

FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));

System.exit(job.waitForCompletion(true) ? 0 : 1);

}
}
...全文
607 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
JPFRMD 2013-12-11
  • 打赏
  • 举报
回复
新手,看不懂啊。高手能不能加下你的QQ,我的QQ 1031568262 现在在做银行绩效考核项目。想学习hadoop,求高手加QQ
mdp373305096 2013-11-08
  • 打赏
  • 举报
回复
看不懂,对这个api了解的太少
FeelTouch Labs 2013-08-02
  • 打赏
  • 举报
回复
楼主笔记不错,就是分析的不透彻哈,多分享些心得+实例的就更好了

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧