【FIume】海量日志采集系统——Flume基础学习

1 概述

1.1 定义

FIume是一个高可用的,高可靠的,分布式的海量日志采集、聚合、传输系统,基于流式架构,灵活简单。
在这里插入图片描述
Flume的最主要的作用:实时读取服务器本地磁盘的数据,写入hdfs

1.2 基础架构

在这里插入图片描述
Flume主要由3个重要的组件构成:

  • Source:完成对日志数据的收集,从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channel,Flume提供多种数据接收的方式,比如Avro,Thrift等。
  • Channel:channel是一种短暂的存储容器,主要提供一个队列的功能,对source提供中的数据进行简单的缓存。它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着桥梁的作用,channel是一个完整的事务,这一点保证了数据在收发的时候的一致性。并且它可以和任意数量的source和sink链接。支持的类型有: JDBC channel , File System channel , Memory channel等.。
  • Sink:Sink将数据存储到集中存储器比如Hbase和HDFS,从channels消费数据(events)并将其传递给目标地,目标地可能是另一个sink,也可能HDFS,HBase。

2 快速入门

2.1 监控端口数据

需求

监听端口,收集该端口的数据,并打印到控制台

conf

# 声明
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 描述/配置 source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# 描述 sink
a1.sinks.k1.type = logger

# 定义channel
a1.channels.c1.type = memory
# 容量:1000个event
a1.channels.c1.capacity = 1000
# 传输容量
a1.channels.c1.transactionCapacity = 100

# 绑定
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

启动

bin/flume-ng agent --conf conf --conf-file job/netcat-flume-logger.conf --name a1 -Dflume.root.logger=INFO,console 

bin/flume-ng agent -n a1 -c conf -f job/netcat-flume-logger.conf -Dflume.root.logger=INFO,console 

2.2 实时监控单个追加文件

需求

实时监控Hive日志,并上传到HDFS
在这里插入图片描述

实验步骤

1、配置文件

  • 声明
  • 组件的赋值
  • 绑定
a1.sources = r1
a1.sinks = k1
a1.channels = c1


a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /tmp/hadoop/hive.log

a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://brace:9000/flume/%Y%m%d/%H
# 前缀
a1.sinks.k1.hdfs.filePrefix = logs-

# 是否按照时间滚动文件夹
a1.sinks.k1.hdfs.round = true
# 多少时间单位创建一个新的文件夹
a1.sinks.k1.hdfs.roundValue = 1
# 重新定义时间单位
a1.sinks.k1.hdfs.roundUnit = hour

# 是否使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true

# 积攒多少个Event才flush到HDFS一次
a1.sinks.k1.hdfs.batchSize = 100
# 设置文件类型,可支持压缩
a1.sinks.k1.hdfs.fileType = DataStream

# 多久生成一个新的文件(s)
a1.sinks.k1.hdfs.rollInterval = 30
# 设置每个文件的滚动大小
a1.sinks.k1.hdfs.rollSize = 134217700
# 文件的滚动与event数量无关
a1.sinks.k1.hdfs.rollCount = 0

a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
bin/flume-ng agent -n a1 -c conf -f job/file-flume-logger.conf

2.3 实时监控目录下多个新文件

需求

使用Flume监听整个目录的文件,上传至HDFS

a1.sources = r1
a1.sinks = k1
a1.channels = c1


a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /home/hadoop/upload


a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://brace:9000/flume/%Y%m%d/%H
# 前缀
a1.sinks.k1.hdfs.filePrefix = logs-

# 是否按照时间滚动文件夹
a1.sinks.k1.hdfs.round = true
# 多少时间单位创建一个新的文件夹
a1.sinks.k1.hdfs.roundValue = 1
# 重新定义时间单位
a1.sinks.k1.hdfs.roundUnit = hour

# 是否使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true

# 积攒多少个Event才flush到HDFS一次
a1.sinks.k1.hdfs.batchSize = 100
# 设置文件类型,可支持压缩
a1.sinks.k1.hdfs.fileType = DataStream

# 多久生成一个新的文件(s)
a1.sinks.k1.hdfs.rollInterval = 30
# 设置每个文件的滚动大小
a1.sinks.k1.hdfs.rollSize = 134217700
# 文件的滚动与event数量无关
a1.sinks.k1.hdfs.rollCount = 0

a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

2.4 实时监控目录下的多个追加文件

需求

使用Flume监听整个项目的实时追加文件,上传到HDFS
在这里插入图片描述
在这里插入图片描述

a1.sources = r1
a1.sinks = k1
a1.channels = c1


a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 = /home/hadoop/upload/test.txt
a1.sources.r1.positionFile = /home/hadoop/upload/position/position.json
# a1.sources.r1.headers.f1.headerKey1 = value1


a1.sources.r1.fileHeader = true
a1.sources.ri.maxBatchCount = 1000


# 描述 sink
a1.sinks.k1.type = logger

a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

3 Flume与Kafka的整合

a1.sources = r1
a1.sinks = k1
a1.channels = c1


a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 = /home/hadoop/upload/test.txt
a1.sources.r1.positionFile = /home/hadoop/upload/position/position.json
# a1.sources.r1.headers.f1.headerKey1 = value1


a1.sources.r1.fileHeader = true
a1.sources.ri.maxBatchCount = 1000


# 描述 sink
#Describe the sink
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
#设置kafka的主题topic
a1.sinks.k1.topic = aaa
#设置消费者编码为UTF-8
a1.sinks.k1.custom.encoding=UTF-8
#绑定kafka主机以及端口号
a1.sinks.k1.kafka.bootstrap.servers = brace:9092
#设置kafka序列化方式
a1.sinks.k1.serializer.class = kafka.serializer.StringEncoder

a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐的冲浪码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值