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

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

相关推荐
Elastic 中国社区官方博客14 小时前
Prometheus Remote Write 在 Elasticsearch 中的摄取原理
大数据·数据库·elasticsearch·搜索引擎·信息可视化·全文检索·prometheus
深圳市九鼎创展科技1 天前
MT8883 vs RK3588 开发板全面对比:选型与场景落地指南
大数据·linux·人工智能·嵌入式硬件·ubuntu
渣渣盟1 天前
Flink事件时间与窗口操作实战指南
大数据·flink·scala
Yyyyy123jsjs1 天前
如何选用外汇接口实现稳定数据抓取?
大数据·python·金融
孟意昶1 天前
Doris专题31-SQL手册-基础元素
大数据·数据库·数据仓库·分布式·sql·知识图谱·doris
飞飞传输1 天前
国产化FTP替代方案哪个好?选对平台让传输更安全高效
大数据·运维·安全
2501_933329551 天前
企业舆情处置实战:Infoseek数字公关AI中台技术架构与功能解析
大数据·人工智能·架构·数据库开发
编程迪1 天前
基于Java和Vue开发的剪辑接单小程序APP软件系统源码
大数据
551只玄猫1 天前
【模块1 建立认知2】金融数据的类型与获取方式(附实战)
大数据·金融·数据科学·数据处理
亿信华辰软件1 天前
从单业态到多业态:主数据管理的策略、架构与实践
大数据