Flume


简介

Flume:Hadoop生态中的日志采集、聚合、传输工具。Flume可以收集各个系统的日志,并提供简单的处理,再写入各类数据接受方。一个Flume实例称为Flume agent,它可分为三个部分:

  • Source(数据源):Avro/ Thrift/ Syslog/ Netcat/ HTTP / Spooling Directory/Syslog /Exec /JMS /自定义 /RPC
  • Channel:Memory Channel/ File Channel。位于Source和Sink之间的缓冲区,保存通过Source传入到Flume Agent的数据,直到它被Sink移除;
  • Sink(数据接收器,可自定义):HDFS/ HBase /RPC /Morphine Solr /ElasticSearch /Null Sink/ Rolling Flie Sink/ Logger /自定义

Flume的基本单元是Agent。一个Flume Agent可以连接一个或多个其他的Agent,也可以从一个或多个Agent接收数据。通过互相连接的多个Flume Agent,一个流作业被建立起来。

日志文件(log):系统或软件对于已完成的行为的记录。依赖日志,我们可以追溯故障、找出BUG、统计数据和分析用户行为。适当的日志可以提供帮助,日志太少和太多都会造成不良影响。而Flume是抽取日志、进行分析的重要工具,特别是几近实时的从前端服务器上将数据放到Hadoop中去。

用一个故事理解: 有一个池子,它一头进水,另一头出水,进水口可以配置各种管子,出水口也可以配置各种管子,可以有多个进水口、多个出水口。水术语称为Event,进水口术语称为Source、出水口术语成为Sink、池子术语成为Channel,Source+Channel+Sink,术语称为Agent。如果有需要,还可以把多个Agent连起来。

其实flume的用法很简单:书写一个配置文件,在配置文件当中描述Source/ Channel/ Sink的属性,然后运行一个agent实例,在运行agent实例的过程中会读取配置文件的内容,这样flume就会采集到数据。

Flume官方文档
Flume Wiki
https://www.cnblogs.com/franson-2016/p/8963834.html
https://blog.youkuaiyun.com/weixin_44090237/article/details/89371770
http://www.likuli.com/archives/757/
https://blog.51cto.com/wangyichao/2151587?source=dra


配置

基本命令

# 查看flume版本
flume-ng version

# 启动Flume agent;在Flume安装文件夹的根目录下运行
# agent_name,给定的agent名称;flume-conf.properties.template,配置文件
bin/flume-ng agent -n <agent_name> -c conf -f conf/flume-conf.properties.template

demo(source: netcat; channel: memory; sink: logger)

  • example.conf的注释以#开头,但只能在每行单独写,不能写在配置代码的后方;
  • source: netcat,表示监听某个TCP连接,获取该IP、端口的数据;
  • sink: logger,表示以logger形式输出
# http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html#a-simple-example

# Name the components on the agent
# 该配置文件名称为exanple.conf
# 该agent名称为a1,source名称为r1,sink名称为k1,channel名称为c1
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
# 指定source的类型、source的IP地址、source的监听端口
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# Describe the sink
# 指定sink的类型
a1.sinks.k1.type = logger

# Use a channel which buffers eventsin memory
# 指定channel的类型,及channel存储数据的容量
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
# 连接r1与c1、连接k1与c1
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
# 启动flume-ng的命令
# --name:表示该agent的名称
# --conf:表示../flume-ng/conf的文件路径
# --conf-file:表示该agent对应的配置文件的文件路径
# -Dflume.root.logger=DEBUG:表示logger级别在DEBUG及以上即输出log
# console:表示在Linux会话的控制台输出log
flume-ng agent \
--name a1 \
--conf /opt/cloudera/parcels/CDH-5.15.0-1.cdh5.15.0.p0.21/etc/flume-ng/conf.empty \
--conf-file /opt/cloudera/parcels/CDH-5.15.0-1.cdh5.15.0.p0.21/etc/flume-ng/conf.empty/example.conf \
-Dflume.root.logger=DEBUG, console

# 开启另外一个Linux会话,并使用telnet建立TCP连接;然后随意输入信息,即可在flume-ng界面收到消息日志
telnet 192.168.103.131 44444

组件

Source

Channel

Sink


Tips:

  • Flume和Kafka的异同
    • 当数据会被多个消费者使用,则Kafka具有优越性;若日志只被Hadoop使用,则Flume更好;
    • Flume内置了很多Source和Sink,若能满足需求,则无需开发任何代码;使用Kafka意味着你准备好了编写你自己的生产者和消费者代码;
    • Flume和Kafka可以很好地结合起来使用;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值