Flume的安装和配置

FLume

核心概念

一个 flume 就是一个 agent。agent 由三部分组成。可以灵活配置

图片

下载安装

下载 bin 包,下载就可使用。绿色软件。

1
http://www.apache.org/dyn/closer.lua/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz

配置 JAVA_HOME 环境变量。用 java 1.8 jdk。

快速开始 文档

完整文档 点击

参考

Troubleshooting

使用Flume拉取到HDFS中的文件格式错乱

这是因为HDFS Sink的配置中,hdfs.writeFormat属性默认为 “Writable” 会将原先的文件的内容序列化成HDFS的格式,应该手动设置成 hdfs.writeFormat=”text”; 并且 hdfs.fileType 默认是 “SequenceFile” 类型的,是将所有 event 拼成一行,应该该手动设置成 hdfs.fileType=”DataStream”,这样就可以是一行一个event,与原文件格式保持一致

所以啊,要多看文档啊。 有时候英文文档感觉描叙不到位。等我找时间翻译下这个文档。

后台启动

可以用 nohup bin/flume-ng agent -n agent -c conf -f conf/flume-conf.properties > /dev/null &
但是生产环境还是用 supervisor 来管理吧

实战1 配置本机的 HDFS.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 命名
tcm.channels = ch-tcm
tcm.sources = src-tcm
tcm.sinks = sink-tcm
# 配置 agent 的 channels
tcm.channels.ch-tcm.type = file
tcm.channels.ch-tcm.checkpointDir = /channels/checkpoint
tcm.channels.ch-tcm.dataDirs = /channels/data

# 配置 agent 的 sources
tcm.sources.src-tcm.type = spooldir
tcm.sources.src-tcm.spoolDir = /home/wwwroot/hadoop/flume-1.8.0/input/sources

# 配置 sinks
tcm.sinks.sink-tcm.type = hdfs
tcm.sinks.sink-tcm.hdfs.path = /hadoop-2.9.0/flume/%y-%m-%d
# 使用本机时间配置
tcm.sinks.sink-tcm.hdfs.useLocalTimeStamp = true
tcm.sinks.sink-tcm.hdfs.inUsePrefix = .
# 保留源文件的格式
tcm.sinks.sink-tcm.hdfs.writeFormat = Text
# 配置成一行一个 event 认是“SequenceFile”类型的,是将所有event拼成一行,应该该手动设置成hdfs.fileType=“DataStream”,这样就可以是一行一个event,
与原文件格式保持一致
tcm.sinks.sink-tcm.hdfs.fileType = DataStream

# 通过 channel 链接 sources 和 sinks
tcm.sources.src-tcm.channels = ch-tcm
tcm.sinks.sink-tcm.channel = ch-tcm

启动

bin/flume-ng agent --conf conf/ -f conf/flume.conf -Dflume.root.logger=INFO,console -n tcm

实战2 应用服务器上的数据传到 hadoop 的 namenode 服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# namenode 配置 conf/33.10.conf
# 命名
tcm.channels = ch-tcm
tcm.sources = src-tcm
tcm.sinks = sink-tcm

# 配置 agent 的 channels
tcm.channels.ch-tcm.type = file
tcm.channels.ch-tcm.checkpointDir = /channels/checkpoint
tcm.channels.ch-tcm.dataDirs = /channels/data

# 配置 agent 的 sources
tcm.sources.src-tcm.type = avro
tcm.sources.src-tcm.bind = 0.0.0.0
tcm.sources.src-tcm.port = 4545


# 配置 sinks
tcm.sinks.sink-tcm.type = hdfs
tcm.sinks.sink-tcm.hdfs.path = /hadoop-2.9.0/flume/%y-%m-%d
# 使用本机时间配置
tcm.sinks.sink-tcm.hdfs.useLocalTimeStamp = true
tcm.sinks.sink-tcm.hdfs.inUsePrefix = .
# 保留源文件的格式
tcm.sinks.sink-tcm.hdfs.writeFormat = Text
# 配置成一行一个 event 认是“SequenceFile”类型的,是将所有event拼成一行,应该该手动设置成hdfs.fileType=“DataStream”,这样就可以是一行一个event,与原文件格式保持一致
tcm.sinks.sink-tcm.hdfs.fileType = DataStream

# 通过 channel 链接 sources 和 sinks
tcm.sources.src-tcm.channels = ch-tcm
tcm.sinks.sink-tcm.channel = ch-tcm

# 启动命令 bin/flume-ng agent -c conf/ -f conf/33.10.conf -Dflume.root.logger=INFO,console -n tcm

# ================================================================
# 应用服务器 192.168.33.10 conf/f2.conf
# 命名
agent.sources = src_test10
agent.channels = ch_test10
agent.sinks = sink_test10

# 配置 channel
agent.channels.ch_test10.type = memory
agent.channels.ch_test10.capacity = 10000

# 配置 source
agent.sources.src_test10.type = spooldir
agent.sources.src_test10.spoolDir = /tmp/flume
agent.sources.src_test10.deserializer.maxLineLength = 2048
agent.sources.src_test10.interceptors = i2
agent.sources.src_test10.interceptors.i2.type = host
agent.sources.src_test10.interceptors.i2.hostHeader = hostname

# 配置 sinks
agent.sinks.sink_test10.type = avro
agent.sinks.sink_test10.channel = ch_test10
agent.sinks.sink_test10.hostname = 192.168.33.33
agent.sinks.sink_test10.port = 4545

# chanel 链接 source 和 sink
agent.sources.src_test10.channels = ch_test10
agent.sinks.sink_test10.channel = ch_test10

## 启动 bin/flume-ng agent -c conf/ -f conf/f2.conf -Dflume.root.logger=INFO,console -n agent