内容简介
数据可视化课程设计上课案例项目、使用简易商城项目产生用户访问日志,使用nginx记录访问日志、使用Flume +kafka完成日志采集到HDFS、使用Spark 完成日志离线分析、使用Sqoop将分析结果抽取到MySQL,最终使用SSM后端项目完成数据可视化展示。
一、Hadoop分布式集群安装
二 、Nginx安装配置、部署前端项目
三 、MySQL安装
四 、Tomcat安装、部署后端项目
五 、Flume安装、配置、实现日志定时复制、采集
六 、Hadoop实现简单的日志分析
七 、Kafka集群安装配置、Flume整合Kafka实现日志采集
八 、Spark集群安装、配置
九 、使用Spark进行日志分析
十 、Sqoop安装配置、抽取分析结果到MySQL数据库
十 一、使用Echarts展示分析结果
1、下载 apache-flume-1.9.0-bin.tar.gz 到/mnt/tools目录下
http://www.apache.org/dyn/closer.lua/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz
2、解压
tar -zvxf /mnt/tools/apache-flume-1.9.0-bin.tar.gz -C /mnt/training/
3、配置环境变量
vi ~/.bash_profile 或者 vi /etc/profile
export FLUME_HOME=/mnt/training/apache-flume-1.9.0-bin
export PATH=$PATH:$FLUME_HOME/bin
source ~/.bash_profile 或者 source /etc/profile
4、复制jar包(需要注意自己的Hadoop的版本,找到对应的Hadoop版本对应的jar包版本再复制)
到 /mnt/training/apache-flume-1.9.0-bin/lib目录
share/hadoop/common/hadoop-common-2.7.3.jar
share/hadoop/common/lib/commons-configuration-1.6.jar
share/hadoop/common/lib/hadoop-auth-2.7.3.jar
share/hadoop/hdfs/hadoop-hdfs-2.7.3.jar
share/hadoop/common/lib/htrace-core-3.1.0-incubating.jar
share/hadoop/common/lib/commons-io-2.4.jar
5、验证
flume-ng version
6、配置Flume HDFS Sink:
在/mnt/training/apache-flume-1.9.0-bin/conf/新建一个flume-hdfs.conf
# define the agent
a1.sources=r1
a1.channels=c1
a1.sinks=k1
# define the source
#上传目录类型
a1.sources.r1.type=spooldir
# 设定Flume监听或者监视的文件夹
a1.sources.r1.spoolDir=/usr/local/nginx/logs/flumeLogs
#定义自滚动日志完成后的后缀名
a1.sources.r1.fileSuffix=.FINISHED
#根据每行文本内容的大小自定义最大长度4096=4k
a1.sources.r1.deserializer.maxLineLength=4096
# define the sink
a1.sinks.k1.type = hdfs
#上传的文件保存在hdfs的/flumeLogs目录下
a1.sinks.k1.hdfs.path = hdfs://master:9000/flumeLogs/%y-%m-%d/%H/%M/%S
a1.sinks.k1.hdfs.filePrefix=access_log
a1.sinks.k1.hdfs.fileSufix=.log
a1.sinks.k1.hdfs.batchSize=1000
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.writeFormat= Text
# roll 滚动规则:按照数据块128M大小来控制文件的写入,与滚动相关其他的都设置成0
#为了演示,这里设置成500k写入一次
a1.sinks.k1.hdfs.rollSize= 512000
a1.sinks.k1.hdfs.rollCount=0
a1.sinks.k1.hdfs.rollInteval=0
#控制生成目录的规则:一般是一天或者一周或者一个月一次,这里为了演示设置10秒
a1.sinks.k1.hdfs.round=true
a1.sinks.k1.hdfs.roundValue=10
a1.sinks.k1.hdfs.roundUnit= second
#是否使用本地时间
a1.sinks.k1.hdfs.useLocalTimeStamp=true
#define the channel
a1.channels.c1.type = memory
#自定义event的条数
a1.channels.c1.capacity = 500000
#flume事务控制所需要的缓存容量1000条event
a1.channels.c1.transactionCapacity = 1000
#source channel sink cooperation
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
7、修改conf/flume-env.sh(该文件事先是不存在的,需要复制一份)
cp flume-env.template.sh flume-env.sh
#设置JAVA_HOME:
export JAVA_HOME = /mnt/training/1.8.0_261
#修改默认的内存:
export JAVA_OPTS="-Xms1024m -Xmx1024m -Xss256k -Xmn2g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit"
8、编写复制日志脚本,将access.log文件采集到 指定的目录中
位置:/root/rollingLog.sh
内容:
#!/bin/bash
dataformat=`date +%Y-%m-%d-%H-%M-%S`
cp /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access_$dataformat.log
echo "复制日志完成..."
host=`hostname`
sed -i 's/^/'${host}',&/g' /usr/local/nginx/logs/access_$dataformat.log
lines=`wc -l < /usr/local/nginx/logs/access_$dataformat.log`
mv /usr/local/nginx/logs/access_$dataformat.log /usr/local/nginx/logs/flumeLogs
echo "移动日志完成..."
sed -i '1,'${lines}'d' /usr/local/nginx/logs/access.log
/usr/local/nginx/sbin/nginx -s stop
echo "nginx停止中..."
/usr/local/nginx/sbin/nginx
echo "nginx启动中..."
ls -al /usr/local/nginx/logs/flumeLogs/
9、设置定时任务定时复制日志,为Flume准备预处理日志
crontab -e
# 像vi或者vim命令一样编辑 定时任务列表
# 设定 每个30分钟执行一次 复制日志的脚本
*/30 * * * * /root/rollingLog.sh
ESC 退出编辑
:wq保存退出
10、编写启动脚本
位置:/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-hdfs.conf -n a1 -Dflume.root.logger=INFO,console &
11、启动
cd /root
./flume_start.sh
12、测试采集结果
1)在shop界面 随便单击几个商品,产生nginx access.log文件
2)日志将会被采集到 HDFS中 使用 HDFS的文件管理界面可以查看结果
**PS:关于接下来的做法的几点思考:
方案一:使用Hadoop直接去分析HDFS中的数据内容,然后使用sqoop将结果导出到关系型数据库,最后进行数据可视化。(六) Hadoop日志分析、(十)Sqoop安装配置、抽取数据到MySQL、(十一)使用Echarts展示分析结果
方案二:如果要做实时消费,需要安装kafka+Spark streaming 并将Flume的Sink改成kafka相关的类型,然后进行实时消费,实时分析,结果存入Hbase或者MySQL进行数据可视化
方案三:修改Flume的Sink的类型将采集的日志直接落入 HBase数据库,然后使用Hive进行分析,结果存入MyQL,然后进行数据可视化