Mapreduce实例(三):求平均值

本文详细介绍了在Linux环境下,使用Hadoop MapReduce计算电商商品平均点击次数的步骤。通过创建Java项目,编写Mapper和Reducer代码,实现数据处理,并在Hadoop集群上运行。最终在HDFS上查看实验结果。
摘要由CSDN通过智能技术生成

系统环境

Linux Ubuntu 16.04

jdk-7u75-linux-x64

hadoop-2.6.0-cdh5.4.5

hadoop-2.6.0-eclipse-cdh5.4.5.jar

eclipse-java-juno-SR2-linux-gtk-x86_64

相关知识

求平均数是MapReduce比较常见的算法,求平均数的算法也比较简单,一种思路是Map端读取数据,在数据输入到Reduce之前先经过shuffle,将map函数输出的key值相同的所有的value值形成一个集合value-list,然后将输入到Reduce端,Reduce端汇总并且统计记录数,然后作商即可。具体原理如下图所示:
在这里插入图片描述

任务内容

现有某电商关于商品点击情况的数据文件,表名为goods_click,包含两个字段(商品分类,商品点击次数),分隔符“\t”,由于数据很大,所以为了方便统计我们只截取它的一部分数据,内容如下:

商品分类 商品点击次数
52127	5
52120	93
52092	93
52132	38
52006	462
52109	28
52109	43
52132	0
52132	34
52132	9
52132	30
52132	45
52132	24
52009	2615
52132	25
52090	13
52132	6
52136	0
52090	10
52024	347

要求使用mapreduce统计出每类商品的平均点击次数。

结果数据如下:

商品分类 商品平均点击次数
52006	462
52009	2615
52024	347
52090	11
52092	93
52109	35
52120	93
52127	5
52132	23
52136	0

任务步骤

1.切换到/apps/hadoop/sbin目录下,开启Hadoop。

cd /apps/hadoop/sbin  
./start-all.sh  

2.在Linux本地新建/data/mapreduce4目录。

mkdir -p /data/mapreduce4  

3.在Linux中切换到/data/mapreduce4目录下,用wget命令从http://192.168.1.100:60000/allfiles/mapreduce4/goods_click网址上下载文本文件goods_click。

cd /data/mapreduce4
wget http://192.168.1.100:60000/allfiles/mapreduce4/goods_click

然后在当前目录下用wget命令从http://192.168.1.100:60000/allfiles/mapreduce4/hadoop2lib.tar.gz网址上下载项目用到的依赖包。

wget http://192.168.1.100:60000/allfiles/mapreduce4/hadoop2lib.tar.gz

将hadoop2lib.tar.gz解压到当前目录下。

tar zxvf hadoop2lib.tar.gz  

4.首先在HDFS上新建/mymapreduce4/in目录,然后将Linux本地/data/mapreduce4目录下的goods_click文件导入到HDFS的/mymapreduce4/in目录中。

hadoop fs -mkdir -p /mymapreduce4/in
hadoop fs -put /data/mapreduce4/goods_click /mymapreduce4/in

5.新建Java Project项目,项目名为mapreduce4
在这里插入图片描述
在mapreduce4项目下新建包,包名为mapreduce,在mapreduce包下新建类,类名为MyAverage。
在这里插入图片描述
6.添加项目所需依赖的jar包,右键点击mapreduce4,新建一个文件夹,名为hadoop2lib,用于存放项目所需的jar包。
在这里插入图片描述
将/data/mapreduce4目录下,hadoop2lib目录中的jar包,拷贝到eclipse中mapreduce4项目的hadoop2lib目录下,选中hadoop2lib目录下所有jar包,并添加到Build Path中。
在这里插入图片描述
7.编写Java代码并描述其设计思路。

Mapper代码

public static class Map extends Mapper<Object , Text , Text , IntWritable>{
   
    private static Text newKey=new Text();
    //实现map函数
    public void map(Object key,Text value,Context context) throws IOException, InterruptedException{
   
    // 将输入的纯文本文件的数据转化成String
    String line=value.toString();
    System
  • 4
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值