Eclipse下Hadoop学习笔记——MapReduce过程及相关类使用学习

来源:互联网 发布:吉米多维奇 知乎 编辑:程序博客网 时间:2024/05/16 17:43
为了分析MapReduce实际过程,不重写map和reduce方法,查看Reducer输出结果,分析和学习相关类;
开发环境Eclipse,Ubuntu 10.04,Hadoop 1.1.2完全分布模式,其中hadoop 1.1.2的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);

}
}
原创粉丝点击