作者:周邦涛(Timen)

Email:zhoubangtao@gmail.com

转载请注明出处:  http://blog.csdn.net/zhoubangtao/article/details/27706813

简单介绍部分请參考【Flume NG用户指南】(0)介绍

2 设置

2.1 设置一个Agent

Flume Agent配置存在本地的配置文件里。它是一个Java Properties文件格式的文本文件。一个配置文件里能够配置一个或多个Agent。配置文件包括了一个Agent中每个Source、Sink和Channel的属性,以及它们怎样连接起来形成数据流。

2.1.1 配置各自的组件

每个组件(Source、Sink和Channel)都有name、type以及跟特性type相关联的其它属性集。

比如,一个Avro Source须要一个hostname或者是IP地址以及一个port号去接收数据。

一个Memory Channel的最大队列数(“capacity”),一个HDFS Sink须要知道文件系统的URI。创建文件的路径以及文件循环的频率(“hdfs.rollInternal”)等等。一个组件的全部这些属性都须要被设置在这个Flume Agent所以来的配置文件里。

2.1.2 把各个组件串起来

Flume Agent须要知道载入什么样的组件,以及怎样将这些组件依照循序串起来形成数据流。

这就须要列出Agent中每个Source、Sink和Channel的名字。然后为每个Source和Sink指定连接的Channel。比如,一个Agent从一个叫avroWeb的Avro Source通过一个叫做file-channel的File Channel传输Event到一个叫hdfs-cluster1的HDFS Sink中。这个配置文件就须要包括这些组件的名字,而且file-channel作为avroWeb和hdfs-cluster1共享的Channel。

2.1.3 启动一个Agent

Agent通过一个叫做flume-ng的shell脚本启动。flume-ng位于Flume分发包的bin文件夹下。你须要在命令行指定Agent的名字、配置文件文件夹以及相应的配置文件:

$ bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties.template

下载Flume Agent就会执行配置的Source和Sink了。

2.1.4 一个简单的样例

这里我们举一个配置文件样例。描写叙述单节点Flume部署。

这个配置文件用户生成Event而且把他们顺序地打印到console上。

# 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

这个配置文件定义了一个单独的叫做a1的Agent。a1有一个在44444port上监听数据的Source。一个把Event暂存到Memory的Channel以及一个把Event数据打印到console的Sink。这个配置文件命名了各种各样的组件,然后描写叙述了他们的类型和配置參数。一个给定的配置文件可能定义了多个命名的Agent;当一个给定的Flume进程要被启动时,一个标志会传进去来告诉它究竟哪个命名的Agent要被启动。

基于这个配置文件,我们能够通过下面方式启动Flume:

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

注意在一个完整的部署中,我们一般会多包括一个配置:--conf=<conf-dir>。<conf-dir>文件夹包括一个叫做flume-env.sh的shell脚本和一个log4j配置文件。

这个样例中我们传入了一个Java选项强制Flume把日志记录在console上,而且不使用定制的环境脚本。

从还有一个shell终端,我们能够telnet 44444port然后发送一个Event:

$ telnet localhost 44444
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
Hello world! <ENTER>
OK

之前的Flume启动终端上就会用日志形式输出传入的Event。

12/06/19 15:32:19 INFO source.NetcatSource: Source starting
12/06/19 15:32:19 INFO source.NetcatSource: Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]
12/06/19 15:32:34 INFO sink.LoggerSink: Event: { headers:{} body: 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0D Hello world!. }

祝贺你。你已经成功配置并部署了一个Flume Agent。下边的文章更具体的讲述了Agent 的配置。

2.1.5 安装第三方插件

Flume完整的基于插件的架构。

Flume自来了非常多直接可用的Source、Channel、Sink和Serializer。

可是还有非常多第三方的实现是跟Flume分开发行的。

你能够在flume-env.sh中把第三方的jar包加入到FLUME_CLASSPATH变量中来包括定制的组件。可是如今Flume支持一个叫做plugins.d的特殊文件夹。它会自己主动把依照一定格式打包起来的Plugin组装起来。这个能够更方便的管理插件打包,以及更简单的调试和跟踪。尤其是jar包依赖冲突。

2.1.5.1 plugins.d文件夹

plugins.d文件夹位于$FLUME_HOME/plugins.d。在启动时,flume-ng启动脚本查找plugins.d文件夹下符合下面格式的plugin,然后把他们包括到合适的路径上。

2.1.5.2 plugin的文件夹布局

每个在plugins.d文件夹的plugin(事实上就是子文件夹)可以包括三个子文件夹:

  1. lib : plugin的jar
  2. libext : plugin依赖的jar
  3. native : 不论什么须要的本地库,比如.so文件

plugins.d文件夹下两个plugin的样例:

plugins.d/
plugins.d/custom-source-1/
plugins.d/custom-source-1/lib/my-source.jar
plugins.d/custom-source-1/libext/spring-core-2.5.6.jar
plugins.d/custom-source-2/
plugins.d/custom-source-2/lib/custom.jar
plugins.d/custom-source-2/native/gettext.so

2.2 数据採集

Flume支持非常多从不同数据源採集数据的机制

2.2.1 RPC

Flume分发包中的一个Avroclient能够通过Avro RPC机制将一个给定的文件发送给Flume Avro Source。

$ bin/flume-ng avro-client -H localhost -p 41414 -F /usr/logs/log.10

上边的命令会发送/usr/logs/log.10的内容发送到监听那个port的Flume Source上。

2.2.2 运行命令

Flume分发包中有一个exec Source可一个运行一个给定的命令,而且消费的输出。一个输出的一行。比如以'\r'或'\n'或两者结尾的文本。

注:Flume不支持tail作为一个Source。

只是你能够封装tail命令到一个exec Source中从而流化文件。

2.2.3 网络流

Flume支持一下的机制去从经常使用的日志流中读取数据。比如:

  1. Avro
  2. Thrift
  3. Syslog
  4. Netcat

2.3 配置多Agent流

为了使数据跨多个Agent和hop传输。前一个Agent的Sink和当前Agent的Source须要时Avro类型的,而且Sink指向Source的hostname和port。

2.4 合并

日志收集中一个很常见的场景是大量的日志生产client向少量的和存储系统关联的消费端Agent发送数据。比如,从成百上千个Webserver收集日志然后发送到十几个写入HDFS集群的Agent。

这能够通过配置多个第一层的带有Avro Sink的Agent,而且所Avro Sink都指向一个单的Agent的Avro Source上。第二层Agent的Source合并接收过来的数据到单独的Channel中。然后由Sink消费并发送到目的地。

2.5 拆分流(多路输出)

Flume支持多路输出Event到一个或多个目的地。能够通过定义一个流多路输出器。它来复制或选择性路由一个Event到一个或多个Channel中。

上边的样例显示了一个叫“foo”的Agent的一个Source扇出数据流到三个不同的Channel中。

这个扇出能够是复制或者多路输出。

在复制流的情况下,每个Event被发送到三个Channel中。

在多路输出的情况下。一个Event依据它的属性和提前定义值的匹配情况被传送到可用Channel一个子集中,比如,假设一个Event的属性叫做txnType,而且被设置为“customer”,然后它应该被传送到channel1和channel3中。假设被设置为“vendor”。它应该被传送到channel2中。否则channel3中。

这些映射都能够在配置文件里进行配置。

关于Flume的配置请參考配置一文【Flume NG用户指南】(2)配置

作者:周邦涛(Timen)

Email:zhoubangtao@gmail.com

转载请注明出处:  http://blog.csdn.net/zhoubangtao/article/details/27706813

【Flume NG用户指南】(1)设置的更多相关文章

  1. 【Flume NG用户指南】(2)构造

    作者:周邦涛(Timen) Email:zhoubangtao@gmail.com 转载请注明出处:  http://blog.csdn.net/zhoubangtao/article/details ...

  2. Flume NG Getting Started(Flume NG 新手入门指南)

    Flume NG Getting Started(Flume NG 新手入门指南)翻译 新手入门 Flume NG是什么? 有什么改变? 获得Flume NG 从源码构建 配置 flume-ng全局选 ...

  3. 【翻译】Flume 1.8.0 User Guide(用户指南) Processors

    翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...

  4. 【翻译】Flume 1.8.0 User Guide(用户指南) Channel

    翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...

  5. 【翻译】Flume 1.8.0 User Guide(用户指南) Sink

    翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...

  6. 【翻译】Flume 1.8.0 User Guide(用户指南) source

    翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...

  7. 【翻译】Flume 1.8.0 User Guide(用户指南)

    翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...

  8. flume1.9 用户指南(中文版)

    概述 Apache Flume是一个分布式,可靠且可用的系统,用于有效地从许多不同的source收集,聚合和移动大量日志数据到集中式数据存储. Apache Flume的使用不仅限于日志数据聚合.由于 ...

  9. 【转】Flume(NG)架构设计要点及配置实践

    Flume(NG)架构设计要点及配置实践   Flume NG是一个分布式.可靠.可用的系统,它能够将不同数据源的海量日志数据进行高效收集.聚合.移动,最后存储到一个中心化数据存储系统中.由原来的Fl ...

随机推荐

  1. Sicily-1438

    一.      题意 买二送一.排序之后隔三求和,求折扣的最大值. 二.      代码 // // main.cpp // sicily-1438 // // Created by ashley o ...

  2. [置顶] 【J2SE 】1136 容器之旅

    开篇引言 本篇文章我将要详细的介绍一下什么是容器?以及什么是1136?来系统全面的了解容器,以及容器的应用,下面就进入我们的容器之旅吧! 1.什么是容器? 用来存储和组织其他对象的对象.我们也可以这样 ...

  3. CTreeCtrl 控件使用总结

    一 基础操作  1 插入节点 1)插入根节点 [cpp] view plaincopy //插入根节点 HTREEITEM hRoot; CString str=L"ROOT" h ...

  4. 百度——LBS.云 v2.0——云存储的POI创建和删除--Android 源码

    如有疑问请联系:QQ936467727 需要注意的几点问题: 1.密钥是http://lbsyun.baidu.com/apiconsole/key申请的,密钥类型是浏览器端 2.geotable_i ...

  5. 七、cocos2dx之粒子系统

    本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=66 一.介绍 粒子系统指的是一个使用大量很小的精灵或者其他的一些绘制对象模拟一些模糊效果.使用传统的 ...

  6. nvarchar and nchar

    Same: 1.store unicode charactor. 2. A charactor is stroed with 2 bytes. Different. 1. nchar  会自动填充数据 ...

  7. C++日期和时间

    C++ 日期 & 时间 C++ 标准库没有提供所谓的日期类型.C++ 继承了 C 语言用于日期和时间操作的结构和函数.为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 <c ...

  8. BZOJ 1782: [Usaco2010 Feb]slowdown 慢慢游( BIT + dfs )

    orz...hzwer 对着大神的 code 看 , 稍微理解了. 考虑一只牛到达 , 那它所在子树全部 +1 , 可以用BIT维护 --------------------------------- ...

  9. django1.6.x(python3.3)使用pymysql连接mysql

    1.安装 pymysql,地址:https://code.google.com/p/pymysql/ 2.安装django 然后执行 django-admin.py startproject mysi ...

  10. 4.7 《硬啃设计模式》 第24章 麻烦的多角关系 - 中介者模式(Mediator Pattern)简介

    在Windows程序中,有时候界面控件之间的交互会很麻烦,如:A控件显示什么的时候,B控件要显示什么,另外C控件要不可用,同样其它控件也会有类似的复杂要求.控件与控件之间很容易形成复杂的多角关系了.现 ...