MapReduce的编程开发——求平均值

本文是关于使用Hadoop MapReduce进行平均值计算的学习笔记,详细介绍了环境配置,包括Linux Ubuntu 16.04上的Hadoop 3.0.0启动,Eclipse的Hadoop集成设置。通过编写Score.java程序,实现了读取数据文件,计算并输出平均值的结果。
部署运行你感兴趣的模型镜像


前言

本文主要是学习MapReduce的学习笔记,对所学内容进行记录。
实验环境:
1.Linux Ubuntu 16.04

2.hadoop3.0.0

3.eclipse4.5.1


一、启动Hadoop

  1. 进入Hadoop启动目录cd /apps/hadoop/sbin
  2. 启动Hadoop./start-all.sh
  3. 输入‘jps’,启动后显示如下信息
    在这里插入图片描述

二、环境搭配

  1. 打开eclipse->Window->Preferences;

  2. 选择Hadoop Map/Reduce,选择Hadoop包根目录,/apps/hadoop,点击Apply,点击OK;

  3. 点击window–>show view–>other–>mapreduce tools–>map/reduce locations,之后页面会出现对应的标签页;
    界面

  4. 点击3中图标1,在Local name输入myhadoop,在DFS Master 框下Port输入8020,点击Finish,出现3中右侧页面;
    在这里插入图片描述

  5. 点击3中

  6. 图标2,选择下图内容,出现第3步图中左侧内容
    在这里插入图片描述
    完成环境配置环境。

三、求平均值

  1. 新建test项目,新建average包,图片步骤可见“排序”;
  2. 新建Score类,即Score.java,编写并保存如下代码:
package average;

import java.io.IOException;
import java.util.Iterator;
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 Score {
    public static class Map extends Mapper<Object,Text,Text,IntWritable>{
        public void map(Object key,Text value,Context context){
            String line=value.toString();
            StringTokenizer tokenizer=new StringTokenizer(line,"\n");
            while(tokenizer.hasMoreElements()){
                StringTokenizer tokenizerLine=new StringTokenizer(tokenizer.nextToken());
                String nameString=tokenizerLine.nextToken();
                String scoreString=tokenizerLine.nextToken();
                int scoreInt=Integer.parseInt(scoreString);
                try {
                    context.write(new Text(nameString),new IntWritable(scoreInt));
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static class Reduce extends Reducer<Text,IntWritable,Text,IntWritable>{
        public void reduce(Text key,Iterable<IntWritable> values,Context context){
            int sum=0;
            int count=0;
            Iterator<IntWritable> iterable=values.iterator();
            while(iterable.hasNext()){
                sum+=iterable.next().get();
                count++;
            }
            int avg=(int)sum/count;
            try {
                context.write(key,new IntWritable(avg));
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws IllegalArgumentException, IOException, ClassNotFoundException, InterruptedException{
        Configuration conf = new Configuration();
        Job job = new Job(conf);
        job.setJarByClass(Score.class);
        job.setJobName("average score");
        job.setMapperClass(Map.class); 
        job.setReducerClass(Reduce.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path("/average/input"));
        FileOutputFormat.setOutputPath(job, new Path("/average/output"));
        job.waitForCompletion(true);

    }

}
  1. 运行指令cp /apps/hadoop/etc/hadoop/{core-site.xml,hdfs-site.xml,log4j.properties} /home/dolphin/workspace/test/src,将hadoop配置文件复制到src文件夹下;
    在这里插入图片描述
  2. 创建输入文件存放路径
hadoop fs -mkdir /average
hadoop fs -mkdir /average/input
  1. 将数据文件放入hadoop目录下,hadoop fs -put /home/dolphin/Desktop/text.txt /average/input,text.txt内容如下:
zhang 82
li 90
zhang 66
li 86
zhao 78
zhao 84

在这里插入图片描述

  1. 运行Score.java文件,得到分数平均值结果在output文件夹中如下所示
li  88
zhang   74
zhao    81

总结

本实验利用Hadoop进行求平均值操作,代码的理解也需要去看去练习才能适应各种环境。

您可能感兴趣的与本文相关的镜像

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值