大数据流量分析系统
前几天去了移动营业厅办了个卡,就不说某动的内幕了,说说上行流量和下行流量统计手机号码的总流量。这次我们利用大数据来分析,大数据也有三大框架,Hadoop是离线计算框架,Storm是实时计算框架,Spark是内存计算框架。这里我们使用Hadoop,因为已经有流量的数据,只需统计出来就可以了。
首先我们没有移动的真实数据,只能伪造数据。
之前做了个excel生成数据的系统,这里生成了手机号,32位随机码,上行流量,下行流量,状态码。
map.put("CODEA", "131"+_stringUtils.getCharAndNumr(8, 1));
map.put("CODEB", _stringUtils.getRandomName());
map.put("CODEC", _stringUtils.getCharAndNumr(3, 1));
map.put("CODED", _stringUtils.getCharAndNumr(4, 1));
map.put("CODEE", "200");
1、用java生成excel文件,再复制转成log文件,数据如下:
2、再上传到hdfs中
由于使用windows测试,hadoop环境是安装在windows上。
想学习大数据,又觉得在linux上难操作的,可加QQ490647751,获取windows-hadoop文件资料,只要修改自己的jdk,hadoop环境,一键打开hadoop,网页运行localhost:8088和locahost:50070即可。
想学习大数据的童鞋,多关注本博客,谢谢!
final FSDataOutputStream out = fileSystem.create(new Path(FILE));
final FileInputStream in = new FileInputStream("D:/HTTP0804.logs");
IOUtils.copyBytes(in, out, 1024, true);
// 将D盘中的HTTP0804.logs文件上传到hdfs中的FILE路径中
3、用hadoop计算生成文件
@Override
protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, FlowBean>.Context context)
throws IOException, InterruptedException {
//1、接受数据
String line = value.toString();
//2、数据切片
String[] fields = line.split("\t");
//3、拿到关键字段
String phoneStr = fields[0];
long upFlow = Long.parseLong(fields[fields.length - 3]);
long dfFlow = Long.parseLong(fields[fields.length - 2]);
//4、数据输出到reduce阶段
context.write(new Text(phoneStr), new FlowBean(upFlow, dfFlow));
}
@Override
protected void reduce(Text key, Iterable<FlowBean> values, Reducer<Text, FlowBean, Text, FlowBean>.Context context)
throws IOException, InterruptedException {
//初始化求和变量
long sum_upFlow = 0;
long sum_dfFlow = 0;
//遍历累加求和
for(FlowBean b:values){
sum_upFlow += b.getUpFlow();
sum_dfFlow += b.getDfFlow();
FlowBean result = new FlowBean(sum_upFlow, sum_dfFlow);
context.write(key, result);
}
}
hadoop jar flow0804.jar com.yanhui.hadoop.FlowLogsCount /yanhui/in /yanhui/out
4、下载该文件
从图上看,手机号,上行流量,下行流量,总流量这样输出。
获取源码学习,可点击下载:http://47.98.237.162/detail/1/169