一、什么是Flume:
Flume是一个分布式的、可靠的、容错性(recovery mechanisms)、高可用性的一个服务,高效的收集、聚合、移动一个大数据量的日志文件(分布式的海量日志的高效收集、聚合、移动/传输的一个框架),特点:简单灵活,是基于一个流式数据处理框架。
对比
Sqoop是抽取RDBMS的一套框架(RDBMS:sqoop)
二、Flume为什么会出现
通常情况下,我们抽取日志,通过shell脚本cp命令采集日志,时效性较差,无法压缩,shell脚本可能挂掉,不易监控。
三、Flume的架构
Agent:是一个Flume中最核心的组件,可以理解为就是一个flume
Agent=Source+Channel+Sink
Flume三个重要参数:
Source:数据从哪里去。去源头读数据,写到Channel中
Channel:中间管道(内存或磁盘中)。链接Source和Sink,类似一个队列或缓冲区
Sink:写到哪里去。从Channel拉数据,写到HDFS中,或把数据写入到下一个agent的source中
Flume ==> HDFS ==> BATCH(离线处理)
Flume ==> Kafka ==> Streaming/Storm/Flink
Kafka(消息队列/Stream Platform)
源源不断的把日志收集起来
四、Flume的属性和参数
Source:exec(文件)/Spooling Directory(文件夹)/Taildir Source(文件或文件夹)/Netcat(指定IP&Port)
Channel:Memory/File。
Sink:HDFS/Logger/Avro/Kafka
Source
Channel
Sink
bind---->连接
一个agent就是一个配置文件:可配置的、可插拔的、可组装的 0代码
下载:http://cloudera-fastly-s3-2.s3-website-us-west-1.amazonaws.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.7.0.tar.gz
五、Flume环境搭建
搭建环境:JDK1.6+、足够的内存(channel)、足够的磁盘空间、目录读写权限
配置文件:flume-env.sh
flume-ng --help
--conf/-c指定配置文件
--name/-n
官方学习文档:
http://cloudera-fastly-s3-2.s3-website-us-west-1.amazonaws.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.7.0/FlumeUserGuide.html#a-simple-example
# example.conf: A single-node Flume configuration # Name the components on this agent a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Describe/configure the source a1.sources.r1.type = netcat a1.sources.r1.bind = localhost a1.sources.r1.port = 44444 # Describe the sink a1.sinks.k1.type = logger # Use a channel which buffers events in memory a1.channels.c1.type = memory a1.channels.c1.capacity = 1000 a1.channels.c1.transactionCapacity = 100 # Bind the source and sink to the channel a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1六、Flume指令六、Flume指令
执行:bin目录下 ./flume-ng agent -name a1 --conf /home/hadoop/app/apache-flume-1.6.0-cdh5.7.0-bin/conf --conf-file /home/hadoop/app/apache-flume-1.6.0-cdh5.7.0-bin/conf/hello.conf -Dflume.root.logger=INFO,console
telnet localhost 44444
实时监控,将数据输出到HDFS
官方指南:http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.7.0/FlumeUserGuide.html