项目实训第十天
本文最后更新于:2025年9月10日 上午
电信日志分析
数据采集
概述
- 在实际过程中,流量日志并不是集中在一台服务器上而是放在了多台服务器上,此时需要考虑将数据先从多台服务器上收集过来其中到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) | 传输时延* |
1 |
|
- 根据不同需求将数据来抽取出来,例如分析各个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) | 传输时延 |
1 |
|
数据导出
概述
- 在实际过程中,在对数据处理完成之后,一般需要对数据进行可视化操作
- 如果在进行可视化操作的时候使用的是一些基于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中
1. 在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 协议 ,转载请注明出处!
目录