初识MR_Run编写

大数据

初次使用eclipse编写hdfs集群计算心得

计算数据文件需要自写3大块:Mapper,Recucer,RunJob

Mapper:获取数据的对键值并对键值对类型规划,并得到输出的键值对

​ 自定义的Mapper类继承Mapper<xx1,xx2,xx3,xx4>

​ xx1,xx2代表输入数据键值对的类型 xx3,xx4代表输出时键值对的类型

​ 写调用并map方法,将数据放到数组中,循环数组,得到输出结果<k,v>

​ 判断输入数据类型,基本数据类型不能做序列化处理,Text重写了String,IntWriteable重写了Long

​ 以字母为例,输入的键值对在排序过程中不会改变,mapper最终输出的是<单词,单词出现次数>

Recucer:获取Mapper键值对的输出结果并聚合,输出自己想得到的数据格式

​ Mapper的输出是Reducer的输入,自定义的Reducer类继承reducer<xx1,xx2,xx3,xx4>,理论同上

​ 写调用并reduce方法,将数据聚合(统计数据),得到输出结果<k,v>

​ int sum=0;
​ for(IntWritable i:iter){
​ sum+=i.get();
​ }
​ context.write(key, new IntWritable(sum));

​ Iterable iter --迭代器(假),因为需要直接传参给Reduce

RunJob:

​ 趋近于格式化,参考代码如下

public class RunJob {

public static void main(String[] args) {
	//加载配置文件
	Configuration conf =new Configuration();
	
	try {
		Job job =Job.getInstance(conf);
		FileSystem fs =FileSystem.get(conf);
		
		//job(任务)名字
		job.setJobName("wc");
		
		//job入口类(有main方法的类)
		job.setJarByClass(RunJob.class);
		
		//job指定所调用的Mapper和Reducer类
		job.setMapperClass(WordCountMapper.class);
		job.setReducerClass(WordCountReducer.class);
		
		//job输出的Map键值对的类型
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(IntWritable.class);
		
		//设置reduce的数量,默认为1
		job.setNumReduceTasks(1); 
		
		//设置计算输入数据
		FileInputFormat.addInputPath(job, new Path("/input/wc.txt"));
		
		//设置计算输出目录(mapreduce计算完成之后,最后的结果存放的目录)
		Path outpath =new Path("/output/wc/");  //该目录必须不能存在,如果存在计算框架会出错
		if(fs.exists(outpath)){//如果存在该目录,则删除
			fs.delete(outpath, true);
		}
		FileOutputFormat.setOutputPath(job, outpath);
		
		//开始执行
		boolean f =job.waitForCompletion(true);
		if(f){
			System.out.println("mapreduce程序执行成功");
		}
		
	} catch (Exception e) {
		e.printStackTrace();
	}	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值