Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
Flume主要由3个重要的组件构成:
Source:完成对日志数据的收集,分成transtion 和 event 打入到channel之中。
Channel:主要提供一个队列的功能,对source提供中的数据进行简单的缓存。
Sink:取出Channel中的数据,进行相应的存储文件系统,数据库,或者提交到远程服务器。
Flume逻辑上分三层架构:agent,collector,storage
agent用于采集数据,agent是flume中产生数据流的地方,同时,agent会将产生的数据流传输到collector。
collector的作用是将多个agent的数据汇总后,加载到storage中。
storage是存储系统,可以是一个普通file,也可以是HDFS,HIVE,HBase等。
Flume的架构主要有一下几个核心概念:
Event:一个数据单元,带有一个可选的消息头
Flow:Event从源点到达目的点的迁移的抽象
Client:操作位于源点处的Event,将其发送到Flume Agent
Agent:一个独立的Flume进程,包含组件Source、Channel、Sink
Source:用来消费传递到该组件的Event
Channel:中转Event的一个临时存储,保存有Source组件传递过来的Event
Sink:从Channel中读取并移除Event,将Event传递到Flow Pipeline中的下一个Agent(如果有的话)
关于Flume更多内容,可以参考网络文献:Flume的原理和使用
一:安装flume
flume下载地址: flume下载官网
1.解压安装包
- sudo tar -zxvf apache-flume-1.7.0-bin.tar.gz -C /usr/local # 将apache-flume-1.7.0-bin.tar.gz解压到/usr/local目录下,这里一定要加上-C否则会出现归档找不到的错误
- sudo mv ./apache-flume-1.7.0-bin ./flume #将解压的文件修改名字为flume,简化操作
- sudo chown -R hadoop:hadoop ./flume #把/usr/local/flume目录的权限赋予当前登录Linux系统的用户,这里假设是hadoop用户
2.配置环境变量
- sudo vim ~/.bashrc
然后在首行加入如下代码:
- export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64;
- export FLUME_HOME=/usr/local/flume
- export FLUME_CONF_DIR=$FLUME_HOME/conf
- export PATH=$PATH:$FLUME_HOME/bin
注意, 上面的JAVA_HOME,如果以前已经在.bashrc文件中设置过,就不要重复添加了,使用以前的设置即可。
比如,以前设置得JAVA_HOME可能是“export JAVA_HOME=/usr/lib/jvm/default-java”,则使用原来的设置即可。
接下来使环境变量生效:
- source ~/.bashrc
修改 flume-env.sh 配置文件:
- cd /usr/local/flume/conf
- sudo cp ./flume-env.sh.template ./flume-env.sh
- sudo vim ./flume-env.sh
打开flume-env.sh文件以后,在文件的最开始位置增加一行内容,用于设置JAVA_HOME变量:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64;
注意,你的JAVA_HOME可能与上面的设置不一致,一定要根据你之前已经安装的Java路径来设置,比如,有的机器可能是:
export JAVA_HOME=/usr/lib/jvm/default-java
然后,保存flume-env.sh文件,并退出vim编辑器。
3.查看flume版本信息
- cd /usr/local/flume
- ./bin/flume-ng version #查看flume版本信息;
如果安装成功,出现如下图片
注意:如果系统里安装了hbase,会出现错误: 找不到或无法加载主类 org.apache.flume.tools.GetJavaProperty。如果没有安装hbase,这一步可以略过。
- cd /usr/local/hbase/conf
- sudo vim hbase-env.sh
- #1、将hbase的hbase.env.sh的这一行配置注释掉,即在export前加一个#
- #export HBASE_CLASSPATH=/home/hadoop/hbase/conf
- #2、或者将HBASE_CLASSPATH改为JAVA_CLASSPATH,配置如下
- export JAVA_CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- #笔者用的是第一种方法
二:测试flume
1.案例1:Avro source
Avro可以发送一个给定的文件给Flume,Avro 源使用AVRO RPC机制。
a) 创建agent配置文件
- cd /usr/local/flume
- sudo vim ./conf/avro.conf #在conf目录下编辑一个avro.conf空文件
然后,我们在avro.conf写入以下内容
- a1.sources = r1
- a1.sinks = k1
- a1.channels = c1
- # Describe/configure the source
- a1.sources.r1.type = avro
- a1.sources.r1.channels = c1
- a1.sources.r1.bind = 0.0.0.0
- a1.sources.r1.port = 4141
- #注意这个端口名,在后面的教程中会用得到
- # 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
上面Avro Source参数说明如下:
Avro Source的别名是avro,也可以使用完整类别名称org.apache.flume.source.AvroSource,因此,上面有一行设置是a1.sources.r1.type = avro,表示数据源的类型是avro。
bind绑定的ip地址或主机名,使用0.0.0.0表示绑定机器所有的接口。a1.sources.r1.bind = 0.0.0.0,就表示绑定机器所有的接口。
port表示绑定的端口。a1.sources.r1.port = 4141,表示绑定的端口是4141。
a1.sinks.k1.type = logger,表示sinks的类型是logger。
b) 启动flume agent a1
- /usr/local/flume/bin/flume-ng agent -c . -f /usr/local/flume/conf/avro.conf -n a1 -Dflume.root.logger=INFO,console #启动日志控制台
这里我们把这个窗口称为agent窗口。
c) 创建指定文件
先打开另外一个终端,在/usr/local/flume下写入一个文件log.00,内容为hello,world:
- cd /usr/local/flume
- sudo sh -c 'echo "hello world" > /usr/local/flume/log.00'
我们再打开另外一个终端,执行:
- cd /usr/local/flume
- bin/flume-ng avro-client --conf conf -H localhost -p 4141 -F /usr/local/flume/log.00 #4141是avro.conf文件里的端口名
此时我们可以看到第一个终端(agent窗口)下的显示,也就是在日志控制台,就会把log.00文件的内容打印出来:
avro source执行成功!案例一over!
2.案例2:netcatsource
a) 创建agent配置文件
- cd /usr/local/flume
- sudo vim ./conf/example.conf #在conf目录创建example.conf
在example.conf里写入以下内容:
- #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
b)启动flume agent (即打开日志控制台):
- /usr/local/flume/bin/flume-ng agent --conf ./conf --conf-file ./conf/example.conf --name a1 -Dflume.root.logger=INFO,console
如图:
再打开一个终端,输入命令:telnet localhost 44444
- telnet localhost 44444
- #前面编辑conf文件的端口名
然后我们可以在终端下输入任何字符,第一个终端的日志控制台也会有相应的显示,如我们输入”hello,world”,得出
第一个终端的日志控制台显示:
netcatsource运行成功!
这里补充一点,flume只能传递英文和字符,不能用中文,我们先可以在第二个终端输入“中国”两个字:
第一个终端的日志控制台显示:
相关推荐
Flume的安装部署 Flume的测试运行 Flume中配置使用file channel及HDFS sink Flume中配置HDFS文件生成大小及时间分区 Flume中配置Spooling Dir的使用 Flume中配置Spooling Dir的文件过滤 Flume中配置扇入架构...
《Flume:构建高可用、可扩展的海量日志采集系统》从Flume 的基本概念和设计原理开始讲解,分别介绍了不同种类的组件、如何配置组件、如何运行Flume Agent 等。同时,分别讨论Source、Channel 和Sink 三种核心组件,...
Apache Flume 是一个分布式、高可靠、高可用的用来收集、聚合、转移不同来源的大量日志数据到中央数据仓库的工具 Apache Flume是Apache软件基金会(ASF)的顶级项目 Event是Flume定义的一个数据流传输的最小单元。...
Flume 是大数据组件中重要的数据采集工具,我们常利用 Flume 采集某个各种数据源的数据供其他组件分析使用。在日志分析业务中,我们常采集服务器日志,以分析服务器运行状态是否正常。在实时业务中,我们常将数据...
用于flume的安装,zookeeper的安装,Hadoop的安装,安装mysql的一些jar包。安装好flume,要先安装好java环境
通过java模拟生产环境的日志,flume监控指定目录,采集日志推送到kafka。具体内容可参考 “基于CDH5的flume-kafka对接”这篇
NULL 博文链接:https://kavy.iteye.com/blog/2228079
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统 Flume支持在日志系统中定制各类数据发送方,用于收集数据; Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)...
flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据… 各领域数据集,工具源码,适合毕业设计、课程设计作业...
目前使用最广泛的、用于系统日志采集的海量数据采集工具有 Hadoop 的 Chukwa、ApacheFlumeAFacebook 的 Scribe 和 LinkedIn 的 Kafka 等。 以上工具均采用分布式架构,能满足每秒数百 MB 的日志数据采集和传输需求。
2 数据采集的方式方法 2.1系统日志采集方法。绝大部分的互联网企业都拥有自己专属的海量数据采集 工具,一般是用于对系统日志进行采集,例如Hadoop的Chukwa、Fecebook专用的Scribe 以及Cloudera的Flume等等,这些...
现有的ETL工具Flume也可以完成日志的采集,传输,转换和存储,但是Flume工具仅能应用到通信质量无障碍的替代环境,在公网环境下可能因网络异常等因素导致连接较长的服务的发送器组件失败,而此时收集器组件可能并不...
日志采集工具(logpipe) 1. 概述 在集群化环境里,日志采集是重要基础设施。 开源主流解决方案是基于flume-ng,但在实际使用中发现flume-ng存在诸多问题,比如flume-ng的spoolDir采集器只能对文件名转档后的大小不能...
2.根据具体需求,运用Flume进行实时采集日志信息,存储到kafka消息队列中 3.使用Spark Streaming对数据进行清洗、加工、处理,形成最终要展示的指标,存入MySQL,提供给前端开发。 4.研究数据结果,剖析有效信息,...
4.使用flume实时收集日志信息 5.对接实时数据到kafka并输出到控制台 6.spark streaming对接kafka的数据进行消费 数据采集详情:项目其他\数据采集.docx 二.数据清洗:见项目 使用spark streaming完成数据清洗操作 ...
Flume 数据采集工具 Sqoop 数据ETL工具 ElasticSearch 搜索系统 Logstash 日志采集工具 Kibana 数据展现工具 Ranger 集中安全管理工具 Atlas 数据治理和元数据管理框架 kettle ETL工具 mongodb Key-value数据库 ...
Flume 日志采集、聚合和传输 数据存储系统: HDFS 分布式文件系统;Swift 云存储服务;Kafka 消息系统,类似于消息队列 计算引擎: MapReduce 批量数据处理引擎;Storm 流式处理引擎;Giraph 并行图处理系统; Spark...
发生所有这些问题的根源在于公网传递数据的不稳定性所致,因此Flume是在这种问题背景的需求驱动下产生了DataFlow这款产品,DataFlow完全按照产品级标准使用JAVA语言进行开发,安装时无需再安装外置JDK支持,解压开箱...
实时数据处理系统首先将实时数据以日志的形式存储在Flume中,然后再通过Strom和Spark Streaming工具对实时数据进行实时处理与分析,并对数据进行标签。将生成的标签存储在Redis数据库中。实时营销系统的核心是通过分析...
2)Flume:一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。 3)Hbase:是一个分布式的、面向列的开源数据库, 利用Hadoop HDFS作为其存储系统。 4)Hive:基于Hadoop的一个数据仓库工具...