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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

本文主要是学习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
### 使用Hadoop MapReduce编程实现五个及以上需的示例 #### 1. 单词计数 (Word Count public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); @Override protected void map(Object key, Text value, Context context) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } } public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> { private IntWritable result = new IntWritable(); @Override protected 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); } } } ``` 此代码展示了如何创建一个简单的映射器和化简器来计算文档中各个词语的数量[^3]。 #### 2. 平均值计算 (Average Calculation) 平均值计算可以用来解一组数值数据集的算术平均数。这通常涉及到两个阶段:先汇总总数与项数,再除以总数量得到最终结果。 ```java // 假设有一个自定义的Combiner用于局部聚合... public static class AvgMapper extends Mapper<LongWritable, Text, Text, DoubleArrayWritable> { ... } public static class AvgReducer extends Reducer<Text, DoubleArrayWritable, Text, FloatWritable> { ... } ``` 这里`DoubleArrayWritable`被设计成携带一对双精度浮点数——分别是累加后的总和及其对应的条目数目。 #### 3. 数据过滤 (Data Filtering) 通过设定特定条件筛选符合条件的数据记录。比如只保留年龄大于等于某个阈值的人的信息: ```java public static class FilterMapper extends Mapper<LongWritable, Text, NullWritable, Text> { private final static NullWritable NULL_KEY = NullWritable.get(); private Text lineRecord; @Override protected void setup(Context context) throws IOException, InterruptedException { super.setup(context); this.lineRecord = new Text(); } @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] fields = value.toString().split(","); if(Integer.parseInt(fields[1]) >= THRESHOLD_AGE){ lineRecord.set(value); context.write(NULL_KEY,lineRecord ); } } } // 这里不需要reducer因为只需要输出满足条件的结果即可。 ``` 这段代码实现了基于给定字段(如年龄)进行简单过滤的功能。 #### 4. 排序操作 (Sorting Operation) 对于大规模数据集来说,在分布式环境中执行排序是一项重要任务。可以通过设置适当的键比较逻辑来自定义排序顺序。 ```java public static class SortMapper extends Mapper<LongWritable, Text, CustomKey, NullWritable> {...} public static class SortReducer extends IdentityReducer<CustomKey,NullWritable>{...} ``` 其中`CustomKey`应该继承于`WritableComparable<T>`接口并重写其compareTo方法以便支持自定义排序规则。 #### 5. 统计分析 (Statistical Analysis) 利用MapReduce框架来进行一些基本的概率分布估计或其他形式的统计学研究也是可行的;例如估算泊松分布参数λ或构建直方图等。 ```java public static class StatisticMapper extends Mapper<LongWritable, Text, Text, LongWritable> {...} public static class StatisticReducer extends Reducer<Text, LongWritable, Text, LongWritable> {...} ``` 这些组件可以根据具体应用场景调整内部算法细节以适应不同的统计模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值