一、常用的数据采集工具
(1)Chukwa:一个针对大型分布式系统的数据采集系统,构建在Hadoop之上,使用HDFS作为存储。
(2)Flume:一个功能完备的分布式日志采集、聚合、传输系统,支持在日志系统中定制各类数据发送方,用于收集数据。
(3)Scribe:facebook开发的日志收集系统,能够从各种日志源收集日志,存储到一个*存储系统,以便于进行集中统计分析处理。
(4)Kafka:一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。
二、Flume
1.2.1 Flume简介
(1)定义(设计原理):它是一种分布式,高可靠性和高可用性的数据采集系统,可以从不同类型、不同来源的数据流汇集到HDFS、HBase等集中式数据存储系统。
(2)组成:
- collector
- Agent
- source
- channel
- sink
- storage
1.1.3 Flume事件
(1)数据以事件为载体进行传输的。
(2)定义:具有字节有效载荷的事件体和可选的一组字符串属性事件头的数据流单元。
(3)事件头:包括时间戳、源IP地址,用于路由判断,传递其他结构化信息。
(4)事件体:一个字节数组,包含实际的负载。
1.1.4Flume代理(Agent)
(1)定义:一个Agent是一个JVM进程,它是承载事件从数据源流向下一个目标的组件,包括source(事件源)、channel(时间通道)、sink(时间接收器和其流动的事件。
(2)Flume源:
Flume消费由外部源传递给它的事件,外部源以Flumen源识别的格式向Flume发送事件。
种类:Execl源(实时搜集数据)、Spool目录源、Avro源、NetCat Tcp源、Syslog TCP源。
(3)Flume通道:
1)事件在代理程序的通道中暂存,是一个完整的事务,只有传递到下一个代理或者终端存储库后才被从通道中删除。
2)一个代理中可以有很多个通道、多个接收器。
3 )有文件通道和内存通道,内存通道速度快,但出故障就无法恢复。
(4)Flume槽/接收器(sink):
1)负责从通道接收数据,并传到下一个通道或者最终目的地。
2)一个接收器只可以从一个通道接收数据
3)种类:
- File Roll Sink:在本地文件存储事件,定时生成文件。必要属性:type、directory、rollInterval
- Avro Sink:实现分层数据采集系统中有重要作用,实现多级流动的基础。必要属性:type、hostname、port
- HDFS Sink:将事件写到Hadoop分布式系统中。
(4)拦截器:设置在源和通道之间,源接收到事件,通过调用拦截器转换或删除过滤一部分事件。
(5)处理器:用于创建逻辑槽分组,决定事件的方向。主要是为了数据处理管道中消除单点失败,Flume通过负载均衡以及故障恢复机制将事件发送到不同槽的能力。
(6)Flume事务
put事务:
- doput:将批数据写入临时缓冲区putlist
- doCommit:检查channel内存队列是否足够
- doRollback:channel内存队列空间不足,回滚数据
take事务:
- 将数据取到临时缓冲区Takelist,并将数据发送到下一级或者终端
- doCommit:全部发送成功,清除缓冲区
- doRollback:发送出现异常,把缓冲区数据归还给channel内存队列
(7)Flume Agent内部原理