1.Flume概念,功能,架构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_15014327/article/details/83389169

1.Flume介绍

Flume是一种分布式、可靠且可用的服务,用于有效地收集、聚合和移动大量日志数据。它是基于流数据的灵活架构。它具有高可靠性机制和许多故障转移及恢复机制,具有强大的容错能力。它使用简单的可扩展数据模型,允许在线分析应用程序。

2.Flume架构

Flume-ng只有一个角色的节点:Agent角色。Agent角色有Source、Channel、Sink组成。

  • Source:用于采集数据,Source是产生数据流的来源方,同时将产生的数据流传输到Channel。
  • Channel:连接Sources和Sinks,这个管道类似与一个队列。
  • Sink:从Channels收集数据,将数据写到目标源,可以是下一个Source也可以是HDFS或HBASE。

Event是Flume数据传输的基本单元,Flume以Event的形式将数据从源头传送到最终目的地。Event由(可选的)Header和载有数据的一个Byte Array组成。

  • 载有的数据对Flume是不透明的
  • Header是容纳了key-value的无序集合,key在集合内是唯一的
  • Header可以在上下文路由中扩展

3.Apache Flume安装配置

# 0.需要的环境
# flume工作准备:(1)Java运行环境(2)内存(3)磁盘空间(4)目录权限
# 1.下载apache flume 1.7
https://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.6.0/apache-flume-1.6.0-bin.tar.gz
# 2.解压
tar -zvf apache-flume-1.6.0-bin.tar.gz
mv apache-flume-1.6.0-bin flume-1.6.0
# 3.配置JAVA_HOME
cd flume-1.6.0/conf
cp flume-env.sh.template flume-env.sh #修改JAVA_HOME
# 4.启动
bin/flume-ng agent \    #agent
    -n agent-01 \    #指定名称
    -c conf \        #指定配置文件目录
    -f conf/flume-conf.properties.template    #指定配置文件

4.编写第一个Flume Agent(实时读取数据)

#1.新建a1.conf
touch conf/a1.conf

#2.编写a1.conf
#agent
a1.sources = r1
a1.channels = c1
a1.sinks = k1
#source
a1.sources.r1.type=netcat
a1.sources.r1.bind=master
a1.sources.r1.port=55555
#channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
#sink
a1.sinks.k1.type=logger
#bind
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1

执行启动flume命令:

bin/flume-ng agent -c conf -n agent-a1 -f conf/a1.conf \
-Dflume.root.logger=DEBUG,console #因为默认配置输出日志到文件,我们需要它输出到控制台可见。

安装并启动telnet:

# 1.安装telnet-server
yum -y install telnet-server
# 2.开启服务
service xinetd start
# 3.打开端口55555
telnet master 55555

5.编写第二个Flume Agent(收集日志,存储到HDFS)

a2.sources = r2
a2.sinks = k2
a2.channels = c2

a2.sources.r2.type = exec
a2.sources.r2.command = tail -f /var/log/my.log # mysql本地日志
a2.sources.r2.shell = /bin/bash -c

a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 100

a2.sinks.k2.type = hdfs
a2.sinks.k2.hdfs.path = hdfs://master:8020/mysql_r2/ #hdfs目录
a2.sinks.k2.hdfs.fileType = DataStream
a2.sinks.k2.hdfs.writeFormat = Text
a2.sinks.k2.hdfs.batchSize = 5

a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2

启动flume:

bin/flume-ng agent -c conf -n a2 -f conf/a2.conf -Dflume.root.logger=DEBUG,console

查看收集结果:

[root@master ~]# hdfs dfs -ls /mysql_r2
Found 14 items
-rw-r--r--   3 root root        338 2018-10-26 15:30 /mysql_r2/FlumeData.1540538984894
-rw-r--r--   3 root root          7 2018-10-26 15:36 /mysql_r2/FlumeData.1540539367248
-rw-r--r--   3 root root         70 2018-10-26 15:37 /mysql_r2/FlumeData.1540539409803
-rw-r--r--   3 root root         70 2018-10-26 15:37 /mysql_r2/FlumeData.1540539409804
-rw-r--r--   3 root root         70 2018-10-26 15:37 /mysql_r2/FlumeData.1540539409805
-rw-r--r--   3 root root         56 2018-10-26 15:37 /mysql_r2/FlumeData.1540539409806
-rw-r--r--   3 root root         70 2018-10-26 15:37 /mysql_r2/FlumeData.1540539468662
-rw-r--r--   3 root root         70 2018-10-26 15:37 /mysql_r2/FlumeData.1540539468663
-rw-r--r--   3 root root         70 2018-10-26 15:38 /mysql_r2/FlumeData.1540539468664
-rw-r--r--   3 root root         42 2018-10-26 15:38 /mysql_r2/FlumeData.1540539468665
-rw-r--r--   3 root root         70 2018-10-26 15:39 /mysql_r2/FlumeData.1540539553306
-rw-r--r--   3 root root         28 2018-10-26 15:39 /mysql_r2/FlumeData.1540539553307
-rw-r--r--   3 root root          7 2018-10-26 15:40 /mysql_r2/FlumeData.1540539600840
-rw-r--r--   3 root root         35 2018-10-26 15:44 /mysql_r2/FlumeData.1540539884180.tmp

6.编写第三个Flume Agent(实时收集日志,按时间分目录存储到HDFS)

a3.sources = r3
a3.sinks = k3
a3.channels = c3

a3.sources.r3.type = spooldir
a3.sources.r3.spoolDir= /var/log/my.log # mysql本地日志
a3.sources.r3.ignorePattern = ^(.)*\\.log$ #不收集log结尾的
a3.sources.r3.fileSuffix = .delete #收集完之后文件名以.delete结尾
a3.sources.r3.useLocalTimeStamp = true #使用本地日期

a3.channels.c3.type = file
a3.channels.c3.checkpointDir = /mnt/flume/checkpoint
a3.channels.c3.dataDirs = /mnt/flume/data

a3.sinks.k3.type = hdfs
a3.sinks.k3.hdfs.path = hdfs://master:8020/spool/logs/%Y%m%d #hdfs目录(日期变动的目录)
a3.sinks.k3.hdfs.fileType = DataStream
a3.sinks.k3.hdfs.writeFormat = Text
a3.sinks.k3.hdfs.batchSize = 5

a3.sources.r3.channels = c3
a3.sinks.k3.channel = c3

启动flume:

bin/flume-ng agent -c conf -n a3 -f conf/a3.conf -Dflume.root.logger=DEBUG,console

查看收集结果:

[root@master ~]# hdfs dfs -ls /spool/logs/
Found 14 items
-rw-r--r--   3 root root        0 2018-10-26 15:30 /spool/logs/20181025
-rw-r--r--   3 root root        0 2018-10-26 15:36 /spool/logs/20181026

猜你喜欢

转载自blog.csdn.net/qq_15014327/article/details/83389169
今日推荐