Mapreduce中的排序初步
4.1.1 需求
对日志数据中的上下行流量信息汇总,并输出按照总流量倒序排序的结果
数据如下:
1363157985066 13726230503 00-FD-07-A4-72-B8:CMCC 120.196.100.82 24 27 2481 24681 200
1363157995052 13826544101 5C-0E-8B-C7-F1-E0:CMCC 120.197.40.4 4 0 264 0 200
1363157991076 13926435656 20-10-7A-28-CC-0A:CMCC 120.196.100.99 2 4 132 1512 200
1363154400022 13926251106 5C-0E-8B-8B-B1-50:CMCC 120.197.40.4 4 0 240 0 200

4.1.2 分析
基本思路:实现自定义的bean来封装流量信息,并将bean作为map输出的key来传输

MR程序在处理数据的过程中会对数据排序(map输出的kv对传输到reduce之前,会排序),排序的依据是map输出的key
所以,我们如果要实现自己需要的排序规则,则可以考虑将排序因素放到key中,让key实现接口:WritableComparable然后重写key的compareTo方法

4.1.3 实现
1、 自定义的bean
public class FlowBean implements WritableComparable{

long upflow;
long downflow;
long sumflow;//如果空参构造函数被覆盖,一定要显示定义一下,否则在反序列时会抛异常
public FlowBean(){}public FlowBean(long upflow, long downflow) {super();this.upflow = upflow;this.downflow = downflow;this.sumflow = upflow + downflow;
}public long getSumflow() {return sumflow;
}public void setSumflow(long sumflow) {this.sumflow = sumflow;
}public long getUpflow() {return upflow;
}
public void setUpflow(long upflow) {this.upflow = upflow;
}
public long getDownflow() {return downflow;
}
public void setDownflow(long downflow) {this.downflow = downflow;
}//序列化,将对象的字段信息写入输出流
@Override
public void write(DataOutput out) throws IOException {out.writeLong(upflow);out.writeLong(downflow);out.writeLong(sumflow);}//反序列化,从输入流中读取各个字段信息
@Override
public void readFields(DataInput in) throws IOException {upflow = in.readLong();downflow = in.readLong();sumflow = in.readLong();}@Override
public String toString() {return upflow + "\t" + downflow + "\t" + sumflow;
}
@Override
public int compareTo(FlowBean o) {//自定义倒序比较规则return sumflow > o.getSumflow() ? -1:1;
}

}

2、 mapper 和 reducer
public class FlowCount {

static class FlowCountMapper extends Mapper<LongWritable, Text, FlowBean,Text > {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString();String[] fields = line.split("\t");try {String phonenbr = fields[0];long upflow = Long.parseLong(fields[1]);long dflow = Long.parseLong(fields[2]);FlowBean flowBean = new FlowBean(upflow, dflow);context.write(flowBean,new Text(phonenbr));} catch (Exception e) {e.printStackTrace();}}}static class FlowCountReducer extends Reducer<FlowBean,Text,Text, FlowBean> {@Overrideprotected void reduce(FlowBean bean, Iterable<Text> phonenbr, Context context) throws IOException, InterruptedException {Text phoneNbr = phonenbr.iterator().next();context.write(phoneNbr, bean);}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(FlowCount.class);job.setMapperClass(FlowCountMapper.class);job.setReducerClass(FlowCountReducer.class);job.setMapOutputKeyClass(FlowBean.class);job.setMapOutputValueClass(Text.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(FlowBean.class);// job.setInputFormatClass(TextInputFormat.class);FileInputFormat.setInputPaths(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));job.waitForCompletion(true);}

}

mapreduce对日志数据上下行流量汇总相关推荐

  1. Android 定时获取上下行流量数据

    使用Service监听上下行流量数据 老样子,直接上东西 public class FlowService extends Service {private long mCurrentUP=0;//当 ...

  2. 表格数据上下行互换位置

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. ubantu 顶部显示上下行流量

    ubantu 如何做到 顶部显示上下行流量 文章目录 ubantu 如何做到 顶部显示上下行流量 前言 一.使用gnome插件 二.使用步骤 前言 `提示:类似与手机,我们上网可以开启自己的当前的实时 ...

  4. 利用MapReduce计算运营商上行下行流量

    上行下行流量统计 package cn.itcast.bigdata.mr.flowsum;import java.io.IOException;import org.apache.hadoop.co ...

  5. 【华为ICT大赛】华为云激活设备的方法以及数据上下行

    先展示一下没有激活的时候在线调试的状态 然后下面我将激活他,让他变为下面这个样子 官方教程 这里我从0演示一个产品的创建到MQTT.fx连接到云平台并且接收数据. 进入华为云平台控制台 然后开始创建一 ...

  6. WIFI和数据上下行在状态栏同时出现

    [功能说明]数据业务和wifi 共存是Google在Android8.1 上新增的特性. [功能路径]该功能默认开启,可通过如下路径更改状态:开发者选项->始终开启移动数据网络. [修改方案]如 ...

  7. 基于埋点日志数据的网络流量统计(网站总浏览量(PV)的统计)

    衡量网站流量一个最简单的指标,就是网站的页面浏览量(Page View,PV).用户每次打开一个页面便记录1次PV,多次打开同一页面则浏览量累计. 一般来说,PV与来访者的数量成正比,但是PV并不直接 ...

  8. 利用交换机分开上下行流量

    配置两台华为交换机,实现在拓扑中仅一个方向的流量通过LINUX网桥,PC-A(10.75.101.1)到PC-B(10.75.200.1)的流量经过LINUX网桥B,PC-B到PC-A的流量经过LIN ...

  9. 使用mapreduce进行流量汇总程序开发

    现有文件关于流量文件内容如下 1363157985066 13726230503 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 24 2 ...

  10. MapReduce算法(计算每个相同IMSI(国际移动用户标识)、TAC(跟踪区域码)的上行流量和,下行流量和,总流量和)

    需求: 计算每个相同IMSI(国际移动用户标识).TAC(跟踪区域码)的上行流量和,下行流量和,总流量和. 需求说明:将S1U数据里面的VOLUME字段(数据流量)和IMSI.TAC两个字段提取出来, ...

最新文章

  1. (深入理解)matplotlib的交互模式(block,interactive,ion,ioff,draw,show,plot等的区别)
  2. 天翼云从业认证(1.8)了解软件开发的环境、软件基础架构和常用软件开发工具
  3. 如何给5岁孩子解释DCT?
  4. linux 基准测试_如何对Linux系统进行基准测试:3个开源基准测试工具
  5. 【数据结构与算法】快排、归并 O(nlogn) 基于比较
  6. c++网络编程连接成功后回调onconnected_谈谈网络编程(基于C++)
  7. JAVA Swing GUI设计 WindowBuilder Pro Container使用大全4——JSplitPane使用
  8. R文件报错:cannot resolve symbol ‘R’
  9. xv6 - simple modern os for education purpose.
  10. 计算机桌面桌面设置动态视频教程,如何在计算机上设置动态桌面?电脑设置动态视频桌面图形教程...
  11. 如何使用DOSBox软件编写运行汇编语言程序
  12. app服务器指向dat文件,appdat-系统爱好者
  13. python判断用户名密码是否正确_python实现用户名密码校验
  14. php显示网络图片,php中显示图片的方法
  15. WPS文字表格外计算功能配合书签使用公式轻松实现
  16. 证明HashSet不是线程安全
  17. 年度盘点丨2017十大最佳科技创新产品!
  18. 三国群英传服务器端架设修改,三国群英传ol9005版本架设单机方法
  19. 如何做出美观高大上的前端页面
  20. [ctf.show.reverse] BJDCTF2020 encode

热门文章

  1. 实习踩坑之路:URL传参错误,导致后台查不到数据,但是不报错
  2. 设计模式-03-结构型模式详解
  3. Android okhttp https TrustManager简单总结
  4. python如何移动文件却不覆盖现有文件_在python中创建新文件,不要覆盖现有文件...
  5. 原理解析 | Apache Flink 结合 Kafka 构建端到端的 Exactly-Once 处理
  6. android控制软键盘显示与隐藏
  7. zju眨眼数据集_浙大 CBIST团队发布高质量的多中心MRI公开数据集
  8. python编程从入门到实践pdf_【送书PDF】Python编程从入门到实践
  9. linux安装python的拓展包,linux 安装python拓展包pexpect
  10. java 数字 无法表示_Java中基本数据类型、不能用浮点数表示金额