大数据之路(二)——MapReduce 编程案例(WordCount)

本文介绍了大数据处理中的经典案例——WordCount,详细讲解了如何使用MapReduce进行编程,包括导入必要的Hadoop相关jar包。内容适用于学习和参考。
摘要由CSDN通过智能技术生成

WordCount案例

  1. 导入相关jar包——share文件夹下的hadoop文件夹下的common、hdfs、mapreduce文件夹下所有jar包,以及mapreduce文件夹下的依赖jar包,即lib文件夹下的所有jar包。
import org.apache.hadoop.mapreduce.Mapper;
		/**KEYIN:map task 读取到的数据的key类型,是一行的起始偏移量Long类型;
		   VALUEIN:map task 读取到的数据的value类型,是是一行的内容 String类型;
		   KEYOUT:用户的自定义的map方法要返回的结果的key类型,在此案例中我们需要反悔的是单词String类型;
		   VALUEOUT:用户的自定义的map方法要返回的结果的value类型,在此案例中我们需要返回的是整数Integer类型;
		   在mapreduce中,map产生的数据需要传输给reduce,需要进行序列化和反序列化,而jdk中原生序列化机制太过冗余,所以,hadoop提供了自己的序列化机制,所以mapreduce传输的数据类型就必须实现hadoop自己的序列化接口。
		   hadoop为常用的jdk基本数据类型 Long,Float,Integer,String等数据类型封装了自己的实现了hadoop序列化接口的类型:LongWritable,FloatWritable,IntWritable,Text
		*/
// public class WordCountMapper  extends Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>{
	}
	public class WordCountMapper extends Mapper<LongWritable,Text,Text,IntWritable>{
			@overide
			protect void map(LongWrightable key,Text value,Context context) throws IOException{
			//切单词
			String line = value.toString();
			String[] words = line.split(" ");
			for(String word:words){
			context.write(new Text(word),new IntWritable(1));
			}
			}
}

public class WordCountReducer extends Reduce<Text,IntWritable,Text,IntWritable>{
         protected void reduce(Text key,Iterable<IntWritable> values,Context context){
					Iterator<IntWritable> iterator = values.Iterator;
					int count = 0;
					while(iterator.hasNext()){
										IntWritable value = iterator.next;
										count += value.get();
					}
					context.write(key,new IntWritable(count));

         }}
 //提交作业的类
 public class JobSubmit{
	public static void main(String [] args){
		Configuration conf = new Configuration;
		//job运行时要访问的默认文件系统
		conf.set("fs.defaultFS","文件所在机器ip");
		//设置job提交去哪运行
		conf.set("mapreduce.framework.name","yarn");
		conf.set("yarn.resourcemanager.hostname","词namenode的hostname");
		Job job = Job.getInstance(conf);
		//封装参数:jar包所在位置
		job.setJarByClass("JobSubmit.class");
		//本次job所调用的mapper、reducer实现类
		job.setMapperClass(WordCountMpper.class);
		job.setReducerClass(WordCountReducer.class);
		//本次job的mapper实现类、reducer实现类产生的结果数据的key、value类型
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(IntWritable.class);
		
		job.setReduceOutputKeyClass(Text.class);
		job.setReduceOutputValueClass(IntWritable.class);
       //本次job要处理的输入数据集所在的路径、最终结果的输出路径
       FileInputFormat.setInputPaths(job,new Path("lujing"));
       FileOutputFormat.setOutputPath(job,new Path("lujing"));
		//想要启动的reduce task 的数量
		job.setNumReduceTask(2);
		//提交job给yarn
		boolean res = job.waitForCompletion(true);


	}

}

内容整理来自网络、相关书籍等,仅供学习参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值