开发环境

IDEA+maven+JDK+linux

系统架构

hadoop+zookeeper+flume+ kafka+hbase

需求描述

通信运营商每时每刻会产生大量的通信数据,需要定时定期的对已有数据进行离线的分析处理。例如,当日话单, 月度话单,季度话单,年度话单,通话次数,通话总时长等等。项目需求就是要满足用户对通信话单的查询和展示。

项目描述

项目一共分为三块,第一部分为数据生产,在这部分要清楚项目数据的结构和内容,预判可能出现的问题并进行数据清洗, 将数据写入到日志文件中;第二部分是将生产的数据落地到HBase中,首先是用Flume监控日志文件, 采集实时产生的数据到kafka集群,再调用Kafka和HBase的API,将数据写入到HBase中。 第三部分是对HBase中采集到的数据进行分析,统计出我们想要的结果,将统计结果写入到MySQL中让用户查询。

项目步骤

  • 数据生产:
  • a) 创建 Java 集合类存放模拟的电话号码和联系人;
  • b) 随机选取两个手机号码当做“主叫”与“被叫”,产出 call1 与 call2 字段数据;
  • c) 创建随机生成通话建立时间的方法,产出date_time 字段数据;
  • d) 随机一个通话时长,单位:秒,产出 duration 字段数据;
  • e) 将产出的一条数据拼接封装到一个字符串中;
  • f) 将通话数据写入到本地文件中;
  • 数据消费:
  • a) 编写 kafka 消费者,读取 kafka 集群中缓存的消息,并打印 到控制台以观察是否成功;
  • b)编写调用 HBaseAPI 相关方法,将从 Kafka 中读 取出来的数据写入到 HBase;
  • 数据分析:
  • a) 按照时间维度来统计通话,比如统计 2017 年所有月份所有日子的通话记录, 那这个维度我们大概可以表述为 2017 年*月*日;
  • b) 通过 Mapper 将数据按照不同维度聚合给Reducer;
  • c) 通过 Reducer 拿到按照各个维 度聚合过来的数据,进行汇总,输出;
  • d) 根据业务需求, 将Reducer 的输出通 过 Outputformat 把数据输出到MySQL中 。

项目源码