Apache Flume笔记

Apache Flume

  • 概述

    • flume是一款大数据中海量数据采集传输汇总的软件。特别指的是数据流转的过程,或者说是数据搬运的过程。把数据从一个存储介质通过flume传递到另一个存储介质中。
  • 核心组件

    • source :用于对接各个不同的数据源
    • sink:用于对接各个不同存储数据的目的地(数据下沉地)
    • channel:用于中间临时存储缓存数据
  • 运行机制

    • flume本身是java程序 在需要采集数据机器上启动 ----->agent进程

    • agent进程里面包含了:source sink channel

    • 在flume中,数据被包装成event ,真实的数据是放在event body中

      event是flume中最小的数据单元

  • 运行架构

    • 简单架构

      只需要部署一个agent进程即可

    • 复杂架构

      多个agent之间的串联 相当于大家手拉手共同完成数据的采集传输工作

      在串联的架构中没有主从之分 大家的地位都是一样的


  • flume的安装部署

    • 在conf/flume-env.sh 导入java环境变量

      保证flume工作的时候一定可以正确的加载到环境变量

  • flume开发步骤

    • conf文件夹中的就是根据业务需求编写采集方案配置文件

    • 文件名见名知意 通常以souce-sink.conf

    • 具体需要描述清楚sink source channel组件配置信息 结合官网配置

    • 启动命令

      bin/flume-ng agent --conf conf 
      					--conf-file conf/netcat-logger.conf 
      					--name a1 -Dflume.root.logger=INFO,console  #命令完整版
      
      bin/flume-ng agent -c ./conf 
      					-f ./conf/spool-hdfs.conf 
      					-n a1 -Dflume.root.logger=INFO,console  #命令精简版
      
      --conf#指定配置文件的目录
      --conf-file#指定采集方案路径
      --name  #agent进程名字 要跟采集方案中保持一致
      

  • 案例:监控目录数据变化,把新文件采集到hdfs

    • hdfs sink

      #Name the components on this agent
      a1.sources = r1
      a1.sinks = k1
      a1.channels = c1
      
      #Describe/configure the source
      #注意:不能往监控目中重复丢同名文件,会造成后面再上传文件到文件夹,不会收集了,flume失效
      #避免同名文件:给文件追加时间簇
      a1.sources.r1.type = spooldir
      a1.sources.r1.spoolDir = /root/logs
      a1.sources.r1.fileHeader = true
      
      #Describe the sink
      a1.sinks.k1.type = hdfs
      a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/
      a1.sinks.k1.hdfs.filePrefix = events-
      
      #roll控制写入hdfs文件 以何种方式进行滚动
      a1.sinks.k1.hdfs.rollInterval = 3  #以时间间隔
      a1.sinks.k1.hdfs.rollSize = 20     #以文件大小
      a1.sinks.k1.hdfs.rollCount = 5     #以event个数
      #如果三个都配置  谁先满足谁触发滚动
      #如果不想以某种属性滚动  设置为0即可
      
      a1.sinks.k1.hdfs.batchSize = 1
      
      #是否开启时间上的舍弃  控制文件夹以多少时间间隔滚动
      #以下述为例:就会每10分钟生成一个文件夹
      a1.sinks.k1.hdfs.round = true
      a1.sinks.k1.hdfs.roundValue = 10
      a1.sinks.k1.hdfs.roundUnit = minute
      
      a1.sinks.k1.hdfs.useLocalTimeStamp = true
      #生成的文件类型,默认是Sequencefile,可用DataStream,则为普通文本
      a1.sinks.k1.hdfs.fileType = DataStream
      
      #Use a channel which buffers events in memory
      #capacity:默认该通道中最大的可以存储的event数量
      #trasactionCapacity:每次最大可以从source中拿到或者送到sink中的event数量
      a1.channels.c1.type = memory
      a1.channels.c1.capacity = 1000
      a1.channels.c1.transactionCapacity = 100
      
      #Bind the source and sink to the channel
      a1.sources.r1.channels = c1
      a1.sinks.k1.channel = c1
      
    • spooldir source

      • 注意其监控的文件夹下面不能有同名文件的产生
      • 如果有 报错且罢工 后续就不再进行数据的监视采集了
      • 在企业中通常给文件追加时间戳命名的方式保证文件不会重名
  • 案例:监控文件的变化采集到hdfs

    • exec source 可以执行指定的linux command 把命令的结果作为数据进行收集

      while true; do date >> /root/logs/test.log;done
      #使用该脚本模拟数据实时变化的过程
      

  • flume的负载均衡

    • 所谓的负载均衡 用于解决一个进程或者程序处理不了所有请求 多个进程一起处理的场景
    • 同一个请求只能交给一个进行处理 避免数据重复
    • 如何分配请求就涉及到了负载均衡的算法:轮询(round_robin) 随机(random) 权重
  • flume串联跨网络传输数据

    • avro sink

    • avro source

      使用上述两个组件指定绑定的端口ip 就可以满足数据跨网络的传递 通常用于flume串联架构中

  • flume串联启动

    通常从远离数据源的那一级开始启动


  • flume failover
    • 容错又称之为故障转移 容忍错误的发生。
    • 通常用于解决单点故障 给容易出故障的地方设置备份
    • 备份越多 容错能力越强 但是资源的浪费越严重

  • 静态拦截器
 如果没有使用静态拦截器
  Event: { headers:{} body:  36 Sun Jun  2 18:26 }
  
  使用静态拦截器之后 自己添加kv标识对
  Event: { headers:{type=access} body:  36 Sun Jun  2 18:26 }
  Event: { headers:{type=nginx} body:  36 Sun Jun  2 18:26 }
  Event: { headers:{type=web} body:  36 Sun Jun  2 18:26 }

后续在存放数据的时候可以使用flume的规则语法获取到拦截器添加的kv内容

# 设置正则表达式,匹配指定的数据,这样设置会在数据的header中增加log_type="某个值"
agent1.sources.r1.interceptors.i2.regex = "type":"(\\w+)"
agent1.sources.r1.interceptors.i2.serializers = s1
agent1.sources.r1.interceptors.i2.serializers.s1.name = log_type
  %{type}
  • 模拟数据实时产生
  while true; do echo "access access....." >> /root/logs/access.log;sleep 0.5;done
  while true; do echo "web web....." >> /root/logs/web.log;sleep 0.5;done
  while true; do echo "nginx nginx....." >> /root/logs/nginx.log;sleep 0.5;done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值