Flume_数据采集工具简介

2022-08-09  本文已影响0人  Eqo

大数据常用的采集工具

image.png

我们的数据源一般有两种

Flume简介

Flume是由Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的工具,在大数据领域主要看中了 flume海量的日志实时采集功能

Flume安装规则,日志在哪台机器,就在那台机器上安装

Flume架构

拥有了以上架构,那么数据在flume中以什么样的形式存在的呢?



-级联架构


image.png

应用场景

场景一 实时日志采集
场景二 数据量很大,实时的小部分小部分的采集,节省时间
场景三 断点续传

Flume开发步骤

1.需要先编写配置文件开发手册
vim /export/server/flume/conf/exec-mem-log.properties

创建一个配置文件xxx.


image.png

channels 缓存,有内存和磁盘 一般采用内存 如果为了数据安全可以采用磁盘

# The configuration file needs to define the sources, 
# the channels and the sinks.
# Sources, channels and sinks are defined per a1, 

# in this case called 'a1'

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

#指定监视的source路径 和 监视模式 exec只能监听一个文件
#define the source
a1.sources.s1.type = exec
a1.sources.s1.command = tail -F /export/server/flume/datas/test.log

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

#define the sink
a1.sinks.k1.type = logger

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

2.Flume source 监听模式

3.Channel 缓存

image.png

在Flume中,编写Agent,最常见使用Channel缓存:Memory内存和File文件,负责临时缓存数据。
-Memory Channel:将数据缓存在内存中(常用)

-File Channel:将数据缓存在文件中
-参数

image.png

4.HDFS SINK

flume中最重要的一个sink

a1.channels = c1
a1.sinks = k1

a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S
a1.sinks.k1.hdfs.filePrefix = events-
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
# the channels and the sinks.
# Sources, channels and sinks are defined per a1, 
# in this case called 'a1'


#定义当前的agent的名称,以及对应source、channel、sink的名字
a1.sources = s1
a1.channels = c1
a1.sinks = k1

#定义s1:从哪读数据,读谁
a1.sources.s1.type = exec
a1.sources.s1.command = tail -F /export/server/flume/datas/test.log

#定义c1:缓存在什么地方
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000


#定义k1:将数据发送给谁
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://node1.itcast.cn:8020/flume/test1
#指定生成的文件的前缀
a1.sinks.k1.hdfs.filePrefix = nginx
#指定生成的文件的后缀
a1.sinks.k1.hdfs.fileSuffix = .log
#指定写入HDFS的文件的类型:普通的文件 支持 序列化文件 压缩文件
a1.sinks.k1.hdfs.fileType = DataStream 

#s1将数据给哪个channel
a1.sources.s1.channels = c1
#k1从哪个channel中取数据
a1.sinks.k1.channel = c1
/export/server/flume/bin/flume-ng agent -n a1 \
-c /export/server/flume/conf/ \
-f /export/server/flume/conf/hdfs-mem-log.properties \
-Dflume.root.logger=INFO,console

Flume默认写入HDFS上会产生很多小文件,都在1KB左右,不利用HDFS存储
-解决 指定文件大小

# hdfs.rollInterval:
    按照时间间隔生成文件
    
# hdfs.rollSize:
    指定HDFS生成的文件大小
    
# hdfs.rollCount:
    按照event个数生成文件
    

#上述这个三个参数 谁先满足条件 谁触发文件滚动

#企业中,最常见的是关闭 时间间隔 和event个数 只以文件大小来控制
hdfs.rollInterval=0
    
hdfs.rollSize=134217728
    
hdfs.rollCount=0

上述配置表示hdfs生成的文件达到128M 滚动切换

如何实现分区存储
添加动态时间标记目录

#定义k1:将数据发送给谁
a1.sinks.k1.type = hdfs
#可以指定时间 里面的文件类似hive分区表
a1.sinks.k1.hdfs.path = hdfs://node1.itcast.cn:8020/flume/test3/daystr=%Y-%m-%d
a1.sinks.k1.hdfs.useLocalTimeStamp = true

使用hive msck 和 add partition 声明分区

Flume高级及容错功能

上一篇 下一篇

猜你喜欢

热点阅读