本次实战项目一共分三篇教学(二三篇后续更新)

第一篇:对主播文本数据的清洗,从大量数据中获取我们所需要的数据(如播放量,时长等)

第二篇:对清洗后的数据进行统计求和处理操作,按照主播id号依次整齐显示

第三篇:对统计好的数据进行TopN展示的操作,排序规则可自定义(如播放量,分数数量),N的大小也可以自定义

更多MapReduce设计案例地址:https://github.com/yuanprogrammer/MapReduce-Case-Statistics

目录

一、流程介绍

二、创建Maven工程项目

(1)创建Maven

(2)添加依赖

三、编写MapReduce程序

(1)Map类

(2)主类(入口类)

四、编译打包成Jar包上传

五、原始数据上传到HDFS文件系统

五、执行Jar包程序

Gitee仓库Hadoop项目下载地址


前言

大数据时代越来越多的数据,我们怎么才能从大量数据中提取有价值的数据呢,同时这么多的数据我们该如何编写有效快速的程序进行获取

一、流程介绍

原始数据集如下

第一章的教学只涉及到数据的清洗和获取,所以只有Map,没有Reduce(统计的时候才需要),大致过程如图

二、创建Maven工程项目

(1)创建Maven

打开IDAD,新建一个项目,选择Maven,点击下一步

添加项目名称,点击完成

创建之后,右下角会弹出提示,选择Auto自动导入依赖

(2)添加依赖

编辑pom.xml配置文件,添加如下内容,等待自动导入完成

<dependencies><!-- Hadoop相关依赖包--><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.3.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.3.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.3.1</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies><build><plugins><!-- 打包编译的插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>6</source><target>6</target></configuration></plugin></plugins></build>

一个基本的Hadoop的Maven工程项目就创建完毕了

三、编写MapReduce程序

(1)Map类

map类的作用是对原始数据的清洗操作,解析JSON格式的数据,获取我们所需要的数据

在java目录下新建一个DataCleanMap类,继承Mapper类,复写map方法

public class DataCleanMap extends Mapper<LongWritable, Text, Text, Text> {@Overrideprotected void map(LongWritable k1, Text v1, Context context) throws IOException, InterruptedException {}
}

在map方法里,解析JSON数据,读取数据

String line = v1.toString();//获取每一行内容
JSONObject  jsonObj = new JSONObject(line); //将字符串转换为JSON格式
String id = jsonObj.getString("uid"); //获取主播的id数据
/*** 获取主播的其他数据* gold-------->>金币* watchnumpv-->>播放量* follower---->>粉丝* length------>>开播时长*/
int gold = jsonObj.getInt("gold");
int watchnumpv = jsonObj.getInt("watchnumpv");
int follower = jsonObj.getInt("follower");
int length = jsonObj.getInt("length");

过滤掉异常的数据(如<0的数据等),最后封装到上下文中

if (gold >= 0 && watchnumpv >= 0 && follower >= 0 && length >= 0) {// 封装数据到Text中,最后写入context上下文中Text k2 = new Text();k2.set(id);Text v2 = new Text();v2.set(gold + "\t" + watchnumpv + "\t" + follower + "\t" + length);context.write(k2, v2);
}

汇总

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;import java.io.IOException;/*** FileName:    DataCleanMap* Author:      Yuan-Programmer* Date:        2021/11/23 9:32* Description: 数据清洗类,对大量的数据进行清洗,读取我们所需要的数据*/
public class DataCleanMap extends Mapper<LongWritable, Text, Text, Text> {@Overrideprotected void map(LongWritable k1, Text v1, Context context) throws IOException, InterruptedException {try {String line = v1.toString();//获取每一行内容JSONObject jsonObj = new JSONObject(line); //将字符串转换为JSON格式String id = jsonObj.getString("uid"); //获取主播的id数据/*** 获取主播的其他数据* gold-------->>金币* watchnumpv-->>播放量* follower---->>粉丝* length------>>开播时长*/int gold = jsonObj.getInt("gold");int watchnumpv = jsonObj.getInt("watchnumpv");int follower = jsonObj.getInt("follower");int length = jsonObj.getInt("length");// 过滤掉异常数据(如播放量<0等这些)if (gold >= 0 && watchnumpv >= 0 && follower >= 0 && length >= 0) {// 封装数据到Text中,最后写入context上下文中Text k2 = new Text();k2.set(id);Text v2 = new Text();v2.set(gold + "\t" + watchnumpv + "\t" + follower + "\t" + length);context.write(k2, v2);}} catch (JSONException e) {e.printStackTrace();}}
}

(2)主类(入口类)

相当于一个程序的主函数,最先开始执行的地方

在java目录下新建一个DataCleanJob类,在主函数设置Job作业的参数信息

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;/*** FileName:    DataCleanJob* Author:      Yuan-Programmer* Date:        2021/11/23 10:16* Description: 入口类(也叫主类)*/
public class DataCleanJob {public static void main(String[] args) {try {// 运行程序指令输入错误,直接退出程序if (args.length != 2) {System.exit(100);}Configuration conf = new Configuration(); //job需要的配置参数Job job = Job.getInstance(conf); //创建一个jobjob.setJarByClass(DataCleanJob.class);FileInputFormat.setInputPaths(job, new Path(args[0]));//指定输入路径(可以是文件,也可以是目录)FileOutputFormat.setOutputPath(job, new Path(args[1])); //指定输出路径(只能是指定一个不存在的目录)//指定map相关代码job.setMapperClass(DataCleanMap.class);//指定K2的类型job.setMapOutputKeyClass(Text.class);//指定v2的类型job.setMapOutputValueClass(Text.class);//设置reduce的数量,0表示禁用reducejob.setNumReduceTasks(0);//提交作业jobjob.waitForCompletion(true);} catch (Exception e) {e.printStackTrace();}}
}

四、编译打包成Jar包上传

展开右侧的Mavan,双击clean清理一下,再双击package生成jar包

这时在项目目录会多了一个target的文件夹,下面就有一个jar包程序,右键复制,粘贴到桌面

打开winscp工具,连接自己的虚拟机,将jar包拷贝到虚拟机里(前提要打开虚拟机)

五、原始数据上传到HDFS文件系统

准备数据集,数据集我已经放在底部gitee仓库里了

同样的,将数据集拷贝到虚拟机里

打开主节点虚拟机,start-all一键启动hadoop集群服务

跳转到刚刚拷贝的目录下,查看文件

先在HDFS文件系统创建一个文件夹,用来存放数据,在虚拟机输入指令

[root@hadoop01 data]# hadoop fs -mkdir -p /zhubo/data/

接着输入指令将数据拷贝到HDFS的zhubo文件下的data文件夹下(路径可以自己选,前提要和上一步一样创建文件夹)

[root@hadoop01 data]# hadoop fs -put video_rating.log /zhubo/data/

刷新浏览器,成功拷贝上来了

五、执行Jar包程序

在虚拟机中输入运行指令

zhuboClean.jar jar包名称
DataCleanJob  主类(入口类)类名
/zhubo/data/ 输入路径(数据所在目录)
/zhubo/resultClean/ 输出路径(必须不存在的文件夹)
hadoop jar zhuboClean.jar DataCleanJob /zhubo/data/ /zhubo/resultClean/

运行结束后,刷新浏览器,在输出路径可以看到一个结果文件,点击下载

以记事本打开,统计成功

Gitee仓库Hadoop项目下载地址

Gitee仓库地址:https://gitee.com/yuandewei/HadoopProject

其他系列技术教学、实战开发

各大技术基础教学、实战开发教学(最新更新时间2021-11-28)

Hadoop实战——MapReduce实现主播的播放量等数据的统计及TopN排序(第一篇)相关推荐

  1. Hadoop实战——MapReduce对英文单词文本进行统计和排序(超详细教学,算法分析)

    B站视频操作过程 Hadoop实战--对单词文本进行统计和排序_哔哩哔哩_bilibili 更多MapReduce设计案例地址 https://github.com/yuanprogrammer/Ma ...

  2. Hadoop之MapReduce程序应用一读取专利引用数据集并对它进行倒排

    摘要:MapReduce程序处理专利数据集. 关键词:MapReduce程序   专利数据集 数据源:专利引用数据集cite75_99.txt.(该数据集可以从网址http://www.nber.or ...

  3. android 盒子 airplay,iOS Airplay--Airtunes音乐播放在Android盒子和手机上的实现 (第一篇)...

    一.前言 在局域网中实现流媒体的播放有2种主要方式,Airplay和DLNA.对于iOS系统,天生带了Airplay,但可惜是苹果秉承一贯的作风,Airplay是一个闭源协议.万幸有大神逆向了协议内容 ...

  4. Hadoop实战-MR倒排索引(三)

    场景描述 通过切入具体示例代码,解决问题,从而积累 Hadoop 实战经验. 倒排索引,源于实际应用中需要根据属性的值来查找记录,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表. 实验数据 ...

  5. “梗文化”盛产2000w+播放,快手主播又多一个出圈技能?

    如今梗文化早已渗透进各大社交媒体平台,成为网络冲浪爱好者必不可少的互动方式,同时重塑了新型互联网文化景观. 在快手,有位主播正是通过玩梗,并利用剪切.拼接.复制的各种手法,在15天内涨粉近14万.成功 ...

  6. 游戏主播这个行为终于有人治了!腾讯下“禁令”

    腾讯游戏安全中心近日发布<腾讯游戏主播游戏安全管理规范>,其中提到,当被举报主播确认有使用其他第三方作弊工具的,主播直播的作弊帐号会被永久封禁. 此外,还将会根据情节严重程度对违规主播采取 ...

  7. gpg: 找不到有效的 openpgp 数据。_萤火数据|找主播堪比相亲找对象,该如何避免心酸血泪史?...

    "找主播太难了,刚入淘啥都不懂,前不久刚找x明星直播带货,结果被割韭菜." "打死再也不找付费主播了,可纯佣主播又卖不出货,样品钱都没赚回来." "现 ...

  8. Python爬虫:爬了7天的斗鱼,我们来看一下主播们的真实现状

    2019年7月17日游戏直播平台斗鱼在美国纳斯达克股票交易所成功上市,成为继虎牙直播之后第二家赴美上市的国内直播平台. 7月底斗鱼因为平台主播"乔碧萝殿下"事件再次被推上热搜.惊呆 ...

  9. 直播行业的梦幻泡影:主播们的数据人生

    2020年,风口之上的直播行业成为了众人关注的焦点,千亿的市场规模引来无数企业和个人踏破门槛.然而,在人们看到直播行业光鲜的一面的同时,相关的问题也逐一浮出水面. 在直播行业爆出的各种问题中,平台数据 ...

最新文章

  1. python第一堂课
  2. factorytalkview 卡 86_徕卡M党的街拍小贴士
  3. html中嵌入iframe进行父子页面参数传递
  4. iis6上安装PHP5.3.2及连接到SQL Server 2005/2008的设置(原创)
  5. Taro+react开发(78):taro生命周期render
  6. java调用方法出现i 2a_性能-Java方法调用与使用变量
  7. html回车完成修改,后续段落样式 WORD回车后格式自动改变
  8. 安卓rom制作教程_刹那 刷机教程20-1三星S10N10等系列韩版国行安卓9升级10详细步骤...
  9. php电子病历毕业设计,电子病历管理系统的设计毕业论文.doc
  10. php架构师之路2017半年精选40篇
  11. 开票服务器系统是否可以抵扣,开票系统服务费抵扣的账务处理
  12. (附源码)springboot菠萝大学课室预约系统分析与设 毕业设计 641656
  13. 第四讲 比值、根值和积分审敛法
  14. App逆向案例 X嘟牛 - Frida监听 WT-JS工具还原(一)
  15. 微信头像失效_微信头像地址失效踩坑记附带方案
  16. Python Web项目
  17. 使用宏模拟offsetof
  18. 文件查找(c语言 findfirst函数,findnext函数)
  19. 微信读书项目记录(1)
  20. 单例模式-DoubleCheck

热门文章

  1. 五百年春光明媚之重建亚历山大图书馆谭
  2. Android 11 WiFi开启流程
  3. 【笔记】——MySQL数据库——基础知识-——快速回顾——(加深印象篇)
  4. Cocos2d-x3.8.1制作愤怒的小鸟
  5. 办公室面积增大,实现wifi覆盖的解决方案
  6. openresty mysql 批量_OpenResty负载均衡MySQL
  7. HTML5 实现动态爱心网页代码
  8. 使用循环语句打印菱形梅花阵
  9. 认识单元测试中的打桩
  10. Dataguru(炼数成金)培训优惠码分享