问题:WebServer/Application Server分散在各个机器上,想用大数据平台Hadoop进行统计分析,日志如何收集到Hadoop平台上?
- shell脚本
cp到hadoop集群的机器上,再通过hadoop的 fs -put 将日志传到HDFS上。
问题1:容错如何做监控?如何server上传到hadoop集群上的时候某一台机器断掉了。
问题2:高延时采用cp的方式执行的话,必须要指定一个间隔的时间,时效性不是太好。
问题3:压缩原始日志一般情况下都是txt文本格式的,直接传输文本格式的日志IO开销大
问题4:容错和负载均衡
====》所以有了flume的诞生 - flume :将日志从A到B移动数据
configuration file
Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据。它具有基于流数据流的简单灵活的体系结构。比如从webserver(源端)-> flume ->hdfs(目的地)
它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有强大的功能和容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序。管理性
业界同类产品的对比
Flume:Cloudera捐献给Apache,使用java开发,使用简单
Scribe:Facebook开发,使用C/C++开发,负载均衡和容错不太好,使用简单,不再维护
Chukwa:yahoo开发转给Apache,java开发,负载均衡容错不太好,不再维护
Fluentd:ruby开发,支持跨平台
Logstash(收集、解析和转换日志 ):ELK(ElasticSearch,Logstash,Kibana)
Flume发展史
Clouera 0.9.2 Flume-OG
flume-728 Flume-NG => Apache
2012.7 1.0
2015.5 1.6 (推荐1.5版本以上)
核心组件
1.Source : 收集 —— 从什么地方采集数据
-> Flume Sources -> Avro Source,Thrift Source,Spooling Directory Source,Kafka Source,NetCat TCP Source,Exec Source,Custom Source(自定义source)
2.Channel : 聚集 —— 数据缓存池,临时存放数据
-> Flume Channels -> Memory Channel,File Channel,JDBC Channel,
Kafka Channel,Custom Channel(自定义channel)
3.Sink : 输出 —— 从channel中将数据读取出来送到目的地
-> Flume Sinks -> HDFS Sink,Hive Sink,Logger Sink,Avro Sink,ElasticSearchSink,HBaseSinks,Kafka Sink,Custom Sink(自定义sink)
架构
1.将一个agent的数据通过avro的方式串行传递给另一个agent
为了使数据跨多个代理或跃点流动,前一个代理的接收器和当前跃点的源必须是avro类型,接收器指向源的主机名(或IP地址)和端口。
2.多个agent sink到同一个地方去
日志收集中的一种非常常见的情况是,大量的日志生成客户端将数据发送到连接到存储子系统的几个使用方代理。例如,从数百台Web服务器收集的日志发送到许多写入HDFS群集的代理。
在Flume中,可以通过为多个第一层代理配置一个avro接收器来实现这一点,它们均指向单个代理的avro源(同样,在这种情况下,您可以使用节俭的源/接收器/客户端)。第二层代理上的此源将接收到的事件合并到一个通道中,该通道由接收器消耗到其最终目的地。
3.将同一个source通过不同的channel和sink,sink到不同的目的地
Flume支持将事件流复用到一个或多个目的地。这是通过定义一种流多路复用器来实现的,该流多路复用器可以将事件复制或选择性地路由到一个或多个通道。
上面的示例显示了来自代理“ foo”的源,将流分流到三个不同的通道。此扇出可以复制或多路复用。在复制流的情况下,每个事件都发送到所有三个通道。对于多路复用情况,当事件的属性与预配置的值匹配时,事件将传递到可用通道的子集。例如,如果将名为“ txnType”的事件属性设置为“ customer”,则它应转到channel1和channel3,如果它是“ vendor”,则应转到channel2,否则应到channel3。可以在代理的配置文件中设置映射。