MapReduce实操

在linux环境中执行一个mapreduce的小Demo(使用安装时已存在的实例)

注意:mapreduce的测试数据和输出结果均来自hdfs文件系统

  1. 启动hadoop服务(当然要先启动zookeeper,不明白的宝子可以看看我之前有关环境搭建的介绍)
  2. 执行命令
    hadoop jar <执行的jar包的路径> <选择操作实例> <所选操作需要的参数>
    其中:
    • jar包:hadoop安装目录下share/hadoop/mapreduce我们选择hadoop-mapreduce-examples-2.7.3.jar这是一个实例jar包,里面有很多小Demo
    • 操作实例:即jar包里面的小Demo(实质是一个java可执行文件)
    • 参数:

      (1)以wordcount为例参数为<测试所用的hdfs文件系统中的数据文件所在路径> <输出结果文件夹output路径>后两个是hdfs文件系统中的,路径建议同根
      例:hadoop jar /usr/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /bigdata/109ma/a.txt /bigdata/109ma/output
      运行结果:会创建出output目录(相反,若output目录已存在则会报错),并在此目录下生成_SUCCESS和part-r-00000两个文件,其中_SUCCESS文件中存放处理结果
      (2)以pi为例参数为<map执行次数><每个map上执行操作次数>
      例:hadoop jar /usr/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar pi 30 1000
      运行结果为3.1410000

自己写一个小Demo(Java程序)

  1. Windows环境下运行程序:
    • 我们需要启用蓝色小象哦

    • 在对应项目中导入commom,hdfs,yarn,mapreduce四类jar包
      详细方法请见配置eclipse访问hadoop

    • 然后我们就可以写具体实例程序了(注意:代码中建立连接的机器ip和一些文件路径请根据自己实际情况作出正确变更)

      点击查看代码
      package mapreduceDemo;
      
      import java.io.IOException;
      import java.util.StringTokenizer;
      
      import org.apache.hadoop.conf.Configuration;
      import org.apache.hadoop.fs.Path;
      import org.apache.hadoop.io.IntWritable;
      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{
      	public static class MyMapper extends Mapper<Object,Text,
      		Text,IntWritable>{
      		private final static IntWritable one=new IntWritable(1);
      		private Text word=new Text();
      		public void map(Object key,Text value,Context context)
      			throws IOException,InterruptedException{
      			StringTokenizer itr=new StringTokenizer(
      					value.toString());
      			while(itr.hasMoreElements()) {
      				word.set(itr.nextToken());
      				context.write(word, one);
      			}
      		}
      	}
      	public static class MyReduce extends Reducer<Text,
      		IntWritable,Text,IntWritable>{
      			private IntWritable result=new IntWritable();
      			public void reduce(Text key,Iterable<IntWritable> 
      			values,	Context context)
      					throws IOException,InterruptedException{
      				int sum=0;
      				for(IntWritable val:values) {
      					sum+=val.get();
      				}
      				result.set(sum);
      				context.write(key, result);
      			}
      	}
      	
      	public static void main(String[] args) {
      		// TODO Auto-generated method stub
      		
      		try {
      			Configuration conf= new Configuration();
      			conf.set("fs.defaultFS", "hdfs://192.168.13.101:9000");
      			Job job=Job.getInstance(conf,"MyWordCount");
      			job.setJarByClass(mapreduceDemo.MyWordCount.class);
      			job.setMapperClass(MyMapper.class);
      			job.setReducerClass(MyReduce.class);
      			job.setOutputKeyClass(Text.class);
      			job.setOutputValueClass(IntWritable.class);
      			
      			FileInputFormat.setInputPaths(job,
      					new Path("/mapreducetest/test2/a.txt"));
      			FileOutputFormat.setOutputPath(job,
      					new Path("/mapreducetest/test2/output"));
      			try {
      				if(!job.waitForCompletion(true)) {
      						return;
      				}
      			} catch (ClassNotFoundException e) {
      				// TODO Auto-generated catch block
      				e.printStackTrace();
      			} catch (InterruptedException e) {
      				// TODO Auto-generated catch block
      				e.printStackTrace();
      			}
      			
      			
      			
      		} catch (IOException e) {
      			// TODO Auto-generated catch block
      			e.printStackTrace();
      		}
      	}
      
      }
      
      
  2. linux环境下运行程序:
    • 详细程序推荐林子雨老师的大数据技术原理与应用这本书,很详细!!!
    • 运行就按第一种在linux下运行的方法即可
posted @ 2021-12-10 23:46  边缘之地  阅读(163)  评论(0)    收藏  举报