【大数据存储】实验五: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目录已存在已有内容,需要进行删除再运行。

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

相关推荐
viperrrrrrrrrr729 分钟前
大数据学习(131)-Hive数据分析函数总结
大数据·hive·学习
lifallen1 小时前
Flink checkpoint
java·大数据·算法·flink
Leo.yuan3 小时前
API是什么意思?如何实现开放API?
大数据·运维·数据仓库·人工智能·信息可视化
禺垣4 小时前
知识图谱技术概述
大数据·人工智能·深度学习·知识图谱
后端码匠4 小时前
Spark 单机模式部署与启动
大数据·分布式·spark
疯狂的沙粒6 小时前
如何通过git命令查看项目连接的仓库地址?
大数据·git·elasticsearch
随缘而动,随遇而安6 小时前
第七十四篇 高并发场景下的Java并发容器:用生活案例讲透技术原理
java·大数据·后端
凯禾瑞华实训室建设6 小时前
老年生活照护实训室建设规划:照护质量评估与持续改进实训体系
大数据·人工智能·物联网·ar·vr
静听山水6 小时前
DTS 数据迁移
大数据
科技资讯快报6 小时前
告别Prompt依赖,容联云让智能体嵌入金融业务流
大数据·人工智能·prompt