项目实训第十天
本文最后更新于:2021年7月23日 晚上
电信日志分析
数据采集
概述
- 在实际过程中,流量日志并不是集中在一台服务器上而是放在了多台服务器上,此时需要考虑将数据先从多台服务器上收集过来其中到HDFS上
- 在收集日志的时候,可以考虑使用日志收集框架Flume、Scribe等
步骤
- 将三台虚拟机启动,将后两台虚拟机作为日志产生的服务器,第一台虚拟机作为日志进行汇聚的服务器
- 在第二台和第三台虚拟机上,上传日志文件
1 |
|
- 第二台和第三台虚拟机上做日志收集
1 |
|
在文件中添加
1 |
|
- 在第一台虚拟机上来汇聚数据到HDFS上
1 |
|
在文件中添加
1 |
|
- 在第一个虚拟机上启动HDFS
1 |
|
- 先启动第一个虚拟机上的Flume
1 |
|
- 再启动第二个虚拟机上的Flume
1 |
|
数据清洗
概述
- 将数据收集到HDFS上之后,需要对数据进行处理,但是数据的字段相对比较多,并不是所有的字段都需要处理,那么此时就需要对原始数据进行分析,这个过程称之为数据清洗
- 数据清洗的时候,如果过程相对简单,那么可以考虑使用SQL工具(例如Hive,Kettle等)来清洗,如果数据处理过程相对比较复杂,那么可以考虑使用计算框架(例如MapReduce,Spark,Flink等)来清洗处理
步骤
- 需要先开启YARN
1 |
|
- 启动Hive后台进程
1 |
|
- 启动Hive
1 |
|
- 在Hive建库建表
1 |
|
- 原表中有78个字段,但是对需求分析真正有用的只有23个字段,此时需要从这78个字段中将这23个字段抽取出来 - 清洗表
1 |
|
- 抽取完字段之后,需要对数据进行整理,例如需要对数据进行合并、去重、转换、补齐、舍弃等 - 对数据整理,建立一个事实表
序号 | 字段 | 字段类型 | 描述 | ||
---|---|---|---|---|---|
0 | reportTime | datetime | 小时 时间片 default ‘YYYY-MM-DD HH24:MI:SS’ | ||
1 | appType | int | 应用大类 | ||
2 | appSubtype | int | 应用小类 | ||
3 | userIP | varchar(20) | 用户IP | ||
4 | userPort | int | 用户端口 | ||
5 | appServerIP | varchar(20) | 服务器IP | ||
6 | appServerPort | int | 服务器端口 | ||
7 | host | varchar(50) | 域名 | ||
8 | cellid | varchar(20) | 小区ID | ||
9 | attempts | int(20) | 尝试次数 | ||
10 | accepts | int(20) | 接受次数 | ||
11 | trafficUL | int(20) | 上行流量 | ||
12 | trafficDL | int(20) | 下行流量 | ||
13 | retranUL | int(20) | 重传上行报文数 | ||
14 | retranDL | int(20) | 重传下行报文数 | ||
15 | failCount | int(20) | 延时失败次数 | ||
16 | transDelay | int(20) | 传输时延* | ||
|
|||||
7. 根据不同需求将数据来抽取出来,例如分析各个APP的受欢迎程度 | |||||
序号 | 字段 | 字段类型 | 描述 | ||
— | — | — | — | ||
0 | hourid | datetime | 小时时间片 | ||
1 | appType | int | 应用大类 | ||
2 | appSubtype | int | 应用小类 | ||
3 | attempts | int(20) | 尝试次数 | ||
4 | accepts | int(20) | 接受次数 | ||
5 | succRatio | double | 尝试成功率 | ||
6 | trafficUL | int(20) | 上行流量 | ||
7 | trafficDL | int(20) | 下行流量 | ||
8 | totalTraffic | int(20) | 总流量 | ||
9 | retranUL | int(20) | 重传上行报文数 | ||
10 | retranDL | int(20) | 重传下行报文数 | ||
11 | retranTraffic | int(20) | 重传报文数据 | ||
12 | failCount | int(20) | 延时失败次数 | ||
13 | transDelay | int(20) | 传输时延 | ||
|
|||||
数据导出
概述
- 在实际过程中,在对数据处理完成之后,一般需要对数据进行可视化操作
- 如果在进行可视化操作的时候使用的是一些基于Hadoop的BI工具,那么可以直接从HDFS上来读取数据;如果使用开源的可视化工具,那么此时需要需要将数据导出到数据库中
Sqoop
- Sqoop是Apache提供的一套用于进行数据导入导出的工具,可以在HDFS和数据库之间实现数据的导入和导出效果
- 安装步骤
- 进入/opt目录下,上传sqoop的安装包
1
2
3
cd /opt
rz
# 选择Sqoop的安装包上传
- 解压
1
tar -xvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
- 重命名
1
mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop-1.4.7
- 进入Sqoop的配置目录
1
cd sqoop-1.4.7/conf/
- 编辑文件
1
2
3
4
5
6
7
8
9
10
# 复制文件
cp sqoop-env-template.sh sqoop-env.sh
# 编辑文件
vim sqoop-env.sh
# 在文件中添加
export HADOOP_COMMON_HOME=/opt/hadoop-3.1.3
export HADOOP_MAPRED_HOME=/opt/hadoop-3.1.3
export HIVE_HOME=/opt/hive-3.1.2
# 保存退出,重新生效
source sqoop-env.sh
- 进入Sqoop的lib目录,将MySQL的连接驱动包放到这个目录下
1 |
|
- 编辑环境变量
1 |
|
- Sqoop基本命令
- 查看MySQL中已经存在的库
1
sqoop list-databases --connect jdbc:mysql://hadoop:3306 --username root --password root
- 查看MySQL指定库中的指定的表
1
sqoop list-tables --connect jdbc:mysql://hadoop:3306/hive --username root --password root
- 将HDFS上的数据导出到MySQL中
- 在MySQL中建表
1
create table orders(id int primary key, orderdate varchar(10), productid int, num int);
2. 将HDFS上的数据导出到MySQL中
1
sqoop export --connect jdbc:mysql://hadoop:3306/test --username root --password root --export-dir '/txt/order.txt' --table orders -m 1 --fields-terminated-by ' ';
- 将MySQL中的数据导入到HDFS上
1
sqoop import --connect jdbc:mysql://hadoop:3306/test --username root --password root --table orders --target-dir '/sqoop/orders' --fields-terminated-by '\t' -m 1;
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!
目录