BigInsights 将实时日志收集体统 Flume 整合为产品的一部分,支持对 flume 极其相关组件 hadoop、zookeeper 的组合安装,用可视化界面为用户部署实时日志收集系统;另外 BigInsights flume 通过 flume runtime toolkit 支持快速的添加日志收集节点,无需配置,轻松实现日志收集系统的可扩展性。
Flume 是开源的海量日志收集系统,支持对日志的实时性收集。初始的 flume 版本是 flume OG(Flume original generation) 由 ">Cloudera 公司开发,叫做 Cloudera Flume;后来,cloudera 把 flume 贡献给 Apache,版本改为 FLUME NG(Flume next generation)现在称为 Apache Flume。最初始的 BigInsights 使用 flume 0.9.1,随后 BigInsights 将 Flume 升级到 0.9.4。这两个版本都属于 flume OG,基于开源的 Cloudera Flume。 本人认为,在 BigInsights 以后发布的版本中,flume 升级到 flume NG 是必然趋势。
BigInsights 包含了两个和 flume 密切相关的组件:hadoop 和 zookeeper。Flume 和 hadoop 的链接是其可以将收集的日志存于 hdfs,从而可以使用 hadoop 高效的处理日志数据,从日志中提取有用信息;而和 zookeeper 的关系是,flume 内部收集日志的各类节点可以通过 zookeeper(高效可靠的协同工作系统)进行管理,flume 各个节点的配置信息存放在 zookeeper 的 data 文件中。从整体上来讲,flume 和 zookeeper 是 hadoop 周边组件,都是和 hadoop 密切相关的;hadoop 也可以使用 zookeeper 管理内部各类节点。以 hadoop 为核心的大数据处理系统 BigInsights,将 zookeeper 和 flume 整合在系统中,为用户提供了可视化洁面,方便对多个组件的在多个节点上的整合安装;也就是说,使用 BigInsights 的可视化界面,用户可以轻松的在多个节点上部署 hadoop+flume+zookeeper,实现日志系统的布置。
另外,BigInsights 内部的 flume 通过 Flume Runtime Toolkit,为用户提供了无需配置的 flume 安装包,实现对当前 flume 集群的快速扩展。
Flume 基础知识
Flume 对日志数据的收集通过三种节点:master,agent,collector 之间的协作完成(表 1)。其中 agent、collector 都属于日志收集节点。数据的传输需要指定数据源(source)和数据汇集点(sink)(表 2)。Flume 中还有个重要的概念叫数据流(data flow)。数据流就是数据传输的管道,描述了日志数据从产生处到最终目的地的数据传送过程。flume 中通过对日志收集节点的 source,sink 配置,实现数据流的建立。
表 1. Flume 基本概念 1
节点名 节点职责 master node(主节点) 管理另外两种节点,是 flume 集群的控制器。 agent node(代理节点) 收集 log 的节点,其可以将收集到的 log 直接发给数据仓库,也可以将数据发给收集节点(collector node)。 collector node(收集节点) 对多个代理节点发过来的数据进行整合,
然后发给数据仓库。这个节点的产生是减少日志收集节点和数据仓库之间的连接。
其中,agent node 和 collector node 由数据源(source)和数据汇集点(sink)两部分组成。本人认为,collector node 和代理节点 agent node 是同一种 flume 节点类型,那就是负责收集日志数据的节点,只是日志的数据源(source)和数据汇集点(sink)地不同。
表 2. Flume 基本概念 2
角色 描述 sink 数据源,log 产生的位置。 source 数据汇集点,log 要被传送到的位置。
在某种情况下,一个 node 的 sink 有可能是另外一个 node 的 source。如表 3,在同一个机器上(机器名:hostname)启动两个日志收集节点:agent1,agent2。Agent1 从 log.text 文件中收集日志,将收集到的日志发送到端口 35853;另外一个日志收集节点 agent2 则从端口 35863 监听数据,并将监听到的数据存放在 hdfs 中。在此例中,agent1 的 sink 即是 agent2 的 source。
表 3. 节点配置实例
Node Source Sink Agent1 tail("/home/flume/log.text", false) agentSink( hostname, 35863) Agent2 collectorSource(35863) collectorSink( "hdfs://biginsight.ibm.com:
9000/flume", "agent-testing")
Flume 配置
Flume 的配置文件为 $FLUME_HOME/conf/flume-conf.xml,如果用户没有配置此文件,flume 将使用默认配置文件 flume-conf.xml.template。属性的描述以一下形式描述(以属性 flume.master.zk.servers 为例):
<property> <name>flume.master.zk.servers</name> <value>hostname:2181</value> <description>Zookeeper server<description> </property>
配置文件针对每个属性给出属性名(name)、属性值(value)与属性描述(description),其中属性描述不是必需的,可以省略。部署 Flume 过程中,与用户密切相关的属性(property)有如下几个(表 4):
表 4. 配置信息
属性(Property) 描述 flume.master.servers 主节点机器名(master node) flume.master.store 各节点配置信息的存放方式。有两种:'zookeeper' 或 'memory'。一般使用 zookeeper 存放 flume 节点配置信息。因为 zookeeper 是可靠的,具有容错能力并且可以通过重启修复配置信息,这样可
防止配置信息的丢失。当然,如果用户可以忍受在机器出现故障时配置信息出现丢失,可以用 memory 的方式。 flume.master.serverid 主节点的唯一辨识号。Flume 集群中可以有多个 master,每个 master 以唯一的 serverid 用来标识。取值可以为 0、1、2 …… flume.master.zk.use.external 布尔值,是否使用外部的 zookeeper 集群来管理节点配置信息。如果是,则需要部署 zookeeper 集群,并通过属性“flume.master.zk.servers”指定 zookeeper 集群。 flume.master.zk.servers Zookeeper 集群。属性值(value)使用以下格式:zookeeperHostname:zookeeperPort。当有多和 zookeeper 节点时,属性值以“,”分割。如:hostname1:2181,hostname:2181。
除此之外,存放 flume 的 log 的目录可以在 log4j.properties 文件中通过属性 flume.log.dir 指定,如:flume.log.dir=/tmp/flume/logs。Flume 有两个 log 文件:flumemaster.out 和 flumenode.out。顾名思义,flumemaster.out 存放主节点(master)的 log 信息,flumenode.out 存放日志收集节点的信息(agent 和 collector)。当 flume 节点启动后,会有相应的进程文件存放 pid,存放路径可以在 flume-env.sh 中设定,如:export FLUME_PID_DIR=“/tmp/flume/pids”。