【大数据存储】实验五: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(arr1));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(arr0);设置第一列为key,即商品类别为key

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

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

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

REDUCE

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

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

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

运行查看结果

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

遇到的困难和解决方法:

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

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

相关推荐
注塑机数据采集联网6 分钟前
数据采集网关入门:ZK-D1/D3从零开始构建你的数据运用
大数据·数据仓库·人工智能·物联网·数据库架构·注塑机网关
演艺大赏7 分钟前
20000 个文件跑了 11500 秒:你压的是 YARN 调度器,不是 HDFS
大数据
wtblszn1 小时前
农村供水站远程监控智能管理方案
大数据
aixingkong9212 小时前
华为灵衢超节点参考架构白皮书深度解读
大数据·人工智能·华为
大大大大晴天3 小时前
每天认识一个组件:Apache Iceberg
大数据
xiaoyunxuexibiji4 小时前
采购协同管理:从备货计划、进度确认到到货签收
大数据·运维·人工智能
2601_957875205 小时前
华立科技荣获环球品牌与合作(大中华区)年度“最佳街机游戏合作伙伴”
大数据·科技·游戏
BJ_Bonree6 小时前
聊点技术 | Bonree ONE 业务链路观测实战 支付成功率下降,问题究竟出在哪一环?
大数据·人工智能
IT研究室6 小时前
最新大数据毕业设计选题推荐-基于大数据的Kaggle竞赛团队协作模式与效能可视化分析-大数据-Spark-Hadoop-Bigdata
大数据·spark·课程设计