栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

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

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

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

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

第二篇:对清洗后的数据进行统计求和处理操作,对id进行升序排序打印结果

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

目录

一、流程介绍

二、创建Maven工程项目

(1)创建Maven

(2)添加依赖

三、编写MapReduce程序

(1)Map类

(2)主类(入口类)

四、编译打包成Jar包上传

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

五、执行Jar包程序

Gitee仓库Hadoop项目下载地址



前言

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


一、流程介绍

原始数据集如下

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


二、创建Maven工程项目


(1)创建Maven

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

添加项目名称,点击完成

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

(2)添加依赖

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


        
        
            org.apache.hadoop
            hadoop-common
            3.3.1
        
        
            org.apache.hadoop
            hadoop-hdfs
            3.3.1
        
        
            org.apache.hadoop
            hadoop-client
            3.3.1
        
        
            junit
            junit
            4.12
        
    
    
        
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    6
                    6
                
            
        
    

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


三、编写MapReduce程序

(1)Map类

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

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

public class DataCleanMap extends Mapper {
    @Override
    protected 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数据

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);
}

(2)主类(入口类)

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

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

// 运行程序指令输入错误,直接退出程序
if (args.length != 2) {
    System.exit(100);
}
Configuration conf = new Configuration(); //job需要的配置参数
Job job = Job.getInstance(conf); //创建一个job
job.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表示禁用reduce
job.setNumReduceTasks(0);
//提交作业job
job.waitForCompletion(true);

四、编译打包成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.jarjar包名称
DataCleanJob 主类(入口类)类名
/zhubo/data/输入路径(数据所在目录)
/zhubo/resultClean/输出路径(必须不存在的文件夹)
hadoop jar zhuboClean.jar DataCleanJob /zhubo/data/ /zhubo/resultClean/
运行结束后,刷新浏览器,在输出路径可以看到一个结果文件,点击下载


以记事本打开,统计成功

Gitee仓库Hadoop项目下载地址

Gitee仓库地址:Hadoop实战项目源码集合: https://blog.csdn.net/weixin_47971206CSDN文章教学中的源码汇总集合

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/600933.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号