栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

大数据理论与实践7 分布式数据采集工具Flume

大数据理论与实践7 分布式数据采集工具Flume

Flume
  • Flume简介
  • 原理
    • 基本概念
    • 组件
      • Source组件
      • Channel组件
      • Sink组件
    • 数据流
    • Flume架构
      • 单层架构
      • 多层架构
  • 使用
    • 安装
    • Agent配置
    • Flume运行
  • 参考

Flume简介

Flume是一个分布式海量数据采集、聚合和传输系统。可以看做一个管道系统,从数据源到数据目的地。数据源可以是文件、日志、传感器等,目的地可以是HDFS、NoSQL等等。
数据流模型:Source → Channel(暂存) → Sink(取数据并交给目的地)。套件组配很灵活,随意组配。
在Channel这块,支持事务,支持重读重写,保证消息传递的可靠性。
支持高可用,Agent(Source+Channel+Sink=Agent)主备切换。
主要用于非关系型数据采集。

原理 基本概念
  • Event:事件,最小数据传输单元,由Header和Body组成
  • Agent:代理,JVM进程,最小运行单元,由Source、Channel和Sink三个基本组件构成,负责将外部数据源产生的数据以Event的形式传输到目的地
    Source:负责对接各种外部数据源,将采集到的数据封装成Event,然后写入Channel
    Channel:Event暂存容器,负责保存Source发送的Event,直至被Sink成功读取
    Sink:负责从Channel读取Event,然后将其写入外部存储,或传输给下一阶段的Agent
    映射关系:1个Source → 多个Channel,1个Channel → 多个Sink,1个Sink → 1个Channel
组件 Source组件

对接各种外部数据源,将采集到的数据封装成Event,然后写入Channel。
一个Source可向多个Channel发送Event。Flume内置类型丰富的Source,同时用户可自定义Source。

类型Type(参数)说明
Exec Sourceexec监听Linux命令的标准输出
Spooling Directory Sourcespooldir监听目录下的新文件,不支持断点续传和嵌套目录
Taildir SourceTAILDIR监听目录或文件,支持断点续传
Avro Sourceavro启动Avro Server,通过RPC接收Avro数据,可与上一级Agent连接
HTTP Sourcehttp启动Http Server,通过Http Post接收数据
Kafka Sourceorg.apache.flume.source.kafka.KafkaSource从Kafka中读取数据
JMS Sourcejms从JMS源中读取数据
Channel组件

Event中转暂存区,存储Source采集但未被Sink读取的Event。
为了平衡Source采集、Sink读取的速度,可视为Flume内部的消息队列。线程安全并具有事务性,支持Source写失败重写和Sink读失败重读。

类型Type(参数)说明
Memory Channelmemory内存作为Channel,读写速度快,但存储容量小,数据易丢失
File Channelfile本地磁盘文件作为Channel,存储容量大,数据较安全,但读写速度较慢
JDBC Channeljdbc关系数据库作为Channel,内置Derby,数据安全可恢复
Kafka Channelorg.apache.flume.channel.kafka.KafkaChannelKafka作为Channel,读写速度快,存储容量大,容错能力强(生产中常用)
Sink组件

从Channel读取Event,将其写入外部存储,或传输到下一阶段的Agent。
一个Sink只能从一个Channel中读取Event。Sink成功读取Event后,向Channel提交事务,Event被删除,否则Channel会等待Sink重新读取。

类型Type(参数)说明
Avro Sinkavro常用于对接下一阶段的Avro Source,通过RPC实现端到端的批量压缩数据传输
HDFS Sinkhdfs将Event写入HDFS,可生成文本文件,支持数据压缩
Kafka Sinkorg.apache.flume.sink.kafka.KafkaSink将Event写入Kafka指定主题
FileRoll Sink file_roll将Event写入本地文件系统
数据流

最基本的数据流:直接落盘
多个Agent相连:

一个source分成多个Channel:
一个Agent分多个Agent:
典型的双层架构,中间架一层做聚合,不会产生那么多小文件:

Flume架构 单层架构


优点:架构简单,使用方便,占用资源较少
缺点:

  • 如果采集的数据源或Agent较多,将Event写入到HDFS会产生很多小文件
  • 外部存储升级维护或发生故障,需对采集层的所有Agent做处理,人力成本较高,系统稳定性较差
  • 系统安全性较差(数据源到目的地直接联系,权限需要在里面直接写明)
  • 数据源管理较混乱
多层架构


优点:

  • 各类日志数据分层处理,架构清晰,运维高效,降低人工误操作风险
  • 避免产生过多小文件,提高系统稳定性和处理能力
  • 对外不会暴露系统关键信息,降低攻击风险,显著提升安全性(不直接连,权限分开)
  • 各关联系统易于升级维护(更换外部存储时修改很少)

缺点:
部署相对复杂,占用资源较多

使用 安装

需要JDK1.7及以上版本。
安装验证:在Flume安装目录下,运行命令./bin/flume-ng version,查看Flume版本信息

Agent配置

示例:

a1.sources = r1
a1.sinks = k1
a1.channels = c1

a1.sources.r1.type = netcat // Source类型为netcat,监听指定的Socket端口
a1.sources.r1.bind = localhost //主机名
a1.sources.r1.port = 44444

a1.sinks.k1.type = logger // Sink类型为logger,将Event输出到控制台

a1.channels.c1.type = memory // Channel类型为memory,Event缓存在内存中
a1.channels.c1.capacity = 1000 //总共允许放1000条
a1.channels.c1.transactionCapacity = 100 //一次写入channel的事务数目

a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1 // 一个Sink只能连接一个Channel
Flume运行
  1. 编写Agent配置文件(*.conf)
  2. 在命令行运行Agent、进入Flume安装目录、运行以下命令
bin/flume-ng agent --conf conf --conf-file example.conf
--name a1 -D flume.root.logger = INFO, console
Command OptionsDescription
–confAgent配置文件目录
–conf-fileAgent配置文件名(*.conf)
–nameAgent名称
-DJVM参数
参考

课程内容来自:南京大学+星环科技课程,大数据大数据理论与实践课程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/354543.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号