内容简介
数据可视化课程设计上课案例项目、使用简易商城项目产生用户访问日志,使用nginx记录访问日志、使用Flume +kafka完成日志采集到HDFS、使用Spark 完成日志离线分析、使用Sqoop将分析结果抽取到MySQL,最终使用SSM后端项目完成数据可视化展示。
一、Hadoop分布式集群安装
二 、Nginx安装配置、部署前端项目
三 、MySQL安装
四 、Tomcat安装、部署后端项目
五 、Flume安装、配置、实现日志定时复制、采集
六 、Hadoop实现简单的日志分析
七 、Kafka集群安装配置、Flume整合Kafka实现日志采集
八 、Spark集群安装、配置
九 、使用Spark进行日志分析
十 、Sqoop安装配置、抽取分析结果到MySQL数据库
十 一、使用Echarts展示分析结果
Kafka集群安装配置、Flume整合Kafka实现日志采集
Kafka要使用zookeeper,所以先搭建zookeeper的集群
1、zookeeper集群安装
Master节点先安装,配置,然后使用scp复制到另外两个节点
1)下载apache-zookeeper-3.7.0-bin.tar.gz,并上传到 /mnt/tools文件夹
下载地址:https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
2) 解压
cd /mnt/tools
tar -vxzf apache-zookeeper-3.7.0-bin.tar.gz -C /mnt/training/
3)设置环境变量
vi /etc/profile
# 添加以下代码
export ZOOKEEPER_HOME=/mnt/training/apache-zookeeper-3.7.0-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source /etc/profile
4)修改配置文件
cd /mnt/training/apache-zookeeper-3.7.0-bin
# 创建data文件夹
mkdir data
# 进入data文件夹 创建mypid文件
cd data
# 编辑myid文件 输入 0(三台机器的集群,master:0,slave1:1,slave2:2)
vi myid
输入 0
保存退出(:wq)
# 修改配置文件
# 复制一份自带的sample文件
cp zoo_sample.cfg zoo.cfg
# 修改以下内容
server.0=master:2888:3888
server.1=slave1:2888:3888
server.2=slave2:2888:3888
admin.serverPort=8001
PS:
1)这里的0,1,2是为了区分三台机器
2)对应的master,slave1,slave2是三台机器的机器名称
3)serverPort 这里是因为新版的zookeeper会占用8080端口,跟Tomcat端口冲突,我这里指定为8001
4)复制到另外两台电脑
scp -r /mnt/training/apache-zookeeper-3.7.0-bin root@slave1:/mnt/training/
scp -r /mnt/training/apache-zookeeper-3.7.0-bin root@slave2:/mnt/training/
5)然后按照上面步骤3设置slave1和slave2的环境变量
6)分别修改/mnt/training/apache-zookeeper-3.7.0-bin/data/myid的值
slave1的 myid修改为1
slave2的myid修改为2
7) 分别启动三台机器的zookeeper
zkServer.sh start
8)jps确认,三个机器都有QuorumPeerMain进程
2、Kafka集群安装
1)下载kafka_2.12-3.0.0.tgz到 /mnt/tools目录
2)解压
cd /mnt/tools
tar -vxzf kafka_2.12-3.0.0.tgz -C /mnt/training
3)修改配置文件
cd /mnt/training/kafka_2.12-3.0.0/config
vi server.properties
# 修改以下内容
broker.id=0
# 指定zookeeper集群
zookeeper.connect=master:2181,slave1:2181,slave2:2181
4)scp 复制到另外两台机器
cd /mnt/training/
scp -r kafka_2.12-3.0.0 root@slave1:/mnt/training/
scp -r kafka_2.12-3.0.0 root@slave2:/mnt/training/
5)分别修改slave1和slave2机器上的server.properties文件。
将brokerid分别修改1,2
6)设置master机器的环境变量
vi /etc/profile
# 添加以下内容
export KAFKA_HOME=/mnt/training/kafka_2.12-3.0.0/
export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile
7)分别测试启动三台机器的kafka程序
cd /mnt/training/kafka_2.12-3.0.0/bin
./kafka-server-start.sh ../config/server.properties
但是这样启动,一旦关闭远程连接窗口,进程就会关闭,我们可以做一些改进:
- 将Kafka程序启动为后台进程形式运行
- 编写脚本统一启动启动和关闭kafka集群
在 master机器的/mnt/training/kafka_2.12-3.0.0/bin目录下编写 kf.sh脚本
#!/bin/bash
case $1 in
"start"){
for i in master slave1 slave2
do
echo " --------启动 $i Kafka-------"
ssh $i "/mnt/training/kafka_2.12-3.0.0/bin/kafka-server-start.sh -daemon /mnt/training/kafka_2.12-3.0.0/config/server.properties"
done
};;
"stop"){
for i in master slave1 slave2
do
echo " --------停止 $i Kafka-------"
ssh $i "/mnt/training/kafka_2.12-3.0.0/bin/kafka-server-stop.sh stop"
done
};;
esac
使用方式:
启动:kf.sh start
停止:kf.sh stop
测试:
./kafka-topics.sh --create --bootstrap-server master:9092 --replication-factor 3 --partitions 7 --topic test1
./kafka-console-producer.sh --broker-list master:9092 --topic test
./kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic test --from-beginning
3、Flume整合Kafka
flume安装设计图:
master | slave1 | slave2 |
---|---|---|
Flume | - | Flume |
采集日志写入kafka | - | 从kafka读取日志写入HDFS |
1)Flume生产者端配置
复制一个新的flume配置文件:
cd /mnt/training/apache-flume-1.9.0-bin/conf/
cp flume-hdfs.conf flume-kafka.conf
修改flume-kafka.conf内容:
#为各组件命名
a1.sources =r1
a1.channels =c1
#描述source
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 =/usr/local/nginx/logs/flumeLogs/access.*
a1.sources.r1.positionFile =/usr/local/nginx/logs/flumeLogs/taildir_position.json
#Kafka Channel 不需要配置Sink
a1.channels.c1.type =org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = master:9092
# kafka的topic
a1.channels.c1.kafka.topic = topic_log
a1.channels.c1.parseAsFlumeEvent = false
#绑定source 和channel 以及sink 和channel 的关系
a1.sources.r1.channels = c1
2)复制master节点的Flume到slave2节点
scp -r /mnt/training/apache-flume-1.9.0-bin root@slave2:/mnt/training
3)Flume消费者端(slave2的flume)配置
cd /mnt/training/apache-flume-1.9.0-bin/conf/
vi flume-kafka.conf
修改之后的文件内容为:
## 组件
a1.sources=r1
a1.channels=c1
a1.sinks=k1
## source1
a1.sources.r1.type = org.apache.flume.source.kafka.KafkaSource
a1.sources.r1.batchSize = 5000
a1.sources.r1.batchDurationMillis = 2000
a1.sources.r1.kafka.bootstrap.servers =master:9092,slave1:9092,slave2:9092
a1.sources.r1.kafka.topics=topic_log
## channel1
a1.channels.c1.type = file
a1.channels.c1.checkpointDir =/mnt/flume/checkpoint/behavior1
a1.channels.c1.dataDirs = /mnt//flume/data/behavior1/
a1.channels.c1.maxFileSize = 2146435071
a1.channels.c1.capacity = 1000000
a1.channels.c1.keep-alive = 6
## sink1
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path =hdfs://master:9000/flumeLogs/%y-%m-%d/%H-%M
处理完的文件前缀
a1.sinks.k1.hdfs.filePrefix = access
sinks.k1.hdfs.round = false
a1.sinks.k1.hdfs.rollInterval = 10
a1.sinks.k1.hdfs.rollSize = 134217728
a1.sinks.k1.hdfs.rollCount = 0
## 拼装
a1.sources.r1.channels = c1
a1.sinks.k1.channel= c1
3)修改master节点的 /root/flume_start.sh文件
#!/bin/bash
/mnt/training/apache-flume-1.9.0-bin/bin/flume-ng agent -c /mnt/training/apache-flume-1.9.0-bin/conf/ -f /mnt/training/apache-flume-1.9.0-bin/conf/flume-kafka.conf -n a1 -Dflume.root.logger=INFO,console &
4)复制master节点的/root/flume_start.sh文件到 slave2目录
cd /root
scp flume_* root@slave2:~
5)分别启动master和slave2的flume
cd /root
./flume_start.sh
6)测试,进入master节点 /root下依次执行下面两个脚本完成模拟日志生成和日志复制,
./ab_test.sh
./rollingLog.sh
7)查看HDFS目录 有新的采集文件夹目录生成,文件不为空,即为成功。