irms模拟数据生成及数据分析 分类: H_HISTORY 2015-03-06 14:17 212人阅读 评论(0) 收藏
一、数据准备
1、每天生成随机一个文本,每小时向文本中追加2次数据,每次10万条
随机数据生成:
2,32 * * * * bash /mnt/jediael/irms/signalGenerator/signalGenerator.sh >> /home/jediael/sg.log 2>&1
类:SignalGenerator
2、每天将前一天生成的数据文本导入HDFS
32 0 * * * bash /mnt/jediael/irms/signalGenerator/copySignalToHdfs.sh >>/home/jediael/sg.log 2>&1
二、数据分析
1、每天执行一次数据分析,将结果输出到hdfs文本中。
42 0 * * * bash /mnt/jediael/irms/signalparser/signalParser.sh >>/home/jediael/sg.log 2>&1
类:SignalParser
程序文件:
/mnt/jediael/irms/signalGenerator/signalGenerator.sh
- #!/bin/bash
- export JAVA_HOME=/usr/java/jdk1.7.0_51
- export PATH=$JAVA_HOME/bin:$PATH
- export CLASSPATH=$CLASSPATH:/mnt/jediael/irms/signalGenerator/
- java SignalGenerator
/mnt/jediael/irms/signalGenerator/copySignalToHdfs.sh
- #!/bin/bash
- export JAVA_HOME=/usr/java/jdk1.7.0_51
- PATH=/mnt/jediael/hadoop-1.2.1/bin/:/mnt/jediael/hbase-0.94.26/bin:/mnt/jediael/tomcat-7.0.54/bin:$JAVA_HOME/bin:$PATH
- hadoop fs -copyFromLocal /mnt/jediael/irms/signalGenerator/`date -d "-1 day" +%Y%m%d`.txt /irms/signal >> sg.log
/mnt/jediael/irms/signalparser/signalParser.sh
- #!/bin/bash
- export JAVA_HOME=/usr/java/jdk1.7.0_51
- PATH=/mnt/jediael/hadoop-1.2.1/bin/:/mnt/jediael/hbase-0.94.26/bin:/mnt/jediael/tomcat-7.0.54/bin:$JAVA_HOME/bin:$PATH
- hadoop jar signalgenerator.jar /irms/signal/`date -d "-1 day" +%Y%m%d`.txt /irms/result/`date -d "-1 day" +%Y%m%d`
SignalGenerator.java
- package com.gmcc.irms.util;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.text.SimpleDateFormat;
- import java.util.Random;
- //此类用于模拟生成信令数据,每次生成100000条
- public class SignalGenerator {
- // 业务类型,如呼入、呼出、发短信、收短信、上网、WLAN等
- private int activeType = 0;
- private String getNextSign() {
- String sign = "";
- Random rand = new Random();
- activeType = rand.nextInt(6);
- // 主叫号码
- String callNum = "1390222" + rand.nextInt(9) + rand.nextInt(9)
- + rand.nextInt(9) + rand.nextInt(9);
- // 被叫号码
- String beCallNum = "1390222" + rand.nextInt(9) + rand.nextInt(9)
- + rand.nextInt(9) + rand.nextInt(9);
- // 时长、或者是流量
- String callDuration = "";
- for (int i = 0; i < 16; i++) {
- callDuration += rand.nextInt(9);
- }
- sign = activeType + callNum + beCallNum + callDuration;
- for (int i = 0; i < 800; i++) {
- sign += rand.nextInt(9);
- }
- return sign;
- }
- public static void main(String[] args) throws IOException {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
- long time = System.currentTimeMillis();
- String fileName = sdf.format(time) + ".txt";
- OutputStream os = new FileOutputStream(fileName, true);
- SignalGenerator sg = new SignalGenerator();
- String newline = System.getProperty("line.separator");
- for (int i = 0; i < 100000; i++) {
- os.write((sg.getNextSign() + newline).getBytes());
- }
- os.flush();
- os.close();
- }
- }
SignalParser.java
- package com.gmcc.irms.signal;
- import java.io.IOException;
- 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.output.FileOutputFormat;
- public class SignalParser {
- public static void main(String[] args) throws Exception {
- Job job = new Job();
- job.setJarByClass(SignalParser.class);
- job.setJobName("signal parser");
- FileInputFormat.addInputPath(job, new Path(args[0]));
- FileOutputFormat.setOutputPath(job, new Path(args[1]));
- job.setMapperClass(SignalParserMapper.class);
- job.setReducerClass(SignalParserReducer.class);
- job.setOutputKeyClass(Text.class);
- job.setOutputValueClass(Text.class);
- System.exit(job.waitForCompletion(true) ? 0 : 1);
- }
- }
- class SignalParserMapper extends Mapper<LongWritable, Text, Text, Text> {
- @Override
- public void map(LongWritable key, Text value, Context context)
- throws IOException, InterruptedException {
- String line = value.toString();
- // 业务类型
- String activeType = line.substring(0, 1);
- // 主叫电话号码
- String customer = line.substring(1, 12);
- // 通话时长、web时长、wlan时长
- int duration = Integer.parseInt(line.substring(23, 30));
- context.write(new Text(customer),new Text(activeType + "," + duration));
- }
- }
- class SignalParserReducer extends Reducer<Text, Text, Text, Text> {
- @Override
- public void reduce(Text key, Iterable<Text> values, Context context)
- throws IOException, InterruptedException {
- //总通话时长
- int sumCallDuration = 0;
- //通话次数
- int callTimes = 0;
- //发送短信次数
- int smsTimes = 0;
- //上网总时长
- int sumWebDuration = 0;
- //上网次数
- int webTimes = 0;
- //WLAN总时长
- int sumWlanDuration = 0;
- //WLAN次数
- int wlanTimes = 0;
- String[] valueArray = null;
- int activeType = -1;
- int duration = -1;
- for (Text value:values){
- valueArray = value.toString().split(",");
- System.out.println(valueArray[0]+" a "+valueArray[1]);
- activeType = Integer.parseInt(valueArray[0]);
- duration = Integer.parseInt(valueArray[1]);
- if(activeType == 0){
- //呼出
- sumCallDuration += duration;
- callTimes++;
- }else if(activeType == 2){
- //发sms
- smsTimes++;
- }else if(activeType == 4){
- //上网
- sumWebDuration += duration;
- webTimes ++;
- }else if(activeType == 5){
- //WLAN
- sumWlanDuration += duration;
- wlanTimes ++;
- }else{
- }
- }
- context.write(key, new Text(sumCallDuration + "\t" + callTimes + "\t" +smsTimes+"\t" + sumWebDuration+"\t" + webTimes+"\t" + sumWebDuration+"\t" + webTimes));
- }
- }
版权声明:本文为博主原创文章,未经博主允许不得转载。
irms模拟数据生成及数据分析 分类: H_HISTORY 2015-03-06 14:17 212人阅读 评论(0) 收藏的更多相关文章
- iOS开发网络数据之AFNetworking使用 分类: ios技术 2015-04-03 16:35 105人阅读 评论(0) 收藏
http网络库是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众多功能于一身的强大的类库.最新版本支持session,xctool单元测试.网络获取数 ...
- C++实现不能被继承的类——终结类 分类: C/C++ 2015-04-06 14:48 64人阅读 评论(0) 收藏
1. 问题 C++如何实现不能被继承的类,即终结类.Java中有final关键字修饰,C#中有sealed关键字修饰,而C++目前还没有类似的关键字来修饰类实现终结类,需编程人员手动实现. ...
- SQL ID自增列从1开始重新排序 分类: SQL Server 2014-05-19 14:46 652人阅读 评论(0) 收藏
数据库中把ID自增长重置成1: 一般做法:(太麻烦) 复制表数据->删除原表.新建一张表->粘贴: 新方法: 数据库中:新建查询->复制.粘贴一下代码->修改表名,执行即可(先 ...
- printf "%.*s" 分类: 小细节 2015-07-04 14:36 2人阅读 评论(0) 收藏
ref : http://www.cnblogs.com/yuaqua/archive/2011/10/21/2219856.html 小数点.后"*"表示输出位数,具体的数据来自 ...
- iOS中UITextField 使用全面解析 分类: ios技术 2015-04-10 14:37 153人阅读 评论(0) 收藏
//初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 13 ...
- 网络请求工具--AFNetworking 分类: ios技术 2015-02-03 08:17 76人阅读 评论(0) 收藏
在我们开发过程中,网络请求是必不可少的,对于网络框架,现在主流的大概只有三类:ASI框架: HTTP终结者(已经停止更新了),MKNetworkKit ,AFN.今天我就来浅谈一下这个AFN AFNe ...
- IIS上虚拟站点的web.config与主站点的web.config冲突解决方法 分类: ASP.NET 2015-06-15 14:07 60人阅读 评论(0) 收藏
IIS上在主站点下搭建虚拟目录后,子站点中的<system.web>节点与主站点的<system.web>冲突解决方法: 在主站点的<system.web>上一级添 ...
- Dungeon Master 分类: 搜索 POJ 2015-08-09 14:25 4人阅读 评论(0) 收藏
Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20995 Accepted: 8150 Descr ...
- Codeforces 343D Water Tree 分类: Brush Mode 2014-10-05 14:38 98人阅读 评论(0) 收藏
Mad scientist Mike has constructed a rooted tree, which consists of n vertices. Each vertex is a res ...
随机推荐
- 洛谷——P3384 【模板】树链剖分
https://www.luogu.org/problem/show?pid=3384#sub 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作 ...
- RecipientsEditor-信息收件人输入框
首先说一下信息收件人这个类的继承关系 RecipientsEditor->EncapsulatedMTKRecipientEditTextView(这两个类都在mms目录下) ->MTKR ...
- IIS特殊字符设置
简介:[iis7]请求筛选模块被配置为拒绝包含双重转义序列的请求.HTTP 错误 404.11 - Not Found 特殊字符最好替换成其他的字符,主要的特殊字符有”*”.”&”.”%”.” ...
- spring jdbcTemplate使用queryForList示例
查询代码: LogVo 日志要显示的内容(Log的部分或者全部列) Log是日志完整的实体 public List<LogVO> findLogByDate(String startDat ...
- JSP中使用EL表达式
EL表达式 :EL 全名为Expression Language,就是为了替代<%= %>脚本表达式. EL主要作用: 获取数据: EL表达式主要用于替换JSP页面中的脚本表达式,以从各种 ...
- 如何修复和检测Windows系统漏洞
本文为<如何给系统打补丁(知识篇)>一文实战文章. 本文出自 "李晨光原创技术博客" 博客,谢绝转载!
- 使用Multiplayer Networking做一个简单的多人游戏例子-1/2(换一种方法)
SynMove.cs using UnityEngine; using System.Collections; using UnityEngine.Networking; public class S ...
- mysql集群搭建教程-基础篇
计算机一级考试系统要用集群,目标是把集群搭建起来,保证一个库dang了,不会影响程序的运行.于是在孟海滨师哥的带领下开始了我的第一次搭建mysql集群,首先看了一些关于集群的资料,然后根 ...
- 洛谷 P1927 防护伞
P1927 防护伞 题目描述 据说 2012 的灾难和太阳黑子的爆发有关.于是地球防卫小队决定制造一个特殊防护 伞,挡住太阳黑子爆发的区域,减少其对地球的影响.由于太阳相对于地球来说实在是太 大了,我 ...
- [RxJS] Learn How To Use RxJS 5.5 Beta 2
The main changes is about how you import rxjs opreators from now on. And introduce lettable opreator ...