自定义实现MapReduce中的wordcount功能导出jar使用

  • 创建Maven项目
    自定义实现MapReduce中的wordcount功能导出jar使用_第1张图片

  • 选择默认路径
    自定义实现MapReduce中的wordcount功能导出jar使用_第2张图片

  • maven 下一步
    自定义实现MapReduce中的wordcount功能导出jar使用_第3张图片

  • 设置项目名称和包
    自定义实现MapReduce中的wordcount功能导出jar使用_第4张图片

  • 修改pom文件
    自定义实现MapReduce中的wordcount功能导出jar使用_第5张图片

修改后内容如下 pom.xml 文件


  4.0.0

  com.company.mr
  MrWordCount
  0.0.1-SNAPSHOT
  jar

  MrWordCount
  http://maven.apache.org

  
    UTF-8
  

 
		
			junit
			junit
			3.8.1
			test
		
		
		
			org.apache.hadoop
			hadoop-common
			2.7.1
		

		
			org.apache.hadoop
			hadoop-mapreduce-client-core
			2.7.1
		
		
			org.apache.hadoop
			hadoop-mapreduce-client-jobclient
			2.7.1
		
	

	
		
			
				org.apache.maven.plugins
				maven-compiler-plugin
				2.3.2
				
					1.8
					1.8
				
			
		
	


  • maven 初 创项目 问题修复
    自定义实现MapReduce中的wordcount功能导出jar使用_第6张图片
    自定义实现MapReduce中的wordcount功能导出jar使用_第7张图片

  • 创建一个包 mymr
    自定义实现MapReduce中的wordcount功能导出jar使用_第8张图片
    自定义实现MapReduce中的wordcount功能导出jar使用_第9张图片

  • 创建主类 自定义实现MapReduce中的wordcount功能导出jar使用_第10张图片
    自定义实现MapReduce中的wordcount功能导出jar使用_第11张图片

  • MyWordcount.class 代码的内容如下

package mymr;
import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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.output.FileOutputFormat;

public class MyWordcount {

	
	/*
	 * Mapper类:把文件中每个单词按照空格分割,并每个单词标1;
	 * @ 前面两个LongWritable key, Text value就是输入的key和value
	 * @ 第三个参数Context context这是可以记录输入的key和value
	 */
	public static class MyWordcountMap extends Mapper {
		//为什么使用Mr特殊类型,因为数据需要分布式交互,可能多台机器同时计算,所以类型需要时MapReduce的特殊类型;
		/**
		 * @see KEYIN 即K1 表示每一行的起始位置(偏移量offset)
		 * @see VALUEIN 即v1 表示每一行的文本内容
		 * @see KEYOUT 即k2 表示每一行中的每个单词
		 * @see VALUEOUT 即v2表示每一行中的每个单词的出现次数,固定值1
		 **/
		@Override
		protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
			String[] splits = value.toString().split(" ");
			for (String s : splits) {
				// 1,拿出字符串; 2,标记1; 每个单词都单独拿出进行标记
				// (hello, 1)
				context.write(new Text(s), new IntWritable(1));
			}
		}
	}

	// Reducer
	public static class MyWordcountReducer extends Reducer {
		// * KEYIN 即k2 表示每一行中的每个单词
		// * VALUEIN 即v2 表示每一行中每个单词出现次数,固定值1
		// * KEYOUT 即k3 表示整个文件中的不同单词
		// * VALUEOUT 即v3 表示整个文件中的不同单词的出现总次数
		@Override
		protected void reduce(Text text, Iterable arg1, Context context)
				throws IOException, InterruptedException {
			int count = 0;
			for (IntWritable v : arg1) {
				count += v.get();
			}
			context.write(text, new IntWritable(count));
		}
	}
	
	public static void main(String[] args) throws Exception{
		if (args.length < 2) {
			System.out.println("usage......");
			System.err.println("缺少参数");
			System.exit(2);// 非领异常退出
		} else {
			Configuration conf = new Configuration();
			// 打成jar执行
			Job job = Job.getInstance(conf);
			job.setJarByClass(MyWordcount.class);
			job.setJobName("MyWordcount");// 8088页面显示的名字
			// map输出的数据类型是什么?
			job.setMapOutputKeyClass(Text.class);
			job.setMapOutputValueClass(IntWritable.class);
			// reduce输出的数据类型是什么?
			job.setOutputKeyClass(Text.class);
			job.setOutputValueClass(IntWritable.class);
			// 数据在哪里?
			FileInputFormat.addInputPath(job, new Path(args[0]));
			// 数据输出到哪里?
			FileOutputFormat.setOutputPath(job, new Path(args[1]));
			// 交给yarn去执行,直到执行结束才退出本程序
			System.exit(job.waitForCompletion(true) ? 0 : 1);
		}
	}

}

  • 复制全类名 稍后应用 (mymr.MyWordcount
    自定义实现MapReduce中的wordcount功能导出jar使用_第12张图片

  • 导出 jar 用于 yarn jar 计算 (mr计划)
    自定义实现MapReduce中的wordcount功能导出jar使用_第13张图片
    自定义实现MapReduce中的wordcount功能导出jar使用_第14张图片
    自定义实现MapReduce中的wordcount功能导出jar使用_第15张图片
    自定义实现MapReduce中的wordcount功能导出jar使用_第16张图片

  • jar包的下载地址,上传 服务器可以替代 MapReduce中的 wordcount
    自定义jar实现MapReduce中的 wordcount

  • 服务器中调用方式, 如下命令在MyWordcount.jar上传到的服务器路径下运行
    yarn jar mycombiner.jar com.bipt.mrwc.MyMapReduce_02 /helloworld /output05
    mymr.MyWordcount --> 用于替代 wordcount类
    /hello.txt 是hdfs服务器根目录已经上传的被计算文件
    /output1 是hdfs根目录不存在的文件夹,用于存放计算结果

你可能感兴趣的:(hdfs,MapReduce,yarn,bigdata)