大型协作框架flume中avro类型的应用场景
2017-09-27 23:39
274 查看
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
编辑
Flume最早是Cloudera提供的日志收集系统,目前是Apache下的一个孵化项目,Flume支持在日志系统中定制各类数据发送方,用于收集数据。
Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力 。Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统),支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。
编辑
Flume-og采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。
Flume-ng最明显的改动就是取消了集中管理配置的 Master 和 Zookeeper,变为一个纯粹的传输工具。Flume-ng另一个主要的不同点是读入数据和写出数据现在由不同的工作线程处理(称为 Runner)。 在 Flume-og 中,读入线程同样做写出工作(除了故障重试)。如果写出慢的话(不是完全失败),它将阻塞 Flume 接收数据的能力。这种异步的设计使读入线程可以顺畅的工作而无需关注下游的任何问题。
1、avro source
侦听Avro端口并从外部Avro客户端流接收事件。 当与另一个(上一跳)Flume代理上的内置Avro Sink配对时,它可以创建分层集合拓扑。
2、thrif source
监听Thrift端口并从外部Thrift客户端流接收事件。 当与另一(前一跳)Flume代理上的内置ThriftSink配对时,它可以创建分层集合拓扑。 Thrift源可以配置为通过启用kerberos身份验证在安全模式下启动。 agent-principal和agent-keytab是Thrift源用来向kerberos KDC进行身份验证的属性。
3、exec source
Exec源在启动时运行给定的Unix命令,并期望该进程在标准输出上连续产生数据(除非属性logStdErr设置为true,否则stderr将被丢弃)。 如果进程由于任何原因退出,源也会退出,并且不会产生进一步的数据。 这意味着诸如cat [named pipe]或tail -F [file]之类的配置将产生期望的结果,其中日期可能不会 - 前两个命令产生数据流,其中后者产生单个事件并退出。
4、spooling directory source
此源允许您通过将要提取的文件放入磁盘上的“spooling”目录中来提取数据。此源将监视新文件的指定目录,并在新文件显示时解析新文件中的事件。事件解析逻辑是可插入的。在给定文件被完全读入通道之后,它被重命名以指示完成(或可选地被删除)。
与Exec源不同,该源是可靠的,并且不会错过数据,即使Flume被重新启动或被杀死。为了换取这种可靠性,只有不可变,唯一命名的文件必须放入spooling目录中。 Flume尝试检测这些问题条件,如果违反则会大声失败:
如果在放入spooling目录后写入文件,Flume将在其日志文件中打印一个错误并停止处理。
如果以后重新使用文件名,Flume会在其日志文件中打印一个错误并停止处理。
c13d
5、kafka source
Kafka Source是一个从Kafka主题读取消息的Apache Kafka消费者。 如果您有多个Kafka源运行,您可以使用相同的Consumer Group配置它们,这样每个都将为主题读取一组唯一的分区。
下面是笔者在实际应用中用到的一种avro类型resource:
需要配置两个配置文件:
1.
2.
-----------------------------------
------------------------
## define agent source、 channel、 sinks、name
a1.sources = s1
a1.channels = c1
a1.sinks = k1
## define sources
a1.sources.s1.type = exec
a1.sources.s1.command = tail -F /usr/local/nginx/datalog/access.log
a1.sources.s1.shell = /bin/bash -c
## define channels
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
## define sinks
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = 192.168.134.101
a1.sinks.k1.port = 4545
## 关联 sources和 sinks
a1.sources.s1.channels = c1
a1.sinks.k1.channel = c1
--------------------------------
------------------------------------
## define agent source、 channel、 sinks、name
a2.sources = s2
a2.channels = c2
a2.sinks = k2
## define sources
a2.sources.s2.type = avro
a2.sources.s2.bind = 192.168.134.101
a2.sources.s2.port = 4545
## define channels
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 100
## define sinks
a2.sinks.k2.type = hdfs
a2.sinks.k2.hdfs.path = hdfs://192.168.134.101:8020/flume/%Y%m%d
a2.sinks.k2.hdfs.filePrefix = access_log
## 设置目录按照年/月/日进行回滚
a2.sinks.k2.hdfs.round = true
a2.sinks.k2.hdfs.roundValue = 1
a2.sinks.k2.hdfs.roundUnit = day
## 解决生产很多小文件,设置文件回滚的条件
a2.sinks.k2.hdfs.rollInterval = 0
a2.sinks.k2.hdfs.rollSize = 134217728
a2.sinks.k2.hdfs.rollCount = 0
## 这个参数必须设置,不然上面的回滚设置不生效
a2.sinks.k2.hdfs.minBlockReplicas = 1
a2.sinks.k2.hdfs.batchSize = 1000
a2.sinks.k2.hdfs.fileType = DataStream
a2.sinks.k2.hdfs.writeFormat = Text
a2.sinks.k2.hdfs.useLocalTimeStamp = true
## 关联 sources和 sinks
a2.sources.s2.channels = c2
a2.sinks.k2.channel = c2
---------------------------------------------------------------------------
两个文档分别是flume执行时所需的配置文件,文档一收集的日志放到4545端口(该端口为自定义端口),做为文档2的source,文档2收集的数据在存放在hdfs上面。
应用场景:
一共五台服务器,每台机子上面都有flume、nginx;这五台服务器的nginx服务器产生的日志都回桶过文档一的配置收集在一起,第二个配置在这五台中的任意一台启动application,负责收集4545端口的数据(既五台agent收集到一起的数据),作为source,最后存放在hdfs上面。
系统功能
编辑
日志收集
Flume最早是Cloudera提供的日志收集系统,目前是Apache下的一个孵化项目,Flume支持在日志系统中定制各类数据发送方,用于收集数据。
数据处理
Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力 。Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统),支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。
工作方式
编辑Flume-og采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。
Flume-ng最明显的改动就是取消了集中管理配置的 Master 和 Zookeeper,变为一个纯粹的传输工具。Flume-ng另一个主要的不同点是读入数据和写出数据现在由不同的工作线程处理(称为 Runner)。 在 Flume-og 中,读入线程同样做写出工作(除了故障重试)。如果写出慢的话(不是完全失败),它将阻塞 Flume 接收数据的能力。这种异步的设计使读入线程可以顺畅的工作而无需关注下游的任何问题。
source的类型:
1、avro source侦听Avro端口并从外部Avro客户端流接收事件。 当与另一个(上一跳)Flume代理上的内置Avro Sink配对时,它可以创建分层集合拓扑。
2、thrif source
监听Thrift端口并从外部Thrift客户端流接收事件。 当与另一(前一跳)Flume代理上的内置ThriftSink配对时,它可以创建分层集合拓扑。 Thrift源可以配置为通过启用kerberos身份验证在安全模式下启动。 agent-principal和agent-keytab是Thrift源用来向kerberos KDC进行身份验证的属性。
3、exec source
Exec源在启动时运行给定的Unix命令,并期望该进程在标准输出上连续产生数据(除非属性logStdErr设置为true,否则stderr将被丢弃)。 如果进程由于任何原因退出,源也会退出,并且不会产生进一步的数据。 这意味着诸如cat [named pipe]或tail -F [file]之类的配置将产生期望的结果,其中日期可能不会 - 前两个命令产生数据流,其中后者产生单个事件并退出。
4、spooling directory source
此源允许您通过将要提取的文件放入磁盘上的“spooling”目录中来提取数据。此源将监视新文件的指定目录,并在新文件显示时解析新文件中的事件。事件解析逻辑是可插入的。在给定文件被完全读入通道之后,它被重命名以指示完成(或可选地被删除)。
与Exec源不同,该源是可靠的,并且不会错过数据,即使Flume被重新启动或被杀死。为了换取这种可靠性,只有不可变,唯一命名的文件必须放入spooling目录中。 Flume尝试检测这些问题条件,如果违反则会大声失败:
如果在放入spooling目录后写入文件,Flume将在其日志文件中打印一个错误并停止处理。
如果以后重新使用文件名,Flume会在其日志文件中打印一个错误并停止处理。
c13d
5、kafka source
Kafka Source是一个从Kafka主题读取消息的Apache Kafka消费者。 如果您有多个Kafka源运行,您可以使用相同的Consumer Group配置它们,这样每个都将为主题读取一组唯一的分区。
下面是笔者在实际应用中用到的一种avro类型resource:
需要配置两个配置文件:
1.
2.
-----------------------------------
------------------------
## define agent source、 channel、 sinks、name
a1.sources = s1
a1.channels = c1
a1.sinks = k1
## define sources
a1.sources.s1.type = exec
a1.sources.s1.command = tail -F /usr/local/nginx/datalog/access.log
a1.sources.s1.shell = /bin/bash -c
## define channels
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
## define sinks
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = 192.168.134.101
a1.sinks.k1.port = 4545
## 关联 sources和 sinks
a1.sources.s1.channels = c1
a1.sinks.k1.channel = c1
--------------------------------
------------------------------------
## define agent source、 channel、 sinks、name
a2.sources = s2
a2.channels = c2
a2.sinks = k2
## define sources
a2.sources.s2.type = avro
a2.sources.s2.bind = 192.168.134.101
a2.sources.s2.port = 4545
## define channels
a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 100
## define sinks
a2.sinks.k2.type = hdfs
a2.sinks.k2.hdfs.path = hdfs://192.168.134.101:8020/flume/%Y%m%d
a2.sinks.k2.hdfs.filePrefix = access_log
## 设置目录按照年/月/日进行回滚
a2.sinks.k2.hdfs.round = true
a2.sinks.k2.hdfs.roundValue = 1
a2.sinks.k2.hdfs.roundUnit = day
## 解决生产很多小文件,设置文件回滚的条件
a2.sinks.k2.hdfs.rollInterval = 0
a2.sinks.k2.hdfs.rollSize = 134217728
a2.sinks.k2.hdfs.rollCount = 0
## 这个参数必须设置,不然上面的回滚设置不生效
a2.sinks.k2.hdfs.minBlockReplicas = 1
a2.sinks.k2.hdfs.batchSize = 1000
a2.sinks.k2.hdfs.fileType = DataStream
a2.sinks.k2.hdfs.writeFormat = Text
a2.sinks.k2.hdfs.useLocalTimeStamp = true
## 关联 sources和 sinks
a2.sources.s2.channels = c2
a2.sinks.k2.channel = c2
---------------------------------------------------------------------------
两个文档分别是flume执行时所需的配置文件,文档一收集的日志放到4545端口(该端口为自定义端口),做为文档2的source,文档2收集的数据在存放在hdfs上面。
应用场景:
一共五台服务器,每台机子上面都有flume、nginx;这五台服务器的nginx服务器产生的日志都回桶过文档一的配置收集在一起,第二个配置在这五台中的任意一台启动application,负责收集4545端口的数据(既五台agent收集到一起的数据),作为source,最后存放在hdfs上面。
相关文章推荐
- 阿里云DDoS高防IP框架原理及应用场景(详细篇)
- Java应用场景的解决框架资源大全
- Redis的五种存储类型和其应用场景
- redis 数据类型及应用场景
- Paxos算法在大型系统中常见的应用场景
- Avro技术应用_8. 混合模式 - MR 输入/出文件为 Avro类型 -- 待完善
- js判断数据类型的几种方法及应用场景分析
- MySQL数据库之布尔类型、枚举类型和集合类型的应用场景详解
- Redis的五种存储类型和其应用场景
- 【前端框架】Backbone.js在大型单页面应用中的应用实践
- JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
- JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
- 七周七种前端框架四:Vue.js 构建大型应用
- SSM框架中注解含义及应用场景小结
- flume-ng应用场景分析
- Paxos在大型系统中常见的应用场景
- ode在大型mmo场景中的应用
- Redis中7种集合类型应用场景
- Avro技术应用_9. 基于记录 - MR 输入/出/中间数据使用 Avro 类型 -- 待完善
- Flume协作框架