Flume史上最详细的安装步骤和简单测试
Flume的下载和官方网址:http://flume.apache.org/
Flume的介绍
Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据。它具有基于流数据流的简单灵活的体系结构。它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有强大的功能和容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序。
大体结构是从Flume的基本架构是Agent。它是一个完整的数据收集工具,含有三个核心组件,分别是 Source、Channel、Sink。数据以Event为基本单位经过Source、Channel、Sink,从外部数据源来,向外部的目的地去。
Flume是有三层架构:Source,channel,sink
Flume的设计目标:
可靠性
Flume的核心是把数据从数据源收集过来,再送到目的地。为了保证输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据。Flume 使用事务性的方式保证传送Event整个过程的可靠性。
可扩展性
Flume中只有一个角色Agent,其中包含Source、Sink、Channel三种组件。一个Agent的Sink可以输出到另一个Agent的Source。这样通过配置可以实现多个层次的流配置。
功能可扩展性
Flume自带丰富的Source、Sink、Channel实现。用户也可以根据需要添加自定义的组件实现, 并在配置中使用起来。
除了单Agent的架构外,还可以将多个Agent组合起来形成多层的数据流架构:
多个Agent顺序连接:将多个Agent顺序连接起来,将最初的数据源经过收集,存储到最终的存储系统中。一般情况下,应该控制这种顺序连接的Agent的数量,因为数据流经的路径变长了,如果不考虑Failover的话,出现故障将影响整个Flow上的Agent收集服务
多个Agent的数据汇聚到同一个Agent:这种情况应用的场景比较多,适用于数据源分散的分布式系统中数据流汇总。
多路(Multiplexing)Agent:多路模式一般有两种实现方式,一种是用来复制,另一种是用来分流。复制方式可以将最前端的数据源复制多份,分别传递到多个Channel中,每个Channel接收到的数据都是相同的。分流方式,Selector可以根据Header的值来确定数据传递到哪一个Channel。
实现Load Balance功能:Channel中Event可以均衡到对应的多个Sink组件上,而每个Sink组件再分别连接到一个独立的Agent上,这样可以实现负载均衡
业界同类产品的对比:
Flume:Cloudera/Apache Java
Scribe:Facebook c/c++ 不再维护
Chukwa: Yahoo/Apache Java 不再维护
Kafka:
Fluentd: Ruby
Logstash: ELK(ElasticSearch,Kibana)
Flume 架构及核心组件
Source是指定数据源从哪里来
作用: 收集
Sink是将数据源写到某个地方去
作用: 输出
Channel 是将数据存储在某个地方
作用: 聚集
下面来介绍flume安装的具体操作流程。
首先,创建好一个虚拟机,然后打开虚拟机,连接xshell6.
然后安装jdk1.8,选用的版本为jdk-8u144-linus-x64.tar.gz
在创建一个data文件夹并在data目录下面再创建一个program文件夹。
将下载的jdk安装包传输到program目录下。
利用指令进入到program目录下:
cd /data/program
然后ll
显示目录下的安装包你会看到jdk-8u144-linus-x64.tar.gz
进行解压,tar -zxvf jdk-8u144-linus-x64.tar.gz
解压后ll
你会看到解压后的jdk文件夹,
然后
pwd 查询jdk的文件目录
复制一下
然后配置环境变量:
vi ~/.bash_profile
按i进行编辑
将以下配置到环境变量里面:
export JAVA_HOME=(jdk的文件目录)
export PATH=$JAVA_HOME/bin:$PATH
按esc退出编辑 输入:x 按enter保存退出
输入 source ~/.bash_profile 是为了保存和运行配置生效
这样jdk就安装好,环境变量也配置好了。
检验一下可以输入java -version来查看是否成功。
下面来安装flume,下载安装包的地址:http://archive.apache.org/dist/flume/1.6.0/
在官网下载apache-flume-1.6.0-bin.tar.gz
将这个同样移动到data/program目录下
进入cd /data/program
ll 展示目录,会看到flume的安装包,
进行解压
tar -zxvf apache-flume-1.6.0-bin.tar.gz
解压后ll
会看到解压后的flume文件夹
同理pwd 一下,复制该文件目录
然后配置环境变量
vi ~/.bash_profile
按i进行编辑
将以下配置到环境变量里面:
export FLUME_HOME=(flume的文件目录)
export PATH=$FLUME_HOME/bin:$PATH
按esc退出编辑 输入:x 按enter保存退出
输入 source ~/.bash_profile 是为了保存和运行配置生效
进入到flume的conf 文件夹,
然后ll
会看到flume-env.sh.template
输入 cp flume-env.sh.template flume-env.sh
输入echo $JAVA_HOME
复制jdk的文件目录
然后输入 vi flume-env.sh
会看到红线圈的地方在这下下面加上
export JAVA_HOME=将复制的jdk文件目录放在后面
这样flume就下载好了。
检测一下在flume的bin目录下输入
flume-ng version
就会看到flume的版本号
举个例子来测试一下flume的安装下载。
我们监控一个文件实时采集新增的数据输出到控制台
首先我们要创建一个监控的文件
在我们的data目录下创建一个log 文件夹
然后利用指令cd /data/log
进入文件夹 输入指令 touch data.log
创建data.log文件。
pwd 一下复制一下该文件的目录
然后我们需要配置一下文件配置文件大概内容如下
首先进入到flume文件下的conf目录下
vi exec-memory-logger.conf
将下面内容配置进去
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/kafka/data/data.log
#(注意这里配置的就是上面复制的data.log的文件路径,其他没什么要修改的了)
a1.sources.r1.shell= /bin/sh -c
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
复制进来以后保存
然后我们进行测试启动agent(有关介绍看前面的文案)
flume-ng agent \
--name avro-memory-kafka \
--conf $FLUME_HOME/conf \
--conf-file $FLUME_HOME/conf/exec-memory-logger.conf \
-Dflume.root.logger=INFO,console
后面出现start表示启动成功
然后我们再双击一下,出现一个窗口
进入到我们创建的data.log 文件目录下
然后我们往data.log文件中增加点内容看一下刚刚启动的agent会有什么反应
echo hello >> data.log
echo world >> data.log
echo welcome >> data.log
echo welcome >> data.log
echo welcome >> data.log
echo welcome5 >> data.log
echo welcome6 >> data.log
在agent启动的控制台会出现一下。
说明flume实时监控日志已经成功,以上就是flume的安装和简单的测试。
下一期为大家介绍kafka和zookeeper的安装,以及flume实时采集日志到kafak的案例。