【大数据存储】实验五:Mapreduce

实验 Mapreduce实例------排序(补充程序)

实验环境

Linux Ubuntu 16.04

jdk-8u191-linux-x64

hadoop-3.0.0

hadoop-eclipse-plugin-2.7.3.jar

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

实验内容

在电商网站上,当我们进入某电商页面里浏览商品时,就会产生用户对商品访问情况的数据 ,名为goods_visit1,goods_visit1中包含(商品id ,点击次数)两个字段,内容以"\t"分割,由于数据量很大,所以为了方便统计我们只截取它的一部分数据,内容如下:

  1. 商品id 点击次数
  2. 1010037 100
  3. 1010102 100
  4. 1010152 97
  5. 1010178 96
  6. 1010280 104
  7. 1010320 103
  8. 1010510 104
  9. 1010603 96
  10. 1010637 97
要求我们编写mapreduce程序来对商品点击次数有低到高进行排序。
实验步骤

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

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

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

  1. 在Linux中切换到/data/mapreduce3目录下,用wget命令从http://10.2.208.188:60000/allfiles/mapreduce3/goods_visit1网址上下载文本文件goods_visit1。

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

然后在当前目录下用wget命令从http://10.2.208.188:60000/allfiles/mapreduce3/hadoop2lib.tar.gz网址上下载项目用到的依赖包。![](https://file.jishuzhan.net/article/1776925285787111426/87582c01a229ee6bee36155defab18a1.webp)

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

首先在HDFS上新建/mymapreduce3/in目录,然后将Linux本地/data/mapreduce3目录下的goods_visit1文件导入到HDFS的/mymapreduce3/in目录中。

  1. 项目jar包等已就绪

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

6.填充

Map

num.set(Integer.parseInt(arr[1]));num为获取的第一列,并且设置为整形

goods.set(arr[θ]);Goods为商品名,是获取的第零列

context.write(num,goods);写入设置数量为key,商品名为value,因为后续要按照数量key排序

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

Reduce

就直接填写key value就好

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

Main

写入路径为hdfs路径下所创的数据goods_visit1,输出路径也要记得改成相应创造的mapreduce3工作目录下的out

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

运行查看结果

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

实验 Mapreduce实例------ 平均数 (补充程序)

实验环境

Linux Ubuntu 16.04

jdk-8u191-linux-x64

hadoop-3.0.0

hadoop-eclipse-plugin-2.7.3.jar

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

实验内容

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

商品分类 商品点击次数

  1. 52127 5
  2. 52120 93
  3. 52092 93
  4. 52132 38
  5. 52006 462
  6. 52109 28
  7. 52109 43
  8. 52132 0
  9. 52132 34
  10. 52132 9
  11. 52132 30
  12. 52132 45
  13. 52132 24
  14. 52009 2615
  15. 52132 25
  16. 52090 13
  17. 52132 6
  18. 52136 0
  19. 52090 10
  20. 52024 347
要求使用mapreduce统计出每类商品的平均点击次数
实验步骤

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

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

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

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

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

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

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

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

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

  1. 首先在HDFS上新建/mymapreduce3/in目录,然后将Linux本地/data/mapreduce3目录下的goods_visit1文件导入到HDFS的/mymapreduce3/in目录中。

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

  1. 项目jar包等已就绪
  1. 填充语句

Map

String line=value.toString();保证数据都是string型

String arr[]=line.split("\t");按\t拆分

newkey.set(arr[0]);设置第一列为key,即商品类别为key

Intwritable num=new Intwritable();新建可写入的整型,便于后续记录次数的

num.set(Integer.parseInt(arr[1]));设置第一列为values,即点击次数context.write(newKey,num);

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

REDUCE

使用val.get()数值加入n中即总次数,然后除以个数,得到均值

新建一个工作任务,使用map和reduce等类,值得注意的是输出的key为商品类别,是text类型,而输出平均值是可写的整型,然后写入路径为hdfs路径下所创的数据goods_click,输出路径也要记得改成相应创造的mapreduce工作目录下的out

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

运行查看结果

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

遇到的困难和解决方法:

如图所示输出的key和value写反导致不输出内容并再次运行会报错out目录已存在已有内容,需要进行删除再运行。

|---|---------------------------------------------------------------------------------------------------|
| |
| | |

相关推荐
Meya11271 小时前
别再人工硬扛机房管理!智能 U 位系统,让机房管理一键数字化
大数据·运维
天辛大师2 小时前
天辛大师谈人工智能时代,如何用AI研究历代放生劝善忏悔文
大数据·人工智能·随机森林·启发式算法
为儿打call2 小时前
SparkSQL 广播超时排查:小表但是多分区 = BroadcastTimeout
大数据·spark
eastyuxiao2 小时前
如何用思维导图拆解项目范围
大数据·人工智能·流程图
渣渣盟2 小时前
Apache Flink物理分区算子全解析
大数据·flink·apache
小王毕业啦3 小时前
(1990-2024年)个股交易活跃度、个股换手率
大数据·人工智能·数据挖掘·数据分析·区块链·社科数据
N串3 小时前
2.7 公司内部的“阶级”是什么
大数据·人工智能
lizhihai_994 小时前
股市学习心得—商业航天10大核心材料供应商
大数据·人工智能·学习
app软件定制开发173770910725 小时前
世界杯应用开发的关键要点与注意事项
大数据·区块链
数智联AI团队5 小时前
AI员工时代已来:企业如何选择靠谱的“AI团队”实现降本增效?
大数据·人工智能