文章目录
业务现状:公司有Hadoop集群;同时拥有大量日志数据;你想要把大量日志数据放入Hadoop中进行分析。
- WebServer/ApplicationServer分散在各个机器上
- 想大数据平台Hadoop进行统计分析
- 日志如何收集到Hadoop平台上
- 解决方案及存在的问题
如何解决我们的数据从其他的server上移动到Hadoop之上???
shell cp hadoop集群的机器上, hadoop fs -put … /
缺点:
1、无法做监控
2、必须间隔时间;时效性不好;不是实时的
3、网络传输对于io开销大
4、如何做负载均衡等等
关于日志收集
关于服务器日志
- 服务器日志是大数据系统中最主要的数据来源之一
- 服务器日志可能包含的信息:
- 访问信息
- 系统信息
- 其他业务信息
- 基于服务器日志的应用:
- 业务仪表盘:PV,UV等
- 线上查错:错误日志查询
- 系统监控:调用链,接口访问统计等
- 其他数据应用
- 服务器日志的特点:
- 不间断,流式产生
- 数据量大,信息量大
- 源头分散
日志采集系统的一般架构
日志采集系统的设计要求
- 系统可用性:采集系统自身的健壮性
- 可扩展性:可以随着应用系统的规模及数据量的增加而线性扩展
- 可靠性:不会丢失数据
- 灵活性:支持多种数据源;支持多种处理方式;支持多种采集目
的地;支持对数据的预处理
Flume概述
官方文档:学习建议多多参考官方文档
http://flume.apache.org/FlumeUserGuide.html
- Flume官网: http://flume.apache.org/
- Flume是由Cloudera提供的一个分布式、高可靠、高可用的服务用于分布式的海量日志的高效收集、聚合、移动系统
- Flume设计目标
- 可靠性
- 扩展性
- 管理性
- 业界同类产品对比
- (***)Flume: Cloudera/Apache Java
- Scribe: Facebook C/C++ 不再维护
- Chukwa: Yahoo/Apache Java 不再维护
- Kafka:(有人可能会说这个框架)这是个消息队列;和flume不是一类
- Fluentd: Ruby
- (***)Logstash: ELK(ElasticSearch,Kibana)
- Flume发展史
- Cloudera 0.9.2 Flume-OG
- flume-728 Flume-NG ==> Apache
- 2012.7 1.0
- 2015.5 1.6 (*** + )
- 2016.10 1.7
- 2017.10 1.8
Flume是一种分布式、可靠和可用的服务,用于有效地收集、聚合和移动大量日志数据。它具有基于流数据流的简单灵活的体系结构。它具有健壮性和容错性,具有可调的可靠性机制和许多故障转移和恢复机制。它使用一个简单的可扩展数据模型,支持在线分析应用程序。
版本
- Flume OG(original generation, 2009年7月):分布式日志收集系统,
有Master概念,依赖于Zookeeper,分为agent,collector,
storage三种角色 - Flume NG(next generation, 2011年10月):代码重构,功能精简,
去掉master,collector角色,专注数据的收集与传递
Flume架构及核心组件
Flume 工作原理解析
工作流程
核心组件
Flume Flow:
- Flow:数据采集流程
- Event:消息处理的最小单位,带有一个可选的消息头(head存储不同web消息的元数据ip:interceptor)
- Agent:一个独立的Flume进程,包含组件Source、Channel、Sink
- Source:以event为单位接收信息,并确保信息被推送(push)到channel
- Channel:缓存信息,确保信息在被sink处理前不会丢失,相当于一个小型消息队列
- Sink:从channel中拉取(pull)并处理信息
- Interceptor:event拦截器,可以修改或丢弃event
处理流程:
source以event为单位从数据源接收信息,然后保存到一个或多个channel中
(可以经过一个或多个interceptor的预处理),sink从channel中拉取并处理
信息(保存,丢弃或传递到下一个agent),然后通知channel删除信息
Source
Channel
Sink
架构一:顺序流
为了在多个Agent或跃点source之间传输数据,前一个代理的sink和当前source需要是avro类型,接收器指向源的主机名(或IP地址)和端口。