文章目录
在flume目录下创建一个data目录,用来放置配置文件
mkdir data
1. 创建一个basic.conf
作为初始的配置文件,采用avro
作为source
,logger
作为sink
basic.conf
# 初始化一个agent
a1.sources=r1
a1.channels=c1
a1.sinks=s1
# 配置sources
# 使用netcat作为sources,代表的是发送TCP请求
a1.sources.r1.type=netcat
# 表示从本地获取数据
a1.sources.r1.bind=0.0.0.0
# 绑定一个端口号
a1.sources.r1.port=8090
# 配置channel
a1.channels.c1.type=memory
# 每个channel最多存储一千条数据(对应的是1000个event事件)
a1.channels.c1.capacity=1000
# 每一次提供100条数据给sink进行输出
a1.channels.c1.transactionCapacity=100
# 配置sink
# 表示以logger的形式输出在控制台
a1.sinks.s1.type=logger
# channel sink source之间的绑定
# channels代表一个sources可以绑定多个channel
a1.sources.r1.channels=c1
# 给s1绑定一个通道
# channel代表一个sink只能由一个channel来提供
a1.sinks.s1.channel=c1
在flume的bin
目录下输入
sh flume-ng agent -n a1 -c ../conf/ -f ../data/basic.conf -Dflume.root.logger=INFO,console
即可启动flume,看到a1, r1, s1
都被启动则成功。此时在本机输入
nc localhost 8090 #这里的端口8090要和上述basic.conf中的a1.sources.r1.port对应,作为输入
即可作为flume的输入,可以在flume的控制台查看到输出。
2. 一些常用的source和sink配置 (对应的输入输出方法自行百度)
avrosource.conf
# a1是Agent的名称
a1.sources=r1
a1.channels=c1
a1.sinks=s1
# 配置Source
# NC代表的是发送TCP请求
a1.sources.r1.type=avro
# 表示从本地获取数据
a1.sources.r1.bind=0.0.0.0
# 绑定端口号
a1.sources.r1.port=8090
# 配置channel
a1.channels.c1.type=memory
# 最多存储1000条数据(对应的1000个event事件)
a1.channels.c1.capacity=1000
# 每一次提供100条数据给sink
a1.channels.c1.transactionCapacity=100
# 配置sink
# 表示以日志的形式输出在控制台
a1.sinks.s1.type=logger
# channel和sink以及source之间的绑定
# 给r1的source绑定一个或多个通道
a1.sources.r1.channels=c1
# 给s1绑定一个通道
a1.sinks.s1.channel=c1
execsource.conf
# a1是Agent的名称
a1.sources=r1
a1.channels=c1
a1.sinks=s1
# 配置Source
# NC代表的是发送TCP请求
a1.sources.r1.type=exec
a1.sources.r1.command=ping hadoop02
# 表示从本地获取数据
a1.sources.r1.bind=0.0.0.0
# 绑定端口号
a1.sources.r1.port=8090
# 配置channel
a1.channels.c1.type=memory
# 最多存储1000条数据(对应的1000个event事件)
a1.channels.c1.capacity=1000
# 每一次提供100条数据给sink
a1.channels.c1.transactionCapacity=100
# 配置sink
# 表示以日志的形式输出在控制台
a1.sinks.s1.type=logger
# channel和sink以及source之间的绑定
# 给r1的source绑定一个或多个通道
a1.sources.r1.channels=c1
# 给s1绑定一个通道
a1.sinks.s1.channel=c1
httpsource.conf
# a1是Agent的名称
a1.sources=r1
a1.channels=c1
a1.sinks=s1
# 配置Source
# NC代表的是发送TCP请求
a1.sources.r1.type=http
# 表示从本地获取数据
# a1.sources.r1.bind=0.0.0.0
# 绑定端口号
a1.sources.r1.port=8090
# 配置channel
a1.channels.c1.type=memory
# 最多存储1000条数据(对应的1000个event事件)
a1.channels.c1.capacity=1000
# 每一次提供100条数据给sink
a1.channels.c1.transactionCapacity=100
# 配置sink
# 表示以日志的形式输出在控制台
a1.sinks.s1.type=logger
# channel和sink以及source之间的绑定
# 给r1的source绑定一个或多个通道
a1.sources.r1.channels=c1
# 给s1绑定一个通道
a1.sinks.s1.channel=c1
spoolsource.conf
# a1是Agent的名称
a1.sources=r1
a1.channels=c1
a1.sinks=s1
# 配置Source
# NC代表的是发送TCP请求
a1.sources.r1.type=spooldir
# 指定spool坚挺的指定目录
a1.sources.r1.spoolDir=/home/flumedata
# 表示从本地获取数据
a1.sources.r1.bind=0.0.0.0
# 绑定端口号
a1.sources.r1.port=8090
# 配置channel
a1.channels.c1.type=memory
# 最多存储1000条数据(对应的1000个event事件)
a1.channels.c1.capacity=1000
# 每一次提供100条数据给sink
a1.channels.c1.transactionCapacity=100
# 配置sink
# 表示以日志的形式输出在控制台
a1.sinks.s1.type=logger
# channel和sink以及source之间的绑定
# 给r1的source绑定一个或多个通道
a1.sources.r1.channels=c1
# 给s1绑定一个通道
a1.sinks.s1.channel=c1
filesink.conf
# a1是Agent的名称
a1.sources=r1
a1.channels=c1
a1.sinks=s1
# 配置Source
# NC代表的是发送TCP请求
a1.sources.r1.type=netcat
# 表示从本地获取数据
a1.sources.r1.bind=0.0.0.0
# 绑定端口号
a1.sources.r1.port=8090
# 配置channel
a1.channels.c1.type=memory
# 最多存储1000条数据(对应的1000个event事件)
a1.channels.c1.capacity=1000
# 每一次提供100条数据给sink
a1.channels.c1.transactionCapacity=100
# 配置sink
# 表示以日志的形式输出在控制台
a1.sinks.s1.type=file_roll
# 指定sink输出日志到file的路径
a1.sinks.s1.sink.directory=/home/flumelog
# 每隔一个小时产生一个文件,防止文件过多,文件夹太庞大
a1.sinks.s1.sink.rollInterval=3600
# channel和sink以及source之间的绑定
# 给r1的source绑定一个或多个通道
a1.sources.r1.channels=c1
# 给s1绑定一个通道
a1.sinks.s1.channel=c1
hdfssink.conf
# a1是Agent的名称
a1.sources=r1
a1.channels=c1
a1.sinks=s1
# 配置Source
# NC代表的是发送TCP请求
a1.sources.r1.type=netcat
# 表示从本地获取数据
a1.sources.r1.bind=0.0.0.0
# 绑定端口号
a1.sources.r1.port=8090
# 配置channel
a1.channels.c1.type=memory
# 最多存储1000条数据(对应的1000个event事件)
a1.channels.c1.capacity=1000
# 每一次提供100条数据给sink
a1.channels.c1.transactionCapacity=100
# 配置sink
# 表示以日志的形式输出在控制台
a1.sinks.s1.type=hdfs
# sink输出要写到分布式文件系统的路径
a1.sinks.s1.hdfs.path=hdfs://hadoop01:9000/flume
# 利用流的形式写到分布式文件系统
a1.sinks.s1.hdfs.fileType=DataStream
# channel和sink以及source之间的绑定
# 给r1的source绑定一个或多个通道
a1.sources.r1.channels=c1
# 给s1绑定一个通道
a1.sinks.s1.channel=c1
2. 多级配置
基本结构如下图,用三个节点来进行多级的流动
在三个节点的flume目录下写一个avrosink.conf
的配置文件,其内容分别是:
-
其中hadoop01的节点中,输入为
netcat
,可以设置为任意,输出为avro
,指向hadoop02的8080
端口 -
然后hadoop02以
8080
端口接收的数据为输入,即avro
输入,输出为avro
格式,指向hadoop03的8070
端口 -
然后hadoop03以
avro
接收8070
端口传来的数据,最后以logger
打印在控制台,当然此时的输出可以为任意。
配置文件的具体内容
hadoop01下的avrosink.conf
# a1是Agent的名称
a1.sources=r1
a1.channels=c1
a1.sinks=s1
# 配置Source
# NC代表的是发送TCP请求
a1.sources.r1.type=netcat
# 表示从本地获取数据
a1.sources.r1.bind=0.0.0.0
# 绑定端口号
a1.sources.r1.port=8090
# 配置channel
a1.channels.c1.type=memory
# 最多存储1000条数据(对应的1000个event事件)
a1.channels.c1.capacity=1000
# 每一次提供100条数据给sink
a1.channels.c1.transactionCapacity=100
# 配置sink
# 表示以日志的形式输出在控制台
a1.sinks.s1.type=avro
# 发送到哪个节点
a1.sinks.s1.hostname=hadoop02
a1.sinks.s1.port=8080
# channel和sink以及source之间的绑定
# 给r1的source绑定一个或多个通道
a1.sources.r1.channels=c1
# 给s1绑定一个通道
a1.sinks.s1.channel=c1
hadoop01下的avrosink.conf
# a1是Agent的名称
a1.sources=r1
a1.channels=c1
a1.sinks=s1
# 配置Source
# NC代表的是发送TCP请求
a1.sources.r1.type=avro
# 表示从本地获取数据
a1.sources.r1.bind=0.0.0.0
# 绑定端口号
a1.sources.r1.port=8080
# 配置channel
a1.channels.c1.type=memory
# 最多存储1000条数据(对应的1000个event事件)
a1.channels.c1.capacity=1000
# 每一次提供100条数据给sink
a1.channels.c1.transactionCapacity=100
# 配置sink
# 表示以日志的形式输出在控制台
a1.sinks.s1.type=avro
# 发送到哪个节点
a1.sinks.s1.hostname=hadoop03
a1.sinks.s1.port=8070
# channel和sink以及source之间的绑定
# 给r1的source绑定一个或多个通道
a1.sources.r1.channels=c1
# 给s1绑定一个通道
a1.sinks.s1.channel=c1
hadoop01下的avrosink.conf
# a1是Agent的名称
a1.sources=r1
a1.channels=c1
a1.sinks=s1
# 配置Source
# NC代表的是发送TCP请求
a1.sources.r1.type=avro
# 表示从本地获取数据
a1.sources.r1.bind=0.0.0.0
# 绑定端口号
a1.sources.r1.port=8070
# 配置channel
a1.channels.c1.type=memory
# 最多存储1000条数据(对应的1000个event事件)
a1.channels.c1.capacity=1000
# 每一次提供100条数据给sink
a1.channels.c1.transactionCapacity=100
# 配置sink
# 表示以日志的形式输出在控制台
a1.sinks.s1.type=logger
# a1.sinks.s1.hdfs.path=hdfs://hadoop01:9000/flume
# a1.sinks.s1.hdfs.fileType=DataStream
# channel和sink以及source之间的绑定
# 给r1的source绑定一个或多个通道
a1.sources.r1.channels=c1
# 给s1绑定一个通道
a1.sinks.s1.channel=c1
配置完以上后,先在hadoop03
中打开flume,再打开hadoop02
的flume,最后打开hadoop01
的flume,在hadoop
中使用nc
输入,在hadoop03
中可以看到控制台打印。
完结撒花 😃