1.flume概念

flume是分布式的,可靠的,高可用的,用于对不同来源的大量的日志数据进行有效收集、聚集和移动,并以集中式的数据存储的系统。

flume目前是apache的一个顶级项目。

flume需要java运行环境,要求java1.6以上,推荐java1.7.

将下载好的flume安装包解压到指定目录即可。

2.flume中的重要模型

2.1.1.flume Event:

flume 事件,被定义为一个具有有效荷载的字节数据流和可选的字符串属性集。

2.1.2.flume Agent:

flume 代理,是一个进程承载从外部源事件流到下一个目的地的过程。包含source channel 和 sink。

2.1.3.Source

数据源,消耗外部传递给他的事件,外部源将数据按照flume Source 能识别的格式将Flume 事件发送给flume Source。

2.1.4.Channel

数据通道,是一个被动的存储,用来保持事件,直到由一个flume Sink消耗。

2.1.5.Sink

数据汇聚点,代表外部数据存放位置。发送flume event到指定的外部目标

2.2.          flume流动模型

2.3.          flume的特点

2.3.1.  复杂流动性

Flume允许用户进行多级流动到最终目的地,也允许扇出流(一到多)、扇入流(多到一)的、故障转移和失败处理。

2.3.2.  可靠性

事务性的数据传递,保证了数据的可靠性。

2.3.3.  可恢复性

通道可以以内存或文件的方式实现,内存更快,但是不可恢复,而文件虽然比较慢但提供了可恢复性。

入门案例

1.首先编写一个配置文件:

#example.conf:单节点Flume配置
#命名Agent a1的组件
a1.sources = r1
a1.sinks = k1
a1.channels = c1 #描述/配置Source
a1.sources.r1.type = netcat
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 44444 #描述Sink
a1.sinks.k1.type = logger #描述内存Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100 #为Channle绑定Source和Sink
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

2.通过flume的工具启动agent

$ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console

3、发送数据

在windows中通过telnet命令连接flume所在机器的44444端口发送数据。

4.     Source详解

现在介绍几种比较重要的Source

4.1.    Avro Source

监听AVRO端口来接受来自外部AVRO客户端的事件流。利用Avro Source可以实现多级流动、扇出流、扇入流等效果。另外也可以接受通过flume提供的Avro客户端发送的日志信息。

4.1.1.   Avro Source属性说明

!channels  –

!type  –   类型名称,"AVRO"

!bind  –   需要监听的主机名或IP

!port  –   要监听的端口

threads    –   工作线程最大线程数

selector.type

selector.*

interceptors  –   空格分隔的拦截器列表

interceptors.*

compression-type  none   压缩类型,可以是“none”或“default”,这个值必须和AvroSource的压缩格式匹配

sslfalse  是否启用ssl加密,如果启用还需要配置一个“keystore”和一个“keystore-password”。

keystore   –   为SSL提供的java密钥文件所在路径。

keystore-password–   为SSL提供的java密钥文件 密码。

keystore-typeJKS密钥库类型可以是“JKS”或“PKCS12”。

exclude-protocolsSSLv3  空格分隔开的列表,用来指定在SSL / TLS协议中排除。SSLv3将总是被排除除了所指定的协议。

ipFilter   false  如果需要为netty开启ip过滤,将此项设置为true

ipFilterRules–   定义netty的ip过滤设置表达式规则

案例:

编写配置文件  修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样。不同的地方如下:

#描述/配置Source
a1.sources.r1.type = avro
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 44444

启动flume:

./flume-ng agent --conf ../conf --conf-file ../conf/template2.conf --name a1 -Dflume.root.logger=INFO,console

通过flume提供的avro客户端向指定机器指定端口发送日志信息:

./flume-ng avro-client --conf ../conf --host 0.0.0.0 --port 44444 --filename ../mydata/log1.txt

会发现确实收集到日志

4.2.    Spooling Directory Source

这个Source允许你将将要收集的数据放置到"自动搜集"目录中。这个Source将监视该目录,并将解析新文件的出现。事件处理逻辑是可插拔的,当一个文件被完全读入通道,它会被重命名或可选的直接删除。

要注意的是,放置到自动搜集目录下的文件不能修改,如果修改,则flume会报错。另外,也不能产生重名的文件,如果有重名的文件被放置进来,则flume会报错。

属性说明:(由于比较长 这里只给出了必须给出的属性,全部属性请参考官方文档):

!channels  –

!type  –   类型,需要指定为"spooldir"

!spoolDir  –   读取文件的路径,即"搜集目录"

fileSuffix.COMPLETED对处理完成的文件追加的后缀

案例:

编写配置文件  修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样。不同的地方如下:

#描述/配置Source
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir=/home/park/work/apache-flume-1.6.0-bin/mydata

启动flume:

./flume-ng agent --conf ../conf --conf-file ../conf/template4.conf --name a1 -Dflume.root.logger=INFO,console

向指定目录中传输文件,发现flume收集到了该文件,将文件中的每一行都作为日志来处理

4.3.    NetCat Source

一个NetCat Source用来监听一个指定端口,并将接收到的数据的每一行转换为一个事件。

4.3.1.   NetCat Source属性说明

!channels–

!type–   类型名称,需要被设置为"netcat"

!bind–   指定要绑定到的ip或主机名。

!port–   指定要绑定到的端口号

max-line-length   512单行最大字节数

案例:上面完整的例子即是

4.4.    HTTP Source

HTTP Source接受HTTP的GET和POST请求作为Flume的事件,其中GET方式应该只用于试验。

该Source需要提供一个可插拔的"处理器"来将请求转换为事件对象,这个处理器必须实现HTTPSourceHandler接口,该处理器接受一个 HttpServletRequest对象,并返回一个Flume Envent对象集合。

从一个HTTP请求中得到的事件将在一个事务中提交到通道中。因此允许像文件通道那样对通道提高效率。

如果处理器抛出一个异常,Source将会返回一个400的HTTP状态码。

如果通道已满,无法再将Event加入Channel,则Source返回503的HTTP状态码,表示暂时不可用。

4.4.1.   HTTP Source属性说明

!type    类型,必须为"HTTP"

!port–   监听的端口

bind   0.0.0.0    监听的主机名或ip

handler      org.apache.flume.source.http.JSONHandler处理器类,需要实现HTTPSourceHandler接口

handler.*  –   处理器的配置参数

selector.type

selector.*

interceptors  –

interceptors.*

enableSSL  false  是否开启SSL,如果需要设置为true。注意,HTTP不支持SSLv3。

excludeProtocols  SSLv3  空格分隔的要排除的SSL/TLS协议。SSLv3总是被排除的。

keystore      密钥库文件所在位置。

keystorePassword Keystore 密钥库密码

案例:

编写配置文件  修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样。不同的地方如下:

#描述/配置Source
a1.sources.r1.type = http
a1.sources.r1.port = 66666

启动flume:

./flume-ng agent --conf ../conf --conf-file ../conf/template6.conf --name a1 -Dflume.root.logger=INFO,console

通过命令发送HTTP请求到指定端口:

curl -X POST -d ‘[{ "headers" :{"a" : "a1","b" : "b1"},"body" : "hello~http~flume~"}]‘ http://0.0.0.0:6666

大数据系列之Flume--几种不同的Sources的更多相关文章

  1. 大数据系列之Flume+kafka 整合

    相关文章: 大数据系列之Kafka安装 大数据系列之Flume--几种不同的Sources 大数据系列之Flume+HDFS 关于Flume 的 一些核心概念: 组件名称     功能介绍 Agent ...

  2. 大数据系列之Flume+HDFS

    本文将介绍Flume(Spooling Directory Source) + HDFS,关于Flume 中几种Source详见文章 http://www.cnblogs.com/cnmenglang ...

  3. 大数据系列(5)——Hadoop集群MYSQL的安装

    前言 有一段时间没写文章了,最近事情挺多的,现在咱们回归正题,经过前面四篇文章的介绍,已经通过VMware安装了Hadoop的集群环境,相关的两款软件VSFTP和SecureCRT也已经正常安装了. ...

  4. 大数据系列(4)——Hadoop集群VSFTP和SecureCRT安装配置

    前言 经过前三篇文章的介绍,已经通过VMware安装了Hadoop的集群环境,当然,我相信安装的过程肯定遇到或多或少的问题,这些都需要自己解决,解决的过程就是学习的过程,本篇的来介绍几个Hadoop环 ...

  5. 大数据系列(3)——Hadoop集群完全分布式坏境搭建

    前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一个真正的完全分布式的Hadoop集群,闲言少叙,进入本 ...

  6. 大数据系列(2)——Hadoop集群坏境CentOS安装

    前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMwa ...

  7. 大数据系列之并行计算引擎Spark部署及应用

    相关博文: 大数据系列之并行计算引擎Spark介绍 之前介绍过关于Spark的程序运行模式有三种: 1.Local模式: 2.standalone(独立模式) 3.Yarn/mesos模式 本文将介绍 ...

  8. 大数据系列之并行计算引擎Spark介绍

    相关博文:大数据系列之并行计算引擎Spark部署及应用 Spark: Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎. Spark是UC Berkeley AMP lab ( ...

  9. 大数据系列之数据仓库Hive安装

    Hive系列博文,持续更新~~~ 大数据系列之数据仓库Hive原理 大数据系列之数据仓库Hive安装 大数据系列之数据仓库Hive中分区Partition如何使用 大数据系列之数据仓库Hive命令使用 ...

  10. 大数据系列之数据仓库Hive命令使用及JDBC连接

    Hive系列博文,持续更新~~~ 大数据系列之数据仓库Hive原理 大数据系列之数据仓库Hive安装 大数据系列之数据仓库Hive中分区Partition如何使用 大数据系列之数据仓库Hive命令使用 ...

随机推荐

  1. java程序的工作原理

    Sun公司设计java语言的目标是让Java程序不必经过修改就可以在各种各样的计算机(包括PC机和工作站)上运行.为了实现这一目标,Sun公司提供了一阵Java虚拟机(Java Virtual Mac ...

  2. V8编程入门

    本文档介绍了V8引擎的一些关键概念,并提供了例子hello world指引你入门. Hello World 让我们看一个Hello World的示例,它将一个字符串参数作为JavaScript语句,执 ...

  3. Flex移动应用程序开发的技巧和窍门(二)

    范例文件 flex-mobile-dev-tips-tricks-pt2.zip 这是关于Flex移动应用程序开发的技巧和窍门的一系列文章中的第二部分.第一部分 内容主要集中讨论了视图之间以及应用程序 ...

  4. iOS 获取公历、农历日期的年月日

    iOS 获取公历.农历日期的年月日 介绍三种方法获取 Date (NSDate) 的年月日. 用 date 表示当前日期.测试日期为公历 2017 年 2 月 5 日,农历丁酉年,鸡年,正月初九. l ...

  5. Tomcat的安装配置与JavaWeb入门教程

    本文开发环境: windos7 , Eclipse-mars , JDK1.7 , Tomcat7.0 1.关于Tomcat 先来看一段Tomcat的介绍: Tomcat是Apache 软件基金会(A ...

  6. Python自然语言处理学习笔记之性别识别

    从今天起开始写自然语言处理的实践用法,今天学了文本分类,并没用什么创新的东西,只是把学到的知识点复习一下 性别识别(根据给定的名字确定性别) 第一步是创建一个特征提取函数(feature extrac ...

  7. 用label实现自适应宽度的方法

  8. 隐藏Apache的版本号及其它敏感信息

    首先,打开配置文件: /etc/apache2/apache2.conf 来修改ServerTokens 的配置: 找到:ServerTokens Full 所在行,将其改为: ServerToken ...

  9. (转)java二维数组的深度学习(静态与动态)

    转自:http://developer.51cto.com/art/200906/128274.htm,谢谢 初始化: 1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行:2.静态初始化:在 ...

  10. FPGA学习体会

    我是安徽工程大学电子信息科学与技术专业的学生刘美花,在v3学院的培训结束了,这十几天的培训对我来说还是挺有意义的,不过中间也有一些波折.还记得刚开始的时候和老师还有各个学校的学生不太熟,心中有诸多不满 ...