大数据——Flume日志收集

Apache Flume简介

  • Flume用于将多种来源的日志以流的方式传输到Hadoop或者其它目的地
    • 一种可靠、可用的高效分布式数据收集服务
  • Flume拥有基于数据流上的简单灵活架构,支持容错、故障转移与恢复
  • 由Cloudera 2009年捐赠给Apache,现为Apache顶级项目

在这里插入图片描述

Flume架构

  • Client:客户端,数据产生的地方,如Web服务器
  • Event:事件,指通过Agent传输的单个数据包,如日志数据通常对应一行数据
  • Agent:代理,一个独立的JVM进程
    • Flume 以一个或多个Agent部署运行

    • Agent包含三个组件

      Source
      Channel
      Sink
      

在这里插入图片描述

Flume安装和配置

Flume安装和使用

Hello Flume

agent.sources = s1    
agent.channels = c1  
agent.sinks = sk1    
#设置Source为netcat 端口为5678,使用的channel为c1  
agent.sources.s1.type = netcat  
agent.sources.s1.bind = localhost  
agent.sources.s1.port = 5678  
agent.sources.s1.channels = c1    
#设置Sink为logger模式,使用的channel为c1  
agent.sinks.sk1.type = logger  
agent.sinks.sk1.channel = c1  
#设置channel为capacity 
agent.channels.c1.type = memory
bin/flume-ng agent --name agent -f h0.conf -Dflume.root.logger=INFO,console

Flume组件

  • Source
  • SourceRunner
  • Interceptor
  • Channel
  • ChannelSelector
  • ChannelProcessor
  • Sink
  • SinkRunner
  • SinkProcessor
  • SinkSelector

Flume工作流程

在这里插入图片描述

Source

  • exec source
  • spooling directory source
  • http source
  • avro source
  • kafka source
  • netcat source

exec source

  • 执行Linux指令,并消费指令返回的结果,如“tail -f”
属性缺省值描述
type-exec
command-"tail -f xxx.log"
shell-选择系统Shell程序,如"/bin/sh"
batchSize20发送给channel的最大行数

spooling directory source

  • 从磁盘文件夹中获取文件数据,可避免重启或者发送失败后数据丢失,还可用于监控文件夹新文件
属性缺省值描述
type-spooldir
spooldir-需读取的文件夹
fileSuffix.COMPLETED
deletePolicynever文件完成后删除策略:never和immediate

http source

  • 用于接收HTTP的Get和Post请求
属性缺省值描述
type-http
post-监听端口
bind0.0.0.0绑定IP
handlerorg.apache.flume.source.http.JSONHandler数据处理程序类全名
curl -XPOST localhost:5140 -d'[{"headers":{"h1":"v1","h2":"v2"},"body":"hello body"}]'

avro source

  • 监听Avro端口,并从外部Avro客户端接收events
属性缺省值描述
type-avro
bind-绑定IP地址
port-端口
threads-最大工作线程数量

Channel

  • Memory Channel

    • event保存在Java Heap中。如果允许数据小量丢失,推荐使用
  • File Channel

    • event保存在本地文件中,可靠性高,但吞吐量低于Memory Channel
  • JDBC Channel

    • event保存在关系数据中,一般不推荐使用
  • Kafka Channel

Sink

  • Sink负责从Channel收集数据
  • 常用Sink
    • avro sink
    • HDFS sink
    • Hive sink
    • HBase sink
    • Kafka sink

avro sink

  • 作为avro客户端向avro服务端发送avro事件
属性缺省值描述
type-avro
hostname-服务端IP地址
post-端口
batch-size100批量发送事件数量

HDFS sink

  • 将事件写入Hadoop分布式文件系统(HDFS)
属性缺省值描述
type-hdfs
hdfs.path-hdfs目录
hdfs.filePrefixFlumeData文件前缀
hdfs.fileSuffix-文件后缀

Hive sink

  • 包含分隔文本或JSON数据流事件直接流入Hive表或分区
  • 传入的事件数据字段映射到Hive表中相应的列
属性缺省值描述
type-hive
hive.metastore-Hive metastore URI
hive.database-Hive数据库名称
hive.table-Hive表
serializer-序列化器负责从事件中分析出字段并将它们映射为Hive表中的列。序列化器的选择取决于数据的格式。支持序列化器:DELIMITED和JSON

HBase sink

属性缺省值描述
type-hbase
table-要写入的Hbase表名
columnFamily-要写入的Hbase列族
zookeeperQuorum-对应hbase.zookeeper.quorum
znodeParent/hbasezookeeper.znode.parent
serializerorg.apache.flume.sink.hbase.SimpleHbaseEventSerializer一次事件插入一列
serializer.payloadColumn-列名col1

多层代理

  • 多跳(multi-agent flow)
    在这里插入图片描述
  • 多路数据流(Multiplexing the flow)
    在这里插入图片描述
  • 合并(Consolidation),将多个源合并到一个目的地
    在这里插入图片描述

Flume Sink组

  • sink组是用来创建逻辑上的一组sink
  • sink组的行为是由sink处理器(processor)决定的,它决定了event的路由策略
  • processor包括故障转移和负载均衡两类
//故障转移
a1.sinkgroups = g1
a1.sinkgroups.g1.sinks = k1 k2
a1.sinkgroups.g1.processor.type = failover
a1.sinkgroups.g1.processor.priority.k1 = 5
a1.sinkgroups.g1.processor.priority.k2 = 10
a1.sinkgroups.g1.processor.maxpenalty = 10000
//负载均衡
a1.sinkgroups = g1
a1.sinkgroups.g1.sinks = k1 k2
a1.sinkgroups.g1.processor.type = load_balance
a1.sinkgroups.g1.processor.backoff = true
a1.sinkgroups.g1.processor.selector = random

拦截器

  • 拦截器可修改或丢弃事件
    • 设置在source和channel之间
  • 内置拦截器
    • Hostlnterceptor:在event header中插入“hostname”
    • Timestamplnterceptor:插入时间戳
    • Staticlnceptor:插入key-value
    • UUIDlnceptor:插入UUID
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值