文章目录

  • 零, 官方API
  • 一, Source(接收并处理数据)
  • 1.1 `exec` 类型的Soruce组件
  • 1.2 `netcat`类型的Source组件
  • 1.3 `spooldir`类型的Source组件
  • 1.4 `taildir`类型的Source组件
  • 1.4 `avro`类型的Source组件
  • 二, Channel
  • 2.1 `memory`类型的Channel组件
  • 2.2 `file`类型的Channel组件
  • 2.3 `kafka`类型的Channel组件
  • 三, Sink
  • 3.1 `logger`类型的sink组件
  • 3.2 `hdfs`类型的sink组件
  • 3.3 `file_roll`类型的sink组件
  • 3.4 `avro`类型的Sink和Source组件

零, 官方API

  • 本文是对前面所学Flume相关组件的一个总结和回顾, 方便快速记忆Flume各个组件常见类型的写法.
  • Flume是大数据中用来采集, 聚合, 传输日志数据的一种工具, Flume进程由一个或多个agent组成, 每个agent中包含了采集数据(Source),聚合数据(Channel)和传输数据(Sink)三个组件.
  • Flume的官方API: 点此进入

一, Source(接收并处理数据)

  • Source 是负责接收数据到Flume Agent的组件, Source组件可以处理各种类型, 各种格式的日志数据, 包括avro、thrift、exec、jms、spooling directorynetcattaildir、sequence generator、syslog、http、legacy。

1.1 exec 类型的Soruce组件

[exec 组件的用处]

  • 利用exec source可以对文件执行监控命令(tail -F)等等, 实时监控和记录某一个文件的数据变化, 但是不能保证数据不丢失.(即Flume不运行,或者Shell命令出错的情况下, 数据将会丢失)
  • 官方API:

Flume成功安装的图片 flume组件_Flume成功安装的图片

[典型写法]

# 命名组件
a1.sources = r1

# 配置sources
a1.sources.r1.type = exec
a1.sources.r1.command = #执行的命令. 比如tail -F /文件目录
a1.sources.r1.shell = /bin/bash -c

# 配置channels, sinks

# 绑定channel
a1.sources.r1.channel = c1
  • 实例:

2.2.2-监控单个文件的新增内容

1.2 netcat类型的Source组件

[netcat 组件的用处]

  • 使用netcat source 组件监听绑定某一主机上的某个端口, 并从中获取这些数据.
  • 官方API(NetCat TCP sources):

Flume成功安装的图片 flume组件_数据_02

[典型写法]

前提: 安装netcat

sudo yum install -y nc

配置文件:

#命名组件
a1.sources = r1

#配置sources
a1.sources.r1.type = netcat
a1.sources.r1.bind = #监听的主机名
a1.sources.r1.port = #监听主机的端口

# 配置channels, sinks

# 绑定channel
a1.sources.r1.channel = c1
  • 实例:

2.2.1-监控端口数据

1.3 spooldir类型的Source组件

[spooling directory 组件的用处]

  • spolldir source 主要是监控单一个目录下产生的新文件, 并把这个文件记录或上传, 被上传的文件会以.COMPLETED后缀结尾, 后期会忽略带这个后缀的文件即便内容发生改变.
  • spooldir 对监控的目录,每500ms扫描一次, 遇到重名文件会报错(直接死循环,无法继续使用)
  • spooldir 能保证数据不丢失,能实现断点续传, 但延迟较高, 不能实时监控.
  • 官方API:

Flume成功安装的图片 flume组件_hdfs_03

[典型写法]

#命名组件
a1.sources = r1

#配置sources
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = #需要监控的目录(spooldir不监控子目录)

a1.sources.r1.fileSuffix = .COMPLETED#上传完成的文件的后缀
a1.sources.r1.fileHeader = true #
a1.sources.r1.ignorePattern = ([^ ]*\.tmp) #忽略以.tmp结尾的文件, 不上传.

# 配置channels, sinks

#绑定channel
a1.sources.r1.channel = c1
  • 实例:

2.2.3 实时监控目录下新文件

1.4 taildir类型的Source组件

[taildir directory 组件的用处]

  • taildir sources 用来递归的监控指定的多个目录下的所有文件中的实时新增数据.
  • 相比于exec sources, taildir能够支持断点续传(会使用一个json文件记录上次监控文件的最后一次新增数据的位置), 进一步说, taildir不会丢失监控数据.
  • 相比于spooldir sources, taildir既能够监控多个目录, 还能监控多个目录下的子目录(所谓递归), 又能实时追踪每个老文件的新增数据和产生的全新文件,不像spool dir那样只监控新增的文件
  • 官方API:

Flume成功安装的图片 flume组件_hdfs_04

[典型写法]

#命名组件
a1.sources = r1

#配置sources
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1,f2... #监控的文件组(组里面都是设置的目录)
a1.sources.r1.filegroups.f1 =  #/目录1/文件
a1.sources.r1.filegroups.f1 =  #/目录2/
######## taildir的positionFile文件, 自动创建json文件, 定期记录flume读取文件的位置, 实现断点续传
a1.sources.r1.positionFile = #/目录/tail_dir.json

# 配置channels, sinks

# 绑定channel
a1.sources.r1.channel = c1
  • 实例:

2.2.4, 实时追踪目录下的多个文件

1.4 avro类型的Source组件

见最后一节

二, Channel

[Channel 组件的用处]

Flume成功安装的图片 flume组件_Flume成功安装的图片_05

2.1 memory类型的Channel组件

[memory channel 组件的用处]

  • 功能: 见上面.
  • 官方API:

Flume成功安装的图片 flume组件_Flume成功安装的图片_06

[典型写法]

# 命名组件
a1.channel = c1

# 配置Channel
a1.channel.c1.type = memory
a1.channel.c1.capacity = 1000              #channel中存储的最多event数
a1.channel.c1.transactionCapacity = 100    #每一次事务中, channel从sources拉取或被sink请求的event数量

# 配置sourcs, sinks
# 绑定各组件到channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
  • 实例: 略

2.2 file类型的Channel组件

2.3 kafka类型的Channel组件

三, Sink

3.1 logger类型的sink组件

[logger sink 组件的用处]

  • Logs event at INFO level. Typically useful for testing/debugging purpose.
  • 官方API说明:

Flume成功安装的图片 flume组件_Source_07

[典型写法]

#命名
a1.sinks = k1

#配置sources, channels

#配置sinks
a1.sinks.type = logger

#绑定channel
a1.sinks.k1.channel = c1

3.2 hdfs类型的sink组件

[hdfs sink 组件的用处]
hdfs sink将event写入 Hadoop 分布式文件系统 (HDFS)。 它目前支持文本和序列文件。 它支持两种文件类型的压缩。 可以根据经过的时间或数据大小或事件数量定期滚动文件(关闭当前文件并创建一个新文件)。 它还按时间戳或事件发生的机器等属性对数据进行存储分区/分区。 HDFS 目录路径可能包含格式化转义序列,这些序列将由 HDFS 接收器替换以生成目录/文件名来存储事件。 使用hdfs sink需要安装 hadoop并且在flume 的lib目录中要包含haoop相关的jar包,以便 Flume 可以使用 Hadoop jars 与 HDFS 集群通信。 请注意,需要支持 sync() 调用的 Hadoop 版本。

  • 官方API:

HDFS Sink

[典型写法]

  1. 引入hadoop相关的Jar包 (见下面实例)
  2. 撰写配置文件
#命名
a1.sinks = k1

#配置 sources 和 channels

#配置hdfs sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://IP:hdfs内部端口(8020)/目录/%Y%m%d/%H 

############## hdfs sink的自定义设置

### 上传文件的前缀(hdfs.filePrefix)
a1.sinks.k1.hdfs.filePrefix = log_

### 是否按时间滚动文件夹(hdfs.round)-->每一段时间重新创建文件并写入监控文件的内容
a1.sinks.k1.hdfs.round = true
### 重新定义创建新文件夹的时间间隔
a1.sinks.k1.hdfs.roundUnit = hour
### 多少倍时间间隔单位创造一个新的文件夹
a1.sinks.k1.hdfs.roundValue = 1

### 是否使用本地时间戳(而不是事件头(evemt head)中的时间戳)
a1.sinks.k1.hdfs.useLocalTimeStamp = true

### 积攒多少个event才flush到HDFS一次
a1.sinks.k1.hdfs.batchSize = 100

### 设置文件类型, 可支持压缩, 还可以解决乱码问题
a1.sinks.k1.hdfs.fileType = DataStream

### 多久(秒)滚动生成一个新文件
a1.sinks.k1.hdfs.rollInterVal = 30

### 设置每个文件的滚动大小(何为滚动? 重命名原日志文件进行归档, 并生成新的日志文件用于log写入)
a1.sinks.k1.hdfs.rollSize = 134217700
a1.sinks.k1.hdfs.rollCount = 0

#绑定channels
a1.sinks.k1.channel = c1
  • 实例

2.4.0 复制和多路复用(单个agent独立完成)

3.3 file_roll类型的sink组件

[file_roll sink 组件的用处]

  • 把flume处理过的日志数据输出到本地文件系统中.
  • 注意:写入的目标目录一定要存在!
  • 官方API说明:

[典型写法]

#命名sink
a1.sinks = k1

#配置sources和channels

#配置sinks
a1.sinks.k1.type =file_roll
a1.sinks.k1.sink.directiory = #输出目录, 注意目录一定要是已经存在的!

#绑定channel
a1.sinks.k1.channel = c1
  • 实例:

2.4.0 复制和多路复用(单个agent独立完成)

3.4 avro类型的Sink和Source组件

[avro sink/avro source组件的用处]

Q: 什么是Avro?

Avro(读音类似于[ævrə])是Hadoop的一个子项目,
由Hadoop的创始人Doug Cutting牵头开发,
Avro是一个数据序列化系统,设计用于支持大批量数据交换的应用。
它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据。

  • Avro 在Flume中主要是用于在两个agent之间传送数据, 具体表现在从前一个agent的avro sink发出数据, 由后一个agent 的avro sources接收数据进行处理,
  • 正因为如此, 我们通常把avro source 看作是avro sink 的服务端
  • 而且, avro source通常是要比avro sink 先执行, 怕丢数据嘛.

Avro Source 官方API说明:

Flume成功安装的图片 flume组件_hdfs_08

栗子:

Flume成功安装的图片 flume组件_hdfs_09

Avro Sink 官方API说明:

Flume成功安装的图片 flume组件_hdfs_10

栗子:

Flume成功安装的图片 flume组件_Flume成功安装的图片_11

总结:

Flume成功安装的图片 flume组件_hdfs_12

[实际栗子]

2.4.1 复制和多路复用(多个agent配合完成)2.4.2 负载均衡/故障转移(多个agent配合完成)