基于MapReduce的手机上网流量统计分析

2023-11-11

Hadoop简介:适合大数据的分布式存储与计算平台。
运行在Hadoop之上的大型服务器集群:
这里写图片描述
数据情况:(摘取部分)
这里写图片描述
字段描述:时间戳、手机号码、AP mac、AP mac、访问的网址、网址种类、上行数据包、下行数据包、流量、访问状态。
手机上网流量统计结果:(先展示统计部分结果)
这里写图片描述
MapReduce程序开发步骤:
1、maper函数的编写
2、reducer函数的编写
3、MapReduce程序驱动的编写
mapper函数、reducer函数、驱动具体编写步骤:
map函数编写的基本原则是:MapReduce每读一行文本就调用一次我们的map函数,拿到日志中的一行数据,切分各个字段,从中抽选出我们需要的字段.然后封装成键值对进行处理.简单来说map函数的逻辑就是读行局部处理.

reduce函数编写的基本原则是MapReduce每传递一组数据


package IT;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class FlowCount  extends Configured implements Tool
{
        public static String path1="";
        public static String path2="";
        public int run(String[] arg0) throws Exception
        {
            path1=arg0[0];
            path2=arg0[1];
            Job job = new Job(new Configuration(),"FlowCount");
            job.setJarByClass(FlowCount.class);//jar包
            //编写驱动
            FileInputFormat.setInputPaths(job, new Path(path1));
            job.setInputFormatClass(TextInputFormat.class);
            job.setMapperClass(MyMapper.class);
            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(LongWritable.class);
            job.setNumReduceTasks(1);
            job.setPartitionerClass(HashPartitioner.class);
            job.setReducerClass(MyReducer.class);
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(LongWritable.class);
            FileOutputFormat.setOutputPath(job, new Path(path2));
            job.setOutputFormatClass(TextOutputFormat.class);
            //向yarn平台提交任务
            job.waitForCompletion(true);
            return 0;
        }
        public static void main(String[] args) throws Exception
        {
            ToolRunner.run(new FlowCount(), args);
        }
       public static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable>
       {
            protected void map(LongWritable k1, Text v1,Context context)throws IOException, InterruptedException
            {
                 String[] splited = v1.toString().split("\t");
                 String str1 = splited[1];//获取手机号
                 String str2 = splited[8];//获取单行流量
                 Text k2 = new Text(str1);
                 LongWritable v2 =  new LongWritable(Long.parseLong(str2));
                 context.write(k2, v2);
            }
       }
       public static class MyReducer extends Reducer<Text, LongWritable, Text, LongWritable>
       {
            protected void reduce(Text k2, Iterable<LongWritable> v2s,Context context)throws IOException, InterruptedException
            {
                long sum = 0L; 
                for (LongWritable v2 : v2s)
                {
                     sum +=v2.get();
                }
                Text k3 = k2;
                LongWritable v3 =  new LongWritable(sum);
                context.write(k3, v3);
            }
       }
}

2、导出jar包
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
最终通过eclipse导出jar包:
这里写图片描述
3、在linux文件系统中通过shell命令将流量数据上传到HDFS中
这里写图片描述
4、在linux中运行jar包,即运行MapReduce程序
这里写图片描述
5、MapReduce程序运行完之后核实内置计数器进行校验
这里写图片描述
6、通过shell命令查看运行结果
这里写图片描述
综上:当给定我们一个业务后,如何用MapReduce实现某个业务?
1>给的原始数据相当于告诉了我们键值对

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于MapReduce的手机上网流量统计分析 的相关文章

随机推荐

  • 魔方机器人之结构篇

    魔方颜色识别和魔方复原算法以及串口通信都解决完了 感觉自己该松口气了吧 结构可以反正仿照别人的来嘛 做出来就的了 事实又打了我一耳光 我怎么发现我的预判总是那么的不靠谱 总结就是自己没做过的东西再也不要说很简单了 即使看上去简单的再也不能简
  • 5-8 以特殊方式跟管理员打招呼

    创建一个至少包含5个用户名的列表 且其中一个用户名为 admin 想象你要编写代码 在每位用户登录网站后都打印一条问候消息 遍历用户名列表 并向每位用户打印一条问候消息 如果用户名为 admin 就打印一条特殊的问候消息 如 Hello a
  • 使用EasyExcel实现导入导出功能

    使用EasyExcel实现导入导出功能 一 导出 1 使用ideal新建一个maven项目 并在pom xml文件中引入EasyExcel依赖
  • impala 错误

    问题一 impala state store unrecognized service 原因 当前节点未成功安装impala server impala state store impala catalog 解决方案 yum install
  • ulua源码分析

    对于NestClass的Type 用了2次被Cache了两次 主要是因为PushType这个函数 对每个Type对象 不进行Cache检测 总是push一个新的proxy对象
  • 蓝桥杯省赛2021 括号序列 python

    给定一个括号序列 要求尽可能少地添加若干括号使得括号序列变得合法 当添加完成后 会产生不同的添加结果 请问有多少种本质不同的添加结果 两个结果是本质不同的是指存在某个位置一个结果是左括号 而另一个是右括号 例如 对于括号序列 只需要添加两个
  • MQTT:用Mosquitto搭建轻量级的设备接入网关

    开发部署在云端的设备接入网关服务就不得不提到MQTT 使用MQTT不论是从设备到设备 还是设备到云端服务的双向通讯 都可以获得较好的支持 MQTT的起源和我的理解 用tcpdump分析下MQTT的通讯时序 这里基于mosquitto 以一组
  • One PUNCH Man——半监督学习

    文章目录 半监督学习介绍 半监督SVM 基于分歧的方法 半监督学习介绍 我们在丰收的季节来到瓜田 满地都是西瓜 瓜农抱来四个西瓜说这都是好瓜 然后指着地里面六个瓜说这些不好 还需要再生长几天 基于这些信息 我们能否构建一个模型 用于判别地里
  • 优雅的玩转Fast-DDS

    优雅的玩转Fast DDS 安装依赖 sudo apt install cmake g python3 pip wget git pip3 install U colcon common extensions vcstool Fast DD
  • Web开发权威指南笔记(二)

    书 Web开发权威指南 美 Chris Aquino Todd Gandee著 为2nd实战项目CoffeeRun练习以及代码整理 全为个人借鉴本书产出 若需要转载请联系通知我 请尊重原创 谢谢 整理了大概5天了 内容比较多 很多重点都整理
  • mysql区别

    mysql区别 5 0之后与5 0之前 mysql5 0以及5 0以上的版本都存在一个系统自带的系统数据库 是information schema 而5 0之前的版本不存在且5 0以下的版本是多用户单操作 information schem
  • 如何创建NFT-独家设计

    如何创建NFT 第一步 下载并安装 MetaMask小狐狸钱包 第二步 打开官网https opensea io 点击右上角的钱包标志 进行链接 第三步 右上角弹出钱包提示 点击下一步就成功了 第四步 回到首页 点击create按钮 进入创
  • feign使用注意

    参数使用注意 参数name value属性 这两个的作用是一样的 指定的是调用服务的微服务名称 参数url 指定调用服务的全路径 经常用于本地测试 如果同时指定name和url属性 则以url属性为准 name属性指定的值便当做客户端的名称
  • c#正确用smtp.office365.com发邮件

  • Python自动化测试Unittest框架基本使用

    Unittest 框架 首先要知道这个框架是Python自带的 不需要安装 这个框架最重要的4 个核心 TestCase TestSuite TextTestRunner Fixture TestCase 个人总结一下 这个就是用测试用例继
  • SpringCloud与SpringBoot的版本对应关系

    在SpringCloud官网 https spring io projects spring cloud 可以看到 当前 2021年11月 SpringCloud的最新GA版本是2020 0 4这一版 除了2020 0 X版本外 Sprin
  • 基于掌控板+二哈+TinyWebDB+Easy_IoT的人脸识别测温

    文章目录 前言 一 部分硬件及平台介绍 1 二哈识图 HuskyLens 2 TinyWebDB 3 Easy IoT 二 操作步骤 1 二哈的使用 2 TinyWebDB的使用 3 Easy IoT的使用 三 硬件连接 四 图形化代码编写
  • jdk8 免登录安装

    1 注册一大堆 麻烦死了 程序员怎么可能做被迫的事情 2 复制下载链接https www oracle com webapps redirect signon nexturl https download oracle com otn ja
  • 解析目标文件

    最近在看 程序员的自我修养 颇有体会 故化繁为简 整理书中部分内容 作为学习笔记 PC平台上流行的可执行文件格式主要是windows下的PE Portable Executable 和Linux下的ELF Executable Linkab
  • 基于MapReduce的手机上网流量统计分析

    Hadoop简介 适合大数据的分布式存储与计算平台 运行在Hadoop之上的大型服务器集群 数据情况 摘取部分 字段描述 时间戳 手机号码 AP mac AP mac 访问的网址 网址种类 上行数据包 下行数据包 流量 访问状态 手机上网流