一、数据准备

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

  1. #!/bin/bash
  2. export JAVA_HOME=/usr/java/jdk1.7.0_51
  3. export PATH=$JAVA_HOME/bin:$PATH
  4. export CLASSPATH=$CLASSPATH:/mnt/jediael/irms/signalGenerator/
  5. java SignalGenerator

/mnt/jediael/irms/signalGenerator/copySignalToHdfs.sh

  1. #!/bin/bash
  2. export JAVA_HOME=/usr/java/jdk1.7.0_51
  3. 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
  4. 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

  1. #!/bin/bash
  2.  
  3. export JAVA_HOME=/usr/java/jdk1.7.0_51
  4. 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
  5. 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

  1. package com.gmcc.irms.util;
  2.  
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.OutputStream;
  6. import java.text.SimpleDateFormat;
  7. import java.util.Random;
  8.  
  9. //此类用于模拟生成信令数据,每次生成100000条
  10.  
  11. public class SignalGenerator {
  12. // 业务类型,如呼入、呼出、发短信、收短信、上网、WLAN等
  13. private int activeType = 0;
  14.  
  15. private String getNextSign() {
  16. String sign = "";
  17. Random rand = new Random();
  18. activeType = rand.nextInt(6);
  19. // 主叫号码
  20. String callNum = "1390222" + rand.nextInt(9) + rand.nextInt(9)
  21. + rand.nextInt(9) + rand.nextInt(9);
  22. // 被叫号码
  23. String beCallNum = "1390222" + rand.nextInt(9) + rand.nextInt(9)
  24. + rand.nextInt(9) + rand.nextInt(9);
  25. // 时长、或者是流量
  26. String callDuration = "";
  27. for (int i = 0; i < 16; i++) {
  28. callDuration += rand.nextInt(9);
  29. }
  30. sign = activeType + callNum + beCallNum + callDuration;
  31. for (int i = 0; i < 800; i++) {
  32. sign += rand.nextInt(9);
  33. }
  34. return sign;
  35.  
  36. }
  37.  
  38. public static void main(String[] args) throws IOException {
  39.  
  40. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  41. long time = System.currentTimeMillis();
  42. String fileName = sdf.format(time) + ".txt";
  43. OutputStream os = new FileOutputStream(fileName, true);
  44. SignalGenerator sg = new SignalGenerator();
  45. String newline = System.getProperty("line.separator");
  46.  
  47. for (int i = 0; i < 100000; i++) {
  48. os.write((sg.getNextSign() + newline).getBytes());
  49.  
  50. }
  51. os.flush();
  52. os.close();
  53.  
  54. }
  55.  
  56. }

SignalParser.java

  1. package com.gmcc.irms.signal;
  2.  
  3. import java.io.IOException;
  4.  
  5. import org.apache.hadoop.fs.Path;
  6. import org.apache.hadoop.io.LongWritable;
  7. import org.apache.hadoop.io.Text;
  8. import org.apache.hadoop.mapreduce.Job;
  9. import org.apache.hadoop.mapreduce.Mapper;
  10. import org.apache.hadoop.mapreduce.Reducer;
  11. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  12. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  13.  
  14. public class SignalParser {
  15. public static void main(String[] args) throws Exception {
  16.  
  17. Job job = new Job();
  18. job.setJarByClass(SignalParser.class);
  19. job.setJobName("signal parser");
  20. FileInputFormat.addInputPath(job, new Path(args[0]));
  21. FileOutputFormat.setOutputPath(job, new Path(args[1]));
  22. job.setMapperClass(SignalParserMapper.class);
  23. job.setReducerClass(SignalParserReducer.class);
  24. job.setOutputKeyClass(Text.class);
  25. job.setOutputValueClass(Text.class);
  26. System.exit(job.waitForCompletion(true) ? 0 : 1);
  27. }
  28. }
  29.  
  30. class SignalParserMapper extends Mapper<LongWritable, Text, Text, Text> {
  31.  
  32. @Override
  33. public void map(LongWritable key, Text value, Context context)
  34. throws IOException, InterruptedException {
  35. String line = value.toString();
  36. // 业务类型
  37. String activeType = line.substring(0, 1);
  38. // 主叫电话号码
  39. String customer = line.substring(1, 12);
  40. // 通话时长、web时长、wlan时长
  41. int duration = Integer.parseInt(line.substring(23, 30));
  42.  
  43. context.write(new Text(customer),new Text(activeType + "," + duration));
  44.  
  45. }
  46. }
  47.  
  48. class SignalParserReducer extends Reducer<Text, Text, Text, Text> {
  49. @Override
  50. public void reduce(Text key, Iterable<Text> values, Context context)
  51. throws IOException, InterruptedException {
  52. //总通话时长
  53. int sumCallDuration = 0;
  54. //通话次数
  55. int callTimes = 0;
  56. //发送短信次数
  57. int smsTimes = 0;
  58. //上网总时长
  59. int sumWebDuration = 0;
  60. //上网次数
  61. int webTimes = 0;
  62. //WLAN总时长
  63. int sumWlanDuration = 0;
  64. //WLAN次数
  65. int wlanTimes = 0;
  66.  
  67. String[] valueArray = null;
  68. int activeType = -1;
  69. int duration = -1;
  70. for (Text value:values){
  71.  
  72. valueArray = value.toString().split(",");
  73. System.out.println(valueArray[0]+" a "+valueArray[1]);
  74. activeType = Integer.parseInt(valueArray[0]);
  75. duration = Integer.parseInt(valueArray[1]);
  76. if(activeType == 0){
  77. //呼出
  78. sumCallDuration += duration;
  79. callTimes++;
  80. }else if(activeType == 2){
  81. //发sms
  82. smsTimes++;
  83. }else if(activeType == 4){
  84. //上网
  85. sumWebDuration += duration;
  86. webTimes ++;
  87. }else if(activeType == 5){
  88. //WLAN
  89. sumWlanDuration += duration;
  90. wlanTimes ++;
  91. }else{
  92.  
  93. }
  94. }
  95.  
  96. context.write(key, new Text(sumCallDuration + "\t" + callTimes + "\t" +smsTimes+"\t" + sumWebDuration+"\t" + webTimes+"\t" + sumWebDuration+"\t" + webTimes));
  97. }
  98. }

版权声明:本文为博主原创文章,未经博主允许不得转载。

irms模拟数据生成及数据分析 分类: H_HISTORY 2015-03-06 14:17 212人阅读 评论(0) 收藏的更多相关文章

  1. iOS开发网络数据之AFNetworking使用 分类: ios技术 2015-04-03 16:35 105人阅读 评论(0) 收藏

    http网络库是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众多功能于一身的强大的类库.最新版本支持session,xctool单元测试.网络获取数 ...

  2. C++实现不能被继承的类——终结类 分类: C/C++ 2015-04-06 14:48 64人阅读 评论(0) 收藏

    1.       问题 C++如何实现不能被继承的类,即终结类.Java中有final关键字修饰,C#中有sealed关键字修饰,而C++目前还没有类似的关键字来修饰类实现终结类,需编程人员手动实现. ...

  3. SQL ID自增列从1开始重新排序 分类: SQL Server 2014-05-19 14:46 652人阅读 评论(0) 收藏

    数据库中把ID自增长重置成1: 一般做法:(太麻烦) 复制表数据->删除原表.新建一张表->粘贴: 新方法: 数据库中:新建查询->复制.粘贴一下代码->修改表名,执行即可(先 ...

  4. printf "%.*s" 分类: 小细节 2015-07-04 14:36 2人阅读 评论(0) 收藏

    ref : http://www.cnblogs.com/yuaqua/archive/2011/10/21/2219856.html 小数点.后"*"表示输出位数,具体的数据来自 ...

  5. iOS中UITextField 使用全面解析 分类: ios技术 2015-04-10 14:37 153人阅读 评论(0) 收藏

    //初始化textfield并设置位置及大小   UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 13 ...

  6. 网络请求工具--AFNetworking 分类: ios技术 2015-02-03 08:17 76人阅读 评论(0) 收藏

    在我们开发过程中,网络请求是必不可少的,对于网络框架,现在主流的大概只有三类:ASI框架: HTTP终结者(已经停止更新了),MKNetworkKit ,AFN.今天我就来浅谈一下这个AFN AFNe ...

  7. IIS上虚拟站点的web.config与主站点的web.config冲突解决方法 分类: ASP.NET 2015-06-15 14:07 60人阅读 评论(0) 收藏

    IIS上在主站点下搭建虚拟目录后,子站点中的<system.web>节点与主站点的<system.web>冲突解决方法: 在主站点的<system.web>上一级添 ...

  8. Dungeon Master 分类: 搜索 POJ 2015-08-09 14:25 4人阅读 评论(0) 收藏

    Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20995 Accepted: 8150 Descr ...

  9. 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 ...

随机推荐

  1. 洛谷——P3384 【模板】树链剖分

    https://www.luogu.org/problem/show?pid=3384#sub 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作 ...

  2. RecipientsEditor-信息收件人输入框

    首先说一下信息收件人这个类的继承关系 RecipientsEditor->EncapsulatedMTKRecipientEditTextView(这两个类都在mms目录下) ->MTKR ...

  3. IIS特殊字符设置

    简介:[iis7]请求筛选模块被配置为拒绝包含双重转义序列的请求.HTTP 错误 404.11 - Not Found 特殊字符最好替换成其他的字符,主要的特殊字符有”*”.”&”.”%”.” ...

  4. spring jdbcTemplate使用queryForList示例

    查询代码: LogVo 日志要显示的内容(Log的部分或者全部列) Log是日志完整的实体 public List<LogVO> findLogByDate(String startDat ...

  5. JSP中使用EL表达式

    EL表达式 :EL 全名为Expression Language,就是为了替代<%= %>脚本表达式. EL主要作用: 获取数据: EL表达式主要用于替换JSP页面中的脚本表达式,以从各种 ...

  6. 如何修复和检测Windows系统漏洞

    本文为<如何给系统打补丁(知识篇)>一文实战文章.   本文出自 "李晨光原创技术博客" 博客,谢绝转载!

  7. 使用Multiplayer Networking做一个简单的多人游戏例子-1/2(换一种方法)

    SynMove.cs using UnityEngine; using System.Collections; using UnityEngine.Networking; public class S ...

  8. mysql集群搭建教程-基础篇

           计算机一级考试系统要用集群,目标是把集群搭建起来,保证一个库dang了,不会影响程序的运行.于是在孟海滨师哥的带领下开始了我的第一次搭建mysql集群,首先看了一些关于集群的资料,然后根 ...

  9. 洛谷 P1927 防护伞

    P1927 防护伞 题目描述 据说 2012 的灾难和太阳黑子的爆发有关.于是地球防卫小队决定制造一个特殊防护 伞,挡住太阳黑子爆发的区域,减少其对地球的影响.由于太阳相对于地球来说实在是太 大了,我 ...

  10. [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 ...