第2章 项目架构
项目架构如图1所示
image.png
第3章 项目实现
系统环境:
表1
|
系统
|
版本
|
|
windows
|
10 专业版
|
|
linux
|
CentOS 6.8
|
开发工具:
表2
|
工具
|
版本
|
|
idea
|
2017.2.5旗舰版
|
|
maven
|
3.3.9
|
|
JDK
|
1.8+
|
提示:idea2017.2.5必须使用maven3.3.9,不要使用maven3.5,有部分兼容性问题
集群环境:
表3
|
框架
|
版本
|
|
hadoop
|
2.7.2
|
|
zookeeper
|
3.4.10
|
|
hbase
|
1.3.1
|
|
flume
|
1.7.0
|
|
kafka
|
2.11-0.11.0.0
|
硬件环境:
表4
| |
hadoop102
|
hadoop103
|
hadoop104
|
|
内存
|
4G
|
2G
|
2G
|
|
CPU
|
2核
|
1核
|
1核
|
|
硬盘
|
50G
|
50G
|
50G
|
3.1 数据生产
此情此景,对于该模块的业务,即数据生产过程,一般并不会让你来进行操作,数据生产是一套完整且严密的体系,这样可以保证数据的鲁棒性。但是如果涉及到项目的一体化方案的设计(数据的产生、存储、分析、展示),则必须清楚每一个环节是如何处理的,包括其中每个环境可能隐藏的问题;数据结构,数据内容可能出现的问题。
3.1.1 数据结构
我们将在HBase中存储两个电话号码,以及通话建立的时间和通话持续时间,最后再加上一个flag作为判断第一个电话号码是否为主叫。姓名字段的存储我们可以放置于另外一张表做关联查询,当然也可以插入到当前表中。
表5
|
列名
|
解释
|
举例
|
|
call1
|
第一个手机号码
|
15369468720
|
|
call1_name
|
第一个手机号码人姓名(非必须)
|
李雁
|
|
call2
|
第二个手机号码
|
19920860202
|
|
call2_name
|
第二个手机号码人姓名(非必须)
|
卫艺
|
|
date_time
|
建立通话的时间
|
20171017081520
|
|
date_time_ts
|
建立通话的时间(时间戳形式)
| |
|
duration
|
通话持续时间(秒)
|
0600
|
3.1.2 编写代码
思路:
a) 创建Java集合类存放模拟的电话号码和联系人;
b) 随机选取两个手机号码当作“主叫”与“被叫”(注意判断两个手机号不能重复),产出call1与call2字段数据;
c) 创建随机生成通话建立时间的方法,可指定随机范围,最后生成通话建立时间,产出date_time字段数据;
d) 随机一个通话时长,单位:秒,产出duration字段数据;
e)****、将产出的一条数据拼接封装到一个字符串中;
f)****、使用IO操作将产出的一条通话数据写入到本地文件中;
新建module****项目:ct_producer
pom.xml****文件配置:
|
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
|
本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。
网友评论