Day20_20180521_网站流量日志分析项目01:Flume日志采集系统

一、网站流量日志分析项目

	 目标
		 常规大数据项目的业务流程
		      电商
			  金融
			  游戏
			  医疗
		 整合之前学习的技术内容实现业务需求

 

 业务流程

数据采集:将数据存储到大数据系统中
   数据源
   -》文件
   -》DB
   -》数据流
注意:数据流:不以任何文件的形式存在,不进行存储。
     而直接将数据作为数据流传输发送到目标路径中去。 

目标

	-》目标
				-》hdfs
				-》hive
				-》hbase
	 -》采集工具(数据采集框架)
				-》shell:一般不用 >>集群中负载比较高的话,效率会很低。	
				-》sqoop:rdbms -> hdfs
注意:有局限性
1、只适用于MySql导入到hdfs并且效率也不高
2、只能适用于DB(rdbms),文件和数据流无法采集了
				-》Flume:基于各种数据源的数据流采集工具
				-》kafka:消息中间件
				-》自己在应用后台嵌入自己开发的采集架构
		-》数据分析
		-》数据可视化

二、Flume的特点及其介绍

特点

	collecting, aggregating, and moving 
		收集		聚合			移动
组件:  source		channel			sink
		-》on streaming data flows
			基于实时数据流的应用

注意:一个Agent就是一个业务程序

	-》组件功能
		-》source:负责读取数据,将数据转化为数据流,发送数据给channel
		-》channel:负责临时存储数据
		-》sink:负责从channel中取数据,并将取到的数据发送给目标地
	-》flume的版本
		Flume-og:老版本
		Flume-ng:新一代
			1.5-1.7
	-》flume底层
    注意:source会将 数据变成数据流,但是不会将数据流直接发送出去,而是将数据封装成event对象 
		-》将每一条数据封装成event对象>>文件中一行会变成一个event对象 
		-》event对象:
			-》head:可以存放key=value的属性<<Flume三大高级组件的时候回用到
			-》body:这一条数据的所有字节

三、Flume的安装部署测试

Flume的安装

tar -zxvf flume-ng-1.6.0-cdh5.7.6.tar.gz -C /opt/cdh-5.7.6/
 mv apache-flume-1.6.0-cdh5.7.6-bin flume-1.6.0-cdh5.7.6-bin

修改配置

flume-env.sh

export JAVA_HOME=/opt/modules/jdk1.8.0_91

配置环境变量:

让flume读取到hdfs的地址

	-》第一种:在env或者全部环境变量中配置HADOOP_HOME
	-》第二种:在编写应用程序时,指定完整的hdfs路径
			   hdfs://hostname:8020/flume
	  注意:hdfs的端口号是8020
		    实际开发中第三种方法用的最多(做hdfs做HA时候就不适用了)
	-》第三种:将core-site和hdfs-site拷贝到flume的conf目录(hdfs做了HA)
cp ../hadoop-2.6.0-cdh5.7.6/etc/hadoop/core-site.xml ../hadoop-2.6.0-cdh5.7.6/etc/hadoop/hdfs-site.xml conf/

需要添加相应的依赖jar包

-》报错:NOCLASSDEFOUND
-》第一种:将hadoop的classpath追加到flume的classpath中(不推荐)
		  注意:flume可以这么做,因为flume不包含任何属于Hadoop的jar包
		  注意:但是与hive和hbase集成,这些框架有Hadoop的jar包,这时候就
		  会jar包会产生冲突,推荐使用第二种
	-》第二种:
				将需要用到的jar包放入即可
资料中整理好的jar包(精简版):

将jar包放入flume 框架lib中:

Flume测试

编写agent配置

source
channel
sink

运行agent文件

语法:Usage: bin/flume-ng <command> [options]...
			bin/flume-ng agent 
--conf     指定flume的配置文件目录
 --name    agent的名字 
--conf-file  指定agent文件的地址
				-Dflume.root.logger=INFO,console  将info的日志打印到控制台中
		注意:
				-》一个文件中可以有多个agent,每个agent有自己的名字
				-》一个agent就是一个数据采集的程序
					source,channel,sink

测试1:动态采集hive的日志文件,将采集到的数据打印到logger中

	source:负责读hive日志文件,将数据发送给channel
	channel:file(文件)/mem(内存)
	sink:从channel取数据,将数据发送给logger
[root@bigdata-training01 flume-1.6.0-cdh5.7.6-bin]# mkdir case
[root@bigdata-training01 flume-1.6.0-cdh5.7.6-bin]# cd case /
[root@bigdata-training01 case]# cp ../conf/flume-conf.properties.template  hive-mem-log.properties

配置hive-mem-log.properties
a1.sources = s1
a1.channels = c1
a1.sinks = k1

--在source过程中通过执行命令来读取文件
# define the source
a1.sources.s1.type = exec

--source过程中执行的命令是什么
a1.sources.s1.command=tail -F /opt/cdh-5.7.6/hive-1.1.0-cdh5.7.6/logs/hive.log

--channel过程中数据写入内中
# define the channel
a1.channels.c1.type = memory

--sink过程中将数据写入日志中去
#define the sink
a1.sinks.k1.type = logger

#bond
--source将数据发送到c1这个channel
a1.sources.s1.channels = c1
--sinks在c1这个channel中取数据
a1.sinks.k1.channel = c1
测试
bin/flume-ng agent --conf conf/ --name a1 --conf-file case/hive-mem-log.properties -Dflume.root.logger=INFO,console

注意:采集过来的数据是event对象

2021-06-13 18:19:20,571 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:94)] Event: { headers:{} body: 32 30 32 31 2D 30 35 2D 32 33 20 31 33 3A 31 37 2021-05-23 13:17 }
2021-06-13 18:19:20,638 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:94)] Event: { headers:{} body: 32 30 32 31 2D 30 35 2D 32 33 20 31 33 3A 31 37 2021-05-23 13:17 }
2021-06-13 18:19:20,643 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:94)] Event: { headers:{} body: 32 30 32 31 2D 30 35 2D 32 33 20 31 33 3A 31 37 2021-05-23 13:17 }

注意:还没有往hive中写数据,这里已经有数据

         原因:使用了tail-F /opt/cdh-5.7.6/hive-1.1.0-cdh5.7.6/logs/hive.log,这条命令会将最后的十条数据先读过来

在hive中操作后,flume中会实时的采集数据:

在hive中操作后,flume中会实时的采集数据:

测试2:动态采集hive的日志文件,将采集到的数据打印到hdfs中

[root@bigdata-training01 flume-1.6.0-cdh5.7.6-bin]# cp case/hive-mem-log.properties  case/hive-mem-hdfs.properties

配置hive-mem-hdfs.properties

#define agent 
a1.sources = s1
a1.channels = c1
a1.sinks = k1

# define the source
a1.sources.s1.type = exec
a1.sources.s1.command = tail -F /opt/cdh-5.7.6/hive-1.1.0-cdh5.7.6/logs/hive.log

# define the channel
a1.channels.c1.type = memory

#define the sink
--sink过程中将数据写入hdfs中
a1.sinks.k1.type = hdfs
--写入hdfs的文件地址
a1.sinks.k1.hdfs.path = /flume2

#bond
a1.sources.s1.channels = c1
a1.sinks.k1.channel = c1

测试

?更改目标为hdfs

[root@bigdata-training01 flume-1.6.0-cdh5.7.6-bin]#  bin/flume-ng agent --conf conf/ --name a1 --conf-file case/hive-mem-hdfs.properties -Dflume.root.logger=INFO,console 

大量执行show databases产生日志:

 

             

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值