Flume学习笔记

Flume

1. 简介

Flume是一个用于有效地从许多不同的源收集,聚合和移动大量日志数据到统一的数据存储中的,分布式、可靠且可用的系统,。

Flume的使用不仅限于日志数据聚合。由于数据源是可定制的,因此Flume可用于传输大量事件数据,包括但不限于网络流量数据,社交媒体生成的数据,电子邮件消息以及几乎任何可能的数据源。

2. 机制

  • Source: 采集数据的组件
  • Channel: 连接Source和Sink,用于缓冲采集到的数据队列
  • Sink: 将数据写入到目标源

flume中的数据传递时被封装为一个Event,Event包括header和body。header存储头信息(key-value),body存储具体的数据(字节数组)。每行文本被序列化为一个event,默认的最大字节数为2048,默认编码为UTF-8。

Flume事件被定义为具有字节有效负载和可选字符串属性集的数据流单元。Flume代理是一个(JVM)进程,它承载事件从外部源流向下一个目标(跃点)的组件。

Flume源消耗由外部源(如Web服务器)传递给它的事件。外部源以目标Flume源识别的格式向Flume发送事件。例如,Avro Flume源可用于从Avro客户端或从Avro接收器发送事件的流中的其他Flume代理接收Avro事件。可以使用Thrift Flume Source定义类似的流程,以接收来自Thrift Sink或Flume Thrift Rpc客户端或Thrift客户端的事件,这些客户端使用Flume thrift协议生成的任何语言编写。当Flume源接收事件时,它将其存储到一个或多个频道。该通道是一个被动存储器,可以保持事件直到它被Flume接收器消耗。文件通道就是一个例子 - 它由本地文件系统支持。接收器从通道中移除事件并将其放入外部存储库(如HDFS(通过Flume HDFS接收器))或将其转发到流中下一个Flume代理(下一跳)的Flume源。给定代理程序中的源和接收器与通道中暂存的事件异步运行。

3. 环境搭建

  • 下载,解压
  • 配置,有3种情况
    • (1)flume安装在hadoop集群中:
      • 复制一份flume-env.sh,在其中添加配置JAVA_HOME
    • (2)flume安装在hadoop集群中,并配置了HA:
      • 复制一份flume-env.sh,在其中添加配置JAVA_HOME
      • core-site.xmlhdfs-site.xml复制到conf目录下
    • (3)flume不在hadoop集群中:
      • 复制一份flume-env.sh,在其中添加配置JAVA_HOME
      • core-site.xmlhdfs-site.xml复制到conf目录下
      • 拷贝运行运行必须的Jar到lib目录下。
        • commons-configuration-*.jar
        • hadoop-common-*.jar
        • hadoop-auth-*.jar
        • hadoop-hdfs-*.jar
  • 测试运行
    1. 编辑运行配置文件 vi conf/test1

      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
      a1.channels.c1.capacity = 1000
      a1.channels.c1.transactionCapacity = 100
      
      # 给source和sink绑定channel
      a1.sources.r1.channels = c1
      a1.sinks.k1.channel = c1
      
    2. 启动flume:bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console

    3. 使用telnet写入测试数据

      telnet localhost 44444
      > Hello World<ENTER>
      > aaaa<ENTER>
      
    4. 观察flume程序在控制台输出的日志信息

4. 使用

4.1 支持的Source、Sink、Channel

  • Flume Sources
    • Avro Source
    • Thrift Source
    • Exec Source
    • JMS Source
    • Spooling Directory Source
    • Taildir Source
    • Twitter 1% firehose Source
    • Kafka Source
    • NetCat TCP Source
    • NetCat UDP Source
    • Sequence Generator Source
    • Syslog Sources
    • Syslog TCP Source
    • Multiport Syslog TCP Source
    • Syslog UDP Source
    • HTTP Source
    • Stress Source
    • Legacy Sources
    • Avro Legacy Source
    • Thrift Legacy Source
    • Custom Source
    • Scribe Source
  • Flume Sinks
    • HDFS Sink
    • Hive Sink
    • Logger Sink
    • Avro Sink
    • Thrift Sink
    • IRC Sink
    • File Roll Sink 在本地文件系统上存储事件。
    • Null Sink 丢弃从channel收到的所有事件
    • HBaseSinks
      • HBaseSink
      • AsyncHBaseSink
    • MorphlineSolrSink
    • ElasticSearchSink
    • Kite Dataset Sink
    • Kafka Sink
    • HTTP Sink
    • Custom Sink
  • Flume Channels
    • Memory Channel
    • JDBC Channel
    • Kafka Channel
    • File Channel
    • Spillable Memory Channel
    • Pseudo Transaction Channel
    • Custom Channel

4.2 约定别名

别名类型
aagent
cchannel
rsource
ksink
gsink group
iinterceptor
ykey
hhost
sserializer

4.3 范例

  • 收集nginx数据,将数据存储到HDFS中,并设置Channel为file
    a1.sources = r1
    a1.channels = c1
    a1.sinks = k1
    
    a1.sources.r1.type = exec
    a1.sources.r1.command = tail -f /var/log/nginx/access.log
    
    a1.sinks.k1.type = hdfs
    a1.sinks.k1.hdfs.path = hdfs://hh1:9000/flume/nginx/
    a1.sinks.k1.hdfs.useLocalTimeStamp = true   # 在转义序列时,使用本地时间(前缀中使用了时间转义字符)
    a1.sinks.k1.hdfs.filePrefix = %Y%m%D        # 文件前缀
    a1.sinks.k1.hdfs.fileSuffix = .log          # 文件后缀
    a1.sinks.k1.hdfs.rollInterval = 0           # 将临时文件滚动成的最终目标文件的时间间隔,0表示不根据事件间隔生成
    a1.sinks.k1.hdfs.rollSize = 102400          # 当临时文件达到该大小(单位:bytes)时,滚动成目标文件,0表示不根据大小生成
    a1.sinks.k1.hdfs.rollCount = 3              # 当事件数量达到该数量时,滚动成目标文件,0表示不根据事件数量生成
    
    a1.channels.c1.type = file
    a1.channels.c1.checkpointDir=/datas/flume/file/check
    a1.channels.c1.dataDirs=/datas/flume/file/data
    
    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值