Flume--总结

数据采集

目的:将各种原始数据采集到大数据平台中

采集工具
  • 文件:Flume的主要应用场景
  • RDBMS:Sqoop的主要应用
采集方式
  • 全量:每次都是将所有数据进行采集
    • 适合于数据迁移
  • 增量:每次都是将最新的数据进行采集
    • 适合于数据同步【主要使用这个】

Flume功能及特点

  • 实时数据流采集工具
  • 功能:实现将数据进行采集
  • 特点
    • 功能会比较全面:提供了各种各样的已经开发好的采集的组件,支持自定义开发组件
    • 使用相对简单:定义一个配置文件,定义配置即可
    • 性能比较高:实时性比较高,将数据动态监听,变成数据流,只要数据一更新,就立即会被采集
    • 稳定性比较好:提供了负载均衡和故障转移的架构,保证Flume的运行稳定性

Flume架构

架构一:一个agent中可以包含多个source、channel、sink

如果有多个目标地,需要多个sink,每个sink对应一个channel

  • 功能
    • 多个数据源要采集到一起
    • 一份数据要发送到多个地方
架构二:Flume的级联架构,两层Flume
  • 第一层:负责采集数据,每台机器都有一个Flume,采集这台机器的数据
  • 第二层:负责汇总数据,将第一层所有数据进行汇总然后写入目标地
  • 功能:避免多台机器并发直接写入目标地,影响目标地的IO

三大基本组件

Source
  • 功能:监听数据源,采集数据,将数据变成Event数据流,发送给Channel
  • 常见类型
    • exec:动态监听单个文件数据的变化,一般与tail -f搭配
      • 数据永远写入一个文件,只有这一个文件在动态的变化
      • 不能监听多个文件
    • spool dir:动态监听单个目录中文件的变化
      • 采集的数据是多个文件,只要文件一产生就可以立即将文件所有内容进行采集,文件不可以动态变化
      • 适合先生成一个临时文件,写完以后,变成日志文件
      • 不能监听每个文件的动态变化
    • taildir动态监听多个文件以及每个文件的动态变化
      • 采集的数据是多个文件,每个文件都可以动态变化
      • 适合于直接生成一个日志文件,追加的写入这个日志文件
    • avro:基于avro协议的网络端口的数据采集
      • 监听一个端口,将端口中的数据进行采集
Channel
  • 功能:临时缓存数据
  • 常见类型
    • mem:将数据临时缓存在内存中
      • 数据量小,性能要求高
    • file:将数据临时缓存在磁盘中
      • 数据量大,性能要求不高
Sink
  • 功能:从Channel中取数据,发送到目标地
  • 常见类型
    • hdfs:用于将数据采集到HDFS上,应用于离线架构
      • 如何决定HDFS上写入文件的大小
      • 使用HDFS sink代替Hive Sink
      • 将写入HDFS的目录作为Hive表的目录
      • 如果是以时间分区的方式写入HDFS,在Hive手动关联分区目录
      • 方式一:msck repair table tbname
      • 方式二:alter table add partition
    • kafka:用于将数据采集存储到Kafka中,应用于实时架构
    • avro:基于avro协议的网络端口的数据发送
      • 将数据发送到某个端口上

三大高级组件

Source Interceptor
  • 功能:用于拦截source转换 的所有event,对event进行处理
    • 第一类:在event的头部添加KV对
    • 第二类:处理event的body中的数据
  • 常用的拦截器
    • Timestamp:用于在每个Event头部添加时间戳
      • timestamp=时间戳
    • Host:用于在每个Event头部添加主机名
      • host=主机名
    • Static:用于在每个Event头部自定义添加KV
      • key=value
    • RegexFilter:用于对Event的数据进行正则匹配过滤
Channel Selector
  • 功能:如果一个source对接多个channel,用于决定source如何将数据给channle
  • 方式
    • replicas:默认的方式
      • source会将数据给每个channel一份
    • mutiple:可选的方式
      • source可以根据event头部某个Key的值来判断给哪个channel
      • 选择性的将数据给不同的channel
Sink Processor
  • 功能:将多个sink封装成一个整体:sinkgroup,用于实现负载均衡和故障转移
  • 应用:在工作中都搭配级联架构两层Flume实现Collect层的高可用
  • 负载均衡:所有sink是一起工作
    • 具体一个event归哪个sink处理,由我们自己配置决定
    • 随机
    • 轮询
  • 故障转移:只有一个sink工作,其他sink作为备份
    • 如何决定谁是工作状态:权重决定

Flume自己是不是分布式的服务工具?

  • 不是的
  • 但是它能实现分布式的数据采集架构
  • Flume底层只是一个封装好的Java程序

Flume开发

  • step1:构建一个properties配置文件
  • step2:定义agent、source、channel、sink
  • step3:运行Flume的程序
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值