使用flume,伪分布式集群配置

伪分布式搭建

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 masterflume 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左右,这实际上是一个可配置的默认的设置的值,但测试时同步的延迟没有这么高。