Flume 初识
一、Flume 简介
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng。由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分。
Flume参考资料
官方网站: http://flume.apache.org/
用户文档: http://flume.apache.org/FlumeUserGuide.html
开发文档: http://flume.apache.org/FlumeDeveloperGuide.html
二、Flume 特点
Flume-og采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。
Flume-ng最明显的改动就是取消了集中管理配置的 Master 和 Zookeeper,变为一个纯粹的传输工具。Flume-ng另一个主要的不同点是读入数据和写出数据现在由不同的工作线程处理(称为 Runner)。 在 Flume-og 中,读入线程同样做写出工作(除了故障重试)。如果写出慢的话(不是完全失败),它将阻塞 Flume 接收数据的能力。这种异步的设计使读入线程可以顺畅的工作而无需关注下游的任何问题。
特征优势:
1. Flume可以高效率的将多个网站服务器中收集的日志信息存入HDFS/HBase中
2. 使用Flume,我们可以将从多个服务器中获取的数据迅速的移交给Hadoop中
3. 除了日志信息,Flume同时也可以用来接入收集规模宏大的社交网络节点事件数据,比如facebook,twitter,电商网站如亚马逊,flipkart等
4. 支持各种接入资源数据的类型以及接出数据类型
5. 支持多路径流量,多管道接入流量,多管道接出流量,上下文路由等
6. 可以被水平扩展
三、Flume 安装部署
1.下载, Flume官网上http://flume.apache.org/download.html下载软件安装包,如:apache-flume-1.7.0-bin.tar.gz,上传到服务器解压到指定目录,如:/run/apache-flume-1.7.0-bin
2.环境,flume是java编写的,需要jdk 1.8+ 支持,检查环境的jdk
3.配置,实际上flume解压后就已经安装完毕,但是启动flume的时候需要一个配置文件,来配置启动的flume进程,配置详解见后续博文。
主要flume关于jvm内存大小配置,在bin/flume-ng.sh文件中,通过修改该配置来调整flume运行jvm分配的内存大小
JAVA_OPTS="-Xmx20m"
也可以通过修改该配置,来实现本地代码运程调试,配置如下,修改配置eclipse中调试代码采用remote方式运行,详细步骤参考后续博文
JAVA_OPTS="-Xmx512m -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y"
四、Flume 简单使用
为了直观的来感受flume程序,这里提供一个简单flume配置文件test.properties来配置启动flume,该配置文件的逻辑为,监控/data/test目录,将该目录下的文件输出到logger,当然这个logger可以配置到控制台,关于该配置文件的详解见后续博文
# agent
a1.sources = r1
a1.channels = c1
a1.sinks = k1
# spooldir type sources
a1.sources.r1.channels = c1
a1.sources.r1.type = spooldir
a1.sources.r1.channels = c1
a1.sources.r1.spoolDir = /data/test
# memory type channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# logger type sinks
a1.sinks.k1.channel = c1
a1.sinks.k1.type = logger
操作:
1.将上述配置文件复制到conf/目录下
2.使用如下命令启动,如下命令是相对于在flume根目录运行的
bin/flume-ng agent -n a1 -c conf -f conf/test.properties -Dflume.root.logger=INFO,console
命令说明:bin/flume-ng 是启动脚本,-n 指定运行的agent的名字,即:a1,-c 指定配置文件的目录conf 目录下还有log4j的配置文件,关于log4j的配置文件的灵活使用,在后面博文中多agent启动在详细说明,-f 指定agent的配置文件,即上面提供test.properties文件,-Dflume.root.logger=INFO,console 用来指定日志适配器,console表示输出到控制台,这里可以查看conf下的log4j.properties文件
3.复制任意文本文件到test.properties文件配置监控的目录(/data/test)中,可以观察到2步骤中控制台的输出信息,
测试如下:
a.在/data/test中产生一个文本文件
b.flume控制台打印的日志