伪分布式搭建
flume主要有0.9和1.6两个版本,这里使用0.9版本
1.下载flume-0.9.4-cdh4.1.5
2.解压后进入到项目目录
3.执行bin/flume master,查看master可用http://host:35871/
4.另启一个终端执行bin/flume node,查看agent可用http://master:35862/
5.在http://host:35871/上,点config,提交一个配置
configure node : master(我机器的主机名)
source : tail("/home/hadoop/flume_file/sourcefile")
sink : text("/home/hadoop/flume_file/sinkfile")
6.回到配置主页面状态显示SUCCEEDED
7.现在向sourcefile追加内容,echo 'hello world' >> sourcefile
8.查看同步的sinkfile,显示master [INFO Sat Jun 18 17:35:01 CST 2016] { tailSrcFile : sourcefile } hello world
这样使用flume中的agent,没有使用到collector,在本机器同步数据。
下篇测试多机部署数据同步。
下面关于flume中的master、node介绍是从官方文档翻译的,水平很有限,如有问题请见谅并指出https://github.com/whx4J8/whx4j8.github.io
非分布式模式
flume有两种模式:flume master 和 flume node
master控制节点的数据流,他是一个单一的逻辑实体,拥有全局的状态数据,并控制flume节点的数据流和监控flume 节点。flume 节点作为事件流的数据路径,它们可以是事件数据的来源、管道、和消费者。节点周期性的与master发送一个心跳,并获取它们的数据流配置。
flume master
master可以通过下面的命令启动
flume master
然后master开始运行,你可以使用浏览器访问,localhost:35871。此网页显示与master 联系的所有的flume node的状态。并且显示当前所分配的每个node的配置,当你启动这个flume 节点运行时,状态和配置表应该是空的。
该网页包含四个表,这些表中的信息代表当前flume中的全局状态。
节点状态表
节点配置表
物理/逻辑节点映射表
命令历史表
master节点状态表包含所有与master接触的flume节点的名称,和它们当前的配置版本(最初是无),它们的状态。每个flume节点的名称与Linux主机名相同。
master节点配置表包含节点的逻辑名称,和分配给他的版本号,和他的source和sinks的规范。最初,这表是空的,但是在你更改值之后,你可以查看网页查看更新。有两组列,用户输入的version/source/sink。
master物理/逻辑节点映射表包含了逻辑节点到它们的物理节点的映射。
master命令历史记录表包含命令的状态。在一般的情况下,命令修改master全局状态。命令在master上被处理,并且分配一个唯一的命令标示号,每个命令有一个状态(成功、失败、挂起),一个命令行和一个尝试执行的消息。
flume node
要启动flume node , 在另一个终端执行命令
flume node_nowatch
检查flume node,访问localhost:35862。每个节点在一个表上显示自己的数据,包括关于节点的诊断、统计数据、数据流和正在运行所在机器的系统度量。如果你有多个flume程序运行在一台机器上,他会自动的递增端口号,并尝试绑定下一个端口号,记录最终的选定的端口。
如果node已经运行,你应该重新刷新master 状态页,确保node与master联通。如果你新加入一个节点,你应该在主节点状态表中看到一个新的节点,在逻辑节点映射表中有一个新的条目,将逻辑节点关联物理节点。
通过flume master 配置 node
node节点可以与master接触,master可以得到她们的配置。使你可以不需要登录到远程机器修改配置后重启守护进程。你可以快速更改节点以前的数据流。
在master的页面,点击config连接。你有两种形式。这些都是web接口配置node 数据流。当flume node 连接到master,将被通知数据流version已经改变了,然后重新实例化,并且激活配置。
对于这个例子,可以在 configure a single node 中输入值,并且提交。
刷新master的页面,注意version、source、sink的改变。状态更新位active,他已经准备接受控制台数据了。
在master,一个节点可以有几种状态
hello:一个新的node实例连接到master
idle:一个节点刚刚完成配置或者没有配置
configuring:一个节点已经收到一个配置,并且正在激活配置
active:一个节点正在积极的从源中提取数据,并且讲数据推到sink中
lost:节点与master失去联系
decommissioned:一个节点被故意退役从集群中
error:异常
常见的配置
配置 | node name | source | sink |
---|---|---|---|
1 | host | tail(“/home/hadoop/flume_file/sourcefile”) | console |
通过master改变系统中的不同节点的配置,从二获取从各种来源获取数据。
Sink 介绍
flume有各种各样的来源,产生或接受新的事件消息进入系统。你能限制这些消息到控制台,如你所料。flume为不同的目的地提供各种各样的事件sink。
许多事件的目的地,可能是本地硬盘,hdfs,控制台,转发网络接口。你使用sink作为一个接口,发送事件。
通过指定中心的配置,并提交master,可以将不同的source连接到不同的sink上。
flume event sinks 事件接受器
null 没有,事件被删除
console[("format")] 控制台,格式可选
text("txtfile"[,"format"]) 文件
dfs("dfsfile") 分布式文件系统
syslogTcp("host",port) 同步tcp端口
分层flume节点:agent 和 collector
如果通过网络发送事件是容易的、高效的、可靠的将是非常美好的。但是现实中,从分布式机器中和网络中收集数据,将极大的增加可能发生的事故和种类。底线是通过负责的策略保证可靠性。
flume 简化了这些问题,通过提供一个预定义的拓扑性和可靠性。只需要你为node节点设置一个角色。一个简单的flume node 的拓扑结构将node分为两个role。一个是flume agent 和flume collector。agent位于正在产生日志的机器上。例如你可以指定一个flume agent配置为syslogtcp为source,并且配置syslog 生成服务器发送日志到指定的本地端口。flume agent 会有一个agentSink作为他的sink配置,并且发送到collector。
collector集群侦听来自多个agent的数据记录,最终写到hdfs。
为了演示伪分布式模式下的新的sinks,你将实例化一个flume node在本地。为此,你需要在开始时配置一些额外的参数。下面的命令行启动一个物理节点名为collector
flume node_nowatch -n collector
在master的页面上,你最中会看到两个节点,host和collector。flume node节点状态网页。在localhost:35862 localhost:35863。
端口绑定依赖实例化顺序,第一个物理节点初始化在35862、第二个初始化在35863
接着,collector承担起收集器的角色,通过使用聚集多配置的方式,数据从控制台发送到collector中。将agent使用agentsink,一个高可靠的网络sink。collector 节点的source配置为collectorSource同时他的source配置为console
host : console | agentSink("localhost",35853) ;
collector : collectorSource(35853) | console ;
当你在终端输入,事件被发送到collector。现在当消息到达collector时,大概有一定的延迟15s左右,这实际上是一个可配置的默认的设置的值,但测试时同步的延迟没有这么高。