Flume 中文入门手冊
原文:https://cwiki.apache.org/confluence/display/FLUME/Getting+Started
什么是 Flume NG?
Flume NG 旨在比起 Flume OG 变得明显更简单。更小。更easy部署。在这样的情况下,我们不提交Flume NG 到 Flume OG 的后向兼容。当前。我们期待来自感兴趣測试Flume NG 正确性、易用性和与别的系统集成的可能性的人的反馈。
变了什么?
Flume NG (下一代)的实现中尽管保持了非常多原来的概念,但 与 Flume OG (原版) 还是有非常大的差别。假设你熟悉 Flume, h这些可能是你想知道的。
- 你仍会有 sources 和sinks ,他们还做相同的事情.
他们由 channels 连接.- Channels 可插入式的、命令持久的。
Flume NG ships with an in-memory channel for fast, but non-durable event delivery and a file-based channel for durable event delivery. ?
- Channels 可插入式的、命令持久的。
- 没有很多其它的逻辑或物理的节点。我们能够把全部的物理节点叫做 agents,agents 能够执行0到多个 sources 和 sinks。
- 没有 master 和 ZooKeeper 的依赖了。此时, Flume 执行于一个简单的基于文件配置的系统。
- 一切都是插件,一些面向终于用户的,一些面向工具和系统开发人员的。可插入组件包含 channels, sources, sinks, interceptors, sink processors, 和 event serializers.
获得 Flume NG
Flume在下载页面上有源代码包和二进制文件可用。假设你并不打算为Flume 创建 补丁,二进制文件可能是開始的最好方式。
从源代码中创建
要从源代码中创建,你须要git, Sun JDK 1.6, Apache Maven 3.x, 大约 90MB 的本地硬盘空间和网络连接。
1. 签出源代码
$ git clone https://git-wip-us.apache.org/repos/asf/flume.git$ cd flume$ git checkout trunk |
2. 编译项目
Apache Flume 的创建须要比默认配置很多其它的内存。
我们推荐设置Maven的例如以下选项:
export MAVEN_OPTS="-Xms512m |
# 创建代码和运行測试 (注意: 用 mvn install, 不是 mvn package,$ mvn install# ...或者不运行測试的安装$ mvn install -DskipTests |
(请注意为编译成功 Flume 要求 Google Protocol Buffers 编译器在path 中。你能够依照这里的步骤下载安装它。 here.)
这些在 flume-ng-dist/target 中生成两种包.他们是:
- apache-flume-ng-dist-1.4.0-SNAPSHOT-bin.tar.gz - Flume 的二进制版, 待执行
- apache-flume-ng-dist-1.4.0-SNAPSHOT-src.tar.gz - 仅有源代码的 Flume 公布版
假设你是一个用户,仅仅想要执行 Flume, 你可能想要的是 -bin 版本号。复制一个、解压之,你就准备好用了。
$ cp flume-ng-dist/target/apache-flume-1.4.0-SNAPSHOT-bin.tar.gz$ tar -zxvf apache-flume-1.4.0-SNAPSHOT-bin.tar.gz$ cd apache-flume-1.4.0-SNAPSHOT-bin |
3.基于工作模板创建你的属性文件(或从头创建一个)
$ cp conf/flume-conf.properties.template conf/flume.conf |
4. (可选) 基于模板创建你的 flume-env.sh 文件(或从头创建一个)。
flume-ng 可运行文件通过在命令行中指定--conf/-c 在conf 文件夹中寻找一个名为 "flume-env.sh" 的文件。 一个使用 flume-env.sh 的样例是在开发你自己的如sources 和 sinks的 Flume NG组件时通过 JAVA_OPTS 指定debugging 或 profiling 选项。
$ cp conf/flume-env.sh.template conf/flume-env.sh |
5. 配置和执行Flume NG
在你配置完 Flume NG (见下),你能够用 bin/flume-ng 运行它. 这个脚本有一些參数和模式。
配置
Flume 用一个基于配置格式的 Java 属性文件。
当执行一个 agent时。须要你通过 -f <file> 选项(见上)的方式告诉 Flume 哪个文件要用。
这个文件可放在不论什么地方,可是从传统-和在未来-conf文件夹才是正确放置配置文件的地方。
让我们開始一个简单的样例. 复制粘贴这些到 conf/flume.conf:
# 在 agent1上定义一个叫做ch1的内存channelagent1.channels.ch1.type = memory# 在 agent1 上定义一个叫做avro-source1 的 Avro source 并告诉它# 绑定到 0.0.0.0:41414.agent1.sources.avro-source1.channels = ch1agent1.sources.avro-source1.type = avroagent1.sources.avro-source1.bind = 0.0.0.0agent1.sources.avro-source1.port = 41414# 定义一个 logger sink ,记录它收到的全部事件# 把它和在同一 channel 上的别的终端相连agent1.sinks.log-sink1.channel = ch1agent1.sinks.log-sink1.type = logger# 最后,既然我们已经定义了全部的组件,告诉agent1 我们想要激活哪一个agent1.channels = ch1agent1.sources = avro-source1agent1.sinks = log-sink1 |
这是样例创建了一个内存channel(如,一个不可信或“最小效果”的传输),一个 Avro RPC source。和一个连接他们的日志sink. Avro source 接收的不论什么事件 被路由给 channel ch1并发送给日志sink。须要注意的是定义组件是配置 Flume 的第一半,他们必须被通过列在 <agent>.channels, <agent>.sources,
(和 sections. Multiple sources, sinks, 和 channels 也可能被列入,按空格分隔)激活。
要看很多其它细节,请看 org.apache.flume.conf.properties.PropertiesFileConfigurationProvider 类的 文档。.
这是一列此时已实现了的 sources, sinks, 和 channels。每一个插件有其自身的选项并须要配置属性,所以请 看文档(如今)。
|
组件 |
类型 |
描写叙述 |
实现类 |
|---|---|---|---|
|
Channel |
memory |
内存中,快,非持久事件传输 |
MemoryChannel |
|
Channel |
file |
一个 reading, writing, mapping, 和 manipulating 一个文件 的 channel |
FileChannel |
|
Channel |
jdbc |
JDBC-based, durable event transport (Derby-based) |
JDBCChannel |
|
Channel |
recoverablememory |
一个用本地文件系统做存储的非持久 channel 实现 |
RecoverableMemoryChannel |
|
Channel |
org.apache.flume.channel.PseudoTxnMemoryChannel |
主要用作測试,不是生产用的 |
PseudoTxnMemoryChannel |
|
Channel |
(custom type as FQCN) |
你自己的 Channel 实现 |
(custom FQCN) |
|
Source |
avro |
Avro Netty RPC event source |
AvroSource |
|
Source |
exec |
Execute a long-lived Unix process and read from stdout |
ExecSource |
|
Source |
netcat |
Netcat style TCP event source |
NetcatSource |
|
Source |
seq |
Monotonically incrementing sequence generator event source |
SequenceGeneratorSource |
|
Source |
org.apache.flume.source.StressSource |
主要用作測试,不是生产用的。Serves as a continuous source of events where each event has the same payload. The payload consists |
org.apache.flume.source.StressSource |
|
Source |
syslogtcp |
SyslogTcpSource |
|
|
Source |
syslogudp |
SyslogUDPSource |
|
|
Source |
org.apache.flume.source.avroLegacy.AvroLegacySource |
AvroLegacySource |
|
|
Source |
org.apache.flume.source.thriftLegacy.ThriftLegacySource |
ThriftLegacySource |
|
|
Source |
org.apache.flume.source.scribe.ScribeSource |
ScribeSource |
|
|
Source |
(custom type as FQCN) |
你自己的 Source 实现 |
(custom FQCN) |
|
Sink |
hdfs |
Writes all events received to HDFS (with support for rolling, bucketing, HDFS-200 append, and more) |
HDFSEventSink |
|
Sink |
org.apache.flume.sink.hbase.HBaseSink |
A simple sink that reads events from a channel and writes them to HBase. |
org.apache.flume.sink.hbase.HBaseSink |
|
Sink |
org.apache.flume.sink.hbase.AsyncHBaseSink |
org.apache.flume.sink.hbase.AsyncHBaseSink |
|
|
Sink |
logger |
Log events at INFO level via configured logging subsystem (log4j by default) |
LoggerSink |
|
Sink |
avro |
Sink that invokes a pre-defined Avro protocol method for all events it receives (when paired with an avro source, forms tiered collection) |
AvroSink |
|
Sink |
file_roll |
RollingFileSink |
|
|
Sink |
irc |
IRCSink |
|
|
Sink |
null |
/dev/null for Flume - blackhole all events received |
NullSink |
|
Sink |
(custom type as FQCN) |
你自己的 Sink 实现 |
(custom FQCN) |
|
ChannelSelector |
replicating |
ReplicatingChannelSelector |
|
|
ChannelSelector |
multiplexing |
MultiplexingChannelSelector |
|
|
ChannelSelector |
(custom type) |
你自己的 ChannelSelector 实现 |
(custom FQCN) |
|
SinkProcessor |
default |
DefaultSinkProcessor |
|
|
SinkProcessor |
failover |
FailoverSinkProcessor |
|
|
SinkProcessor |
load_balance |
多sink时提供平衡加载的能力 |
LoadBalancingSinkProcessor |
|
SinkProcessor |
(custom type as FQCN) |
你自己的 SinkProcessor 实现 |
(custom FQCN) |
|
Interceptor$Builder |
host |
HostInterceptor$Builder |
|
|
Interceptor$Builder |
timestamp |
TimestampInterceptor |
TimestampInterceptor$Builder |
|
Interceptor$Builder |
static |
StaticInterceptor$Builder |
|
|
Interceptor$Builder |
regex_filter |
RegexFilteringInterceptor$Builder |
|
|
Interceptor$Builder |
(custom type as FQCN) |
你自己的 Interceptor$Builder 实现 |
(custom FQCN) |
|
EventSerializer$Builder |
text |
BodyTextEventSerializer$Builder |
|
|
EventSerializer$Builder |
avro_event |
FlumeEventAvroEventSerializer$Builder |
|
|
EventSerializer |
org.apache.flume.sink.hbase.SimpleHbaseEventSerializer |
SimpleHbaseEventSerializer |
|
|
EventSerializer |
org.apache.flume.sink.hbase.SimpleAsyncHbaseEventSerializer |
SimpleAsyncHbaseEventSerializer |
|
|
EventSerializer |
org.apache.flume.sink.hbase.RegexHbaseEventSerializer |
RegexHbaseEventSerializer |
|
|
HbaseEventSerializer |
Custom implementation of serializer for HBaseSink. |
你自己的 HbaseEventSerializer 实现 |
(custom FQCN) |
|
AsyncHbaseEventSerializer |
Custom implementation of serializer for AsyncHbase sink. |
你自己的 AsyncHbaseEventSerializer 实现 |
(custom FQCN) |
|
EventSerializer$Builder |
Custom implementation of serializer for all sinks except for HBaseSink and AsyncHBaseSink. |
你自己的 EventSerializer$Builder 实现 |
(custom FQCN) |
flume-ng 让你执行一个有利于測试和实验的 Flume NG agent 或一个 Avro client 。
无论如何,你须要指定一个命令(如。 agent 或 avro-client) 和一个
conf 文件夹 (--conf <conf dir>).。
全部别的选项都在命令行指定。
用上面的 flume.conf 启动flume server:
bin/flume-ng agent --conf ./conf/ -f conf/flume.conf -Dflume.root.logger=DEBUG,console |
注意,agent 名称是以 -n 指定必须与
agent1-f conf/flume.conf 中给定的名字匹配
你的输出应该像这样:
$ bin/flume-ng agent --conf conf/ -f conf/flume.conf -n2012-03-16 16:36:11,918 (main)58)]12012-03-16 16:36:11,921 (main)54)]2012-03-16 16:36:11,926 (lifecycleSupervisor-1-0)110)]2012-03-16 16:36:11,928 (lifecycleSupervisor-1-0)58)]102012-03-16 16:36:11,929 (lifecycleSupervisor-1-0)114)]2012-03-16 16:36:11,926 (lifecycleSupervisor-1-1)67)]2012-03-16 16:36:11,930 (lifecycleSupervisor-1-1)87)]2012-03-16 16:36:11,930 (conf-file-poller-0)189)]for changes2012-03-16 16:36:11,931 (conf-file-poller-0)196)]2012-03-16 16:36:11,936 (conf-file-poller-0)225)]for agent:SOURCES: {avro-source1=ComponentConfiguration[avro-source1] CONFIG:41414,0.0.0.0} RUNNER: CONFIG:}CHANNELS: {ch1=ComponentConfiguration[ch1] CONFIG:}SINKS: {log-sink1=ComponentConfiguration[log-sink1] CONFIG: RUNNER: CONFIG:}2012-03-16 16:36:11,936 (conf-file-poller-0)119)]for agents:2012-03-16 16:36:11,937 (conf-file-poller-0)67)]2012-03-16 16:36:11,944 (conf-file-poller-0)73)]2012-03-16 16:36:11,957 (conf-file-poller-0)69)]2012-03-16 16:36:11,963 (conf-file-poller-0)52)]0.0.0.0 port:41414 }@79f6f296 counterGroup:{null counters:{}@43b09468}2012-03-16 16:36:11,974 (lifecycleSupervisor-1-1)122)]0.0.0.0 port:41414 }2012-03-16 16:36:11,975 (Thread-1)123)]2012-03-16 16:36:12,352 (lifecycleSupervisor-1-1)132)] |
flume-ng global 选项
|
选项 |
描写叙述 |
|---|---|
|
--conf,-c <conf> |
在 <conf> 文件夹使用配置 |
|
--classpath,-C <cp> |
追加到 classpath |
|
--dryrun,-d |
不真正启动 Flume,仅仅打印命令 |
|
-Dproperty=value |
设置一个JDK 系统的合适值 |
flume-ng agent 选项
给定 agent 命令,一个 Flume NG agent 将被一个给定的配置文件(必须) 启动。
|
选项 |
描写叙述 |
|---|---|
|
--conf-file,-f <file> |
声明你要执行哪一个配置文件 (必须) |
|
--name,-n <agentname> |
声明我们要执行的 agent 的名字(必须) |
flume-ng avro-client 选项
从标准输入执行一个 Avro client,发送文件或数据给一个 Flume NG Avro Source正在监听的指定的主机和port。
|
选项 |
描写叙述 |
|---|---|
|
--host,-H <hostname> |
指定 Flume agent 的主机名 (可能是本机) |
|
--port,-p <port> |
指定 Avro source 监听的port号 |
|
--filename,-F <filename> |
发送 <filename> 的每一行给 Flume (可选) |
|
--headerFile,-F <file> |
头文件的每一行包括 键/值对 |
Avro client把每一行(以 \n, \r, 或 \r\n) 都当作一个事件。对Flume 来说
结尾avro-client 命令就是 cat。比如,以下为每个linux用户创建一个事件并将其发送到本机的41414port上的 Flume
的 avro source 上。
在一个新窗体中键入 :
$ bin/flume-ng avro-client --conf conf -H localhost -p 41414 -F |
你应该看到像这样 :
2012-03-16 16:39:17,124 (main)175)]2012-03-16 16:39:17,127 (main)178)]2012-03-16 16:39:17,127 (main)183)]2012-03-16 16:39:17,129 (main)73)] |
在你的第一个窗体,即server执行的那个:
2012-03-16 16:39:16,738 (New1 ([id: 0x49e808ca,0:0:0:0:0:0:0:0:41414]))123)]0x0b92a848,127.0.0.1:39577 =>127.0.0.1:41414]2012-03-16 16:39:16,742 (New1-1)123)]0x0b92a848,127.0.0.1:39577 =>127.0.0.1:41414]ND: /127.0.0.1:414142012-03-16 16:39:16,742 (New1-1)123)]0x0b92a848,127.0.0.1:39577 =>127.0.0.1:41414]NECTED: /127.0.0.1:395772012-03-16 16:39:17,129 (New1-1)123)]0x0b92a848,127.0.0.1:39577 :>127.0.0.1:41414]2012-03-16 16:39:17,129 (New1-1)123)]0x0b92a848,127.0.0.1:39577 :>127.0.0.1:41414]2012-03-16 16:39:17,129 (New1-1)123)]0x0b92a848,127.0.0.1:39577 :>127.0.0.1:41414]2012-03-16 16:39:17,302 (Thread-1)68)]@5c1ae90c }2012-03-16 16:39:17,302 (Thread-1)68)]@6aba4211 }2012-03-16 16:39:17,302 (Thread-1)68)]@6a47a0d4 }2012-03-16 16:39:17,302 (Thread-1)68)]@48ff4cf }... |
祝贺你 !
你正在执行 Apache Flume !
Flume 中文入门手冊的更多相关文章
- 平实给力的写作指导入门手冊——leo鉴书57
写作是个体力活儿,须要不断的练习和砥砺.既然是体力劳动,那必定有套路,前人总结.后人学习并加以积累沉积,日久则形成不同的风格和流派有点儿像.相同,写作也有自己的套路和学习路径.初涉写作有必备之书吗?当 ...
- FreeMarker中文API手冊(完整)
FreeMarker概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用 ...
- Linux安装中文man手冊
1.下载中文包: http://pkgs.fedoraproject.org/repo/pkgs/man-pages-zh-CN/manpages-zh-1.5.1.tar.gz/13275fd039 ...
- 谷歌Web中文开发手冊:3响应式
https://developers.google.com/web/fundamentals/getting-started/your-first-multi-screen-site/responsi ...
- Nginx中文手冊
下载 : Nginx 中文手冊 Nginx 常见应用技术指南[Nginx Tips] 第二版 作者:NetSeek http://www.linuxtone.org (IT运维专家网|集群架构|性能调 ...
- MySQL中文參考手冊
非常好的中文手冊: 链接:http://www.sdau.edu.cn/support/mysq_doc/manual_toc.html
- 【D3 API 中文手冊】
[D3 API 中文手冊] 声明:本文仅供学习所用,未经作者同意严禁转载和演绎 <D3 API 中文手冊>是D3官方API文档的中文翻译. 始于2014-3-23日,基于VisualCre ...
- Python学习手冊笔记
之前为了编写一个svm分词的程序而简单学了下Python.认为Python非常好用.想深入并系统学习一下,了解一些机制,因此開始阅读<Python学习手冊(第三版)>. 假设仅仅是想高速入 ...
- L脚本语言语法手冊 0.10版
L脚本语言语法手冊 0.10版 简 介 L脚本语言是一个轻量级的,旨在接近自然语言的编程语言,眼下支持在中文.英文基础上的编程.并可扩展为随意语种.L脚本语言的语法结构简单.程序结构相对 ...
随机推荐
- 在Spark中自定义Kryo序列化输入输出API(转)
原文链接:在Spark中自定义Kryo序列化输入输出API 在Spark中内置支持两种系列化格式:(1).Java serialization:(2).Kryo serialization.在默认情况 ...
- [Todo]很不错的Java面试题类型整理,要看
http://www.importnew.com/21445.html 1. 问,以下,会返回什么. public int func() { int ret = 0; try{ throw new E ...
- Informatica 常用组件Source Qualifier之五 User Defined Join
User defined join : 输入用户定义的联接与输入自定义 SQL 查询类似.但是,只需输入 WHERE 子句的内容,而不是整个查询. 添加用户定义的联接时,源限定符转换包括默认 ...
- RecyclerView.ItemDecoration 间隔线
内容已更新到:https://www.cnblogs.com/baiqiantao/p/19762fb101659e8f4c1cea53e7acb446.html 目录一个通用分割线ItemDecor ...
- [Grunt] Development Automation Tasks with Grunt
With Grunt you can automate core tasks for your AngularJS project. In this lesson we will take a loo ...
- 面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
上一篇这里描写叙述了一个关于差异数据在开发过程中的一个长处,这里来演示另外一个特点:单机开发之无缝切换到C/S模式 一般C/S模式都面临一个问题: 就是开发过程中的调试难题,由于涉及到client和服 ...
- js 判断页面元素是否存在
转自:http://www.0fish.com/js/416 原生js写法案例: obj = document.getElementById("someID"); if (obj) ...
- Maven项目结合POI实现导入导入导入导入导入Excl表格Demo-亲测可用
第一步:写入maven依赖(3.6是比较稳定的版本,可用于生产环境) <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --& ...
- WCF 之 消息契约(MessageContract)
对于SOAP来说主要由两部分构成Header和Body,他们两个共同构成了SOAP的信封,通常来说Body保存具体的数据内容,Header保存一些上下文信息或关键信息. 比如:在一些情况下,具有这样的 ...
- Oracle 检索数据
SELECT * | { [ DISTINCT ] column | expression [ alias ] , ... } FROM ta ...