flume的初体验

1. flume的基础介绍

(1)常用的数据收集工具

  - Chukwa(Apache)
  - Scribe(Facebook)
  - Fluentd:Fluentd 使用 C/Ruby 开发,使用 JSON 文件来统一日 志数据。
  - Logstash(著名的开源数据栈 ELK(ElasticSearch,Logstash,Kibana)中的那个 L)
  - Flume(Apache):开源,高可靠,高扩展,容易管理,支持客户扩展的数据采集系统。

(2)为什么要使用数据收集工具?

首先看一下hadoop业务的整体开发流程:

数据采集---数据清洗etl(数据抽取,转换,装载)---数据存储---数据计算分析---数据展现
其中数据采集是所有数据系统必不可少的,没有数据一切都是空谈。
那数据采集系统的特征又是什么呢?
  - 构建应用系统和分析系统的桥梁,并将他们之间进行解耦(web---hadoop) 支持实时的在线分析系统和类似于hadoop之类的离线分析系统
  - 具有高可扩展性,即:当数据增加时,可以通过增加节点进行水平扩展。

(3)为什么要使用flume?

  - Apache Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。和sqooq同属于数据采集系统组件,但是sqoop用来采集关系型数据库数据。而flume用来采集流动性数据。
  - Flume 名字来源于原始的近乎实时的日志数据采集工具,现在被广泛用于任何流事件数 据的采集,它支持从很多数据源聚合数据到 HDFS。
  - 一般的采集需求,通过对 flume 的简单配置即可实现。Flume 针对特殊场景也具备良好 的自定义扩展能力,因此,flume 可以适用于大部分的日常数据采集场景
  - Flume 的优势:可横向扩展、延展性、可靠性

(4)flume的新老架构介绍

接下来以一个很简单的场景为例,将weserver的日志收集到hdfs中。
NG架构

应用系统(web server)---flume的日志收集(source、channel、sink)----hdfs(数据存储)
其中:
source:数据源(读原始日志文件进行读取)
channel:数据通道(缓冲,缓解读写数据速度不一致问题)
sink:数据的目的地(收集到的数据写出到最终的目的地)
OG架构:(0.9以前)

代理节点(agent) ----- 收集节点(collector)-----(master)主节点
 Agent从各个数据源收集日志数据,将收集到的数据集中到collector,然后由收集节点汇总存入hdfs。Master负责管理agent和collector的活动。

2. flume体系结构和核心组件

(1)flume体系结构


 Flume的数据由事件(event)贯穿始终,事件是flume的基本数据单位,它携带日志数据(字节数组形式),并且携带有头信息,这些event由agent外部的source生成,当source捕获的事件后会进行特定的格式化,然后source会把事件推入(单个或多个)channel中。可以把 Channel 看作是一个缓冲区,它将保存事件直到 Sink 处理完该事件。Sink 负责持久化日志或 者把事件推向另一个 Source。
 Flume以agent为最小的独立运行单位,一个agent就是一个jvm,单个agent由source、sink和channel三大组件构成。

(2)flume四大核心组件

Event
 Event是flume数据传输的基本单位。Flume以事件的形式将数据从源头,传送到最终的目的地。Event由可选的header和载有数据的一个byte array构成。Header 是容纳了 key-value 字符串对的无序集合,key 在集合内是唯一的。
agent
 agent 是 flume 流的基础部分,一个 Agent 包含 source,channel,sink 和其他组件;利用这些组件将 events 从一个节点传输到另一个节点或最终目的地。
Source
 Source负责接收event或者通过特殊机制产生event,并将events批量的放到一个或者多个channel中。
channel
 Channel 位于 Source 和 Sink 之间,用于缓存进来的 event。当sink成功的将event发送到下一个的channel或者最终目的,event从channel删除。
Sink
 Sink负责将event传输到下一个或者最终目的地,成功后将event从channel移除。

3. flume的搭建

 flume的搭建极为简单,基本上就是解压即可,但是由于我们经常将flume和大数据平台联系,所以需要我们将hadoop和jdk的环境搭建成功。
安装
 - 上传安装包
 - 解压安装包
 - 配置环境变量
 - 修改配置文件:

[hadoop @hadoop01 ~]cd /application/flume/conf
[hadoop @hadoop01 ~]mv flume-env.sh.template flume-env.sh
[hadoop @hadoop01 ~]vim flume-env.sh
export JAVA_HOME=/application/jdk1.8    (修改这一个就行)

 -测试是否安装成功
[hadoop @hadoop01 ~]flume-ng version

看见以上的结果表示安装成功!!!!
注意:一般的需要在哪台机器中采集数据,就在哪台机器中安装flume

4. flume的初使用

 flume的一切操作都是基于配置文件,所以,必须写配置文件。(必须是以.conf或者.properties结尾)。
更多 Sources:http://flume.apache.org/FlumeUserGuide.html#flume-sources
更多 Channels:http://flume.apache.org/FlumeUserGuide.html#flume-channels
更多 Sinks:http://flume.apache.org/FlumeUserGuide.html#flume-sinks

这里我们以一个非常简单的案例,介绍flume如何使用:

配置文件

#example.conf
#这里的a1指的是agent的名字,可以自定义,但注意:同一个节点下的agent的名字不能相同
#定义的是sources、sinks、channels的别名
a1.sources = r1
a1.sinks = k1
a1.channels = c1

#指定source的类型和相关的参数
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /home/hadoop/flumedata  #监听一个文件夹

#设定channel
a1.channels.c1.type = memory

#设定sink
a1.sinks.k1.type = logger

#Bind the source and sink to the channel
#设置sources的通道
a1.sources.r1.channels = c1
#设置sink的通道
a1.sinks.k1.channel = c1

准备测试环境
创建一个目录:a1.sources.r1.spoolDir = /home/hadoop/flumedata
启动命令

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

然后移动一个有内容的文件到flume监听的文件夹下(/home/hadoop/flumedata):
查看 此时窗口的状态:

内容成功收集!!

原文地址:http://blog.51cto.com/14048416/2343709

时间: 2024-10-17 07:15:08

flume的初体验的相关文章

Flume 实战(1) -- 初体验

前言: Flume-ng是数据收集/聚合/传输的组件, Flume-ng抛弃了Flume OG原本繁重的zookeeper和Master, Collector, 其整体的架构更加的简洁和明了. 其基础组件就Agent进程, 内部又可以细分为Source, Channel, Sink三个组件, Source是数据的输入源, channel作为消息的管道, 而sink是作为数据流的输出, Source可以配置多个channel, sink和channel一一对应. *) 初体验Flume-ng 以C

erlang 初体验

最近测试了一下 erlang的坑... 如不出意外.... 大家第一眼看到这语法... 心里第一句一定是"我擦.这TM都是啥!!!!!" 没有变量!!! 没有结构体!!! 没有循环!!! 好吧,至少我是这样想的. 找了半天..连个if也不知道怎么写.. 这记录一些基本常识.. -module(module_name)  %%定义模块 括号内的要和文件名相同. -export([fun1/1 fun2/2]) %%这里是导出2个函数对外使用  函数名/参数名. 一个简单的函数定义如下 f

linux初体验

第一次听到linux这个'词语'是在一次偶然的朋友聊天中朋友提到的,之前压根没听到过'这个东西',所以我可以说是个linux的新新手,菜鸟都不算. 截至到目前,我已经开始linux系统运维学习有差不多10天时间了.在没接触linux之前,我对它的认识仅仅是:它是个计算机系统.决定学习linux系统运维之前,自我以为运维应该是对系统的一些日常维护之类的,不会很难的东西,我更希望运维是个不难的东西,我个人很笨,对难的东西可能接受的很慢,所以我愿意认为运维是很简单的,这样我就可以轻轻松松的掌握运维相关

【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验

----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafka初体验 2.1 环境准备 2.2 Kafka小试牛刀 2.2.1单个broker初体验 2.2.2 多个broker初体验 2.3 Kafka分布式集群构建 2.3.1 Kafka分布式集群构建 2.3.2 Kafka主题创建 2.3.3 生产者生产数据 2.3.4消费者消费数据 2.3.5消息的

Java8初体验(二)Stream语法详解

原文链接:http://ifeve.com/stream/ 1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel aggregate operations. 我们来解读一下上面的那句话: Stream是元素的集合,这点让Stream看起来用些类似Iterator: 可以支持顺序和并行的对原Stream进行汇聚的操作: 大家可以把Stream当成一个高级版本的

hibernate--CRUD初体验

hibernate的crud操作初体验. 看具体实例 package com.fuwh.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.hibernate.annotations.GenericGenerator; @Entity publ

Oracle SQL篇(一)null值之初体验

    从我第一次正式的写sql语句到现在,已经超过10年的时间了.我写报表,做统计分析和财务对账,我一点点的接触oracle数据库,并尝试深入了解.这条路,一走就是10年,从充满热情,到开始厌倦,我不知道我还能坚持多久,未来的路,谁知道呢? 也许是该抓紧时间,做一点什么了,我不知道该开始写些什么,我从来没有在网上写东西的习惯.     先从简单的开始吧,那当然就是SQL,这是我SQL系列的第一篇,希望我能够坚持. 在Oracle数据库中,如果一个表中的列没有值的话,我们可以说是空值,比如IT员

AngularJS路由系列(3)-- UI-Router初体验

本系列探寻AngularJS的路由机制,在WebStorm下开发. AngularJS路由系列包括: 1.AngularJS路由系列(1)--基本路由配置2.AngularJS路由系列(2)--刷新.查看路由,路由事件和URL格式,获取路由参数,路由的Resolve3.AngularJS路由系列(3)-- UI-Router初体验4.AngularJS路由系列(4)-- UI-Router的$state服务.路由事件.获取路由参数5.AngularJS路由系列(5)-- UI-Router的路由

Android Studio初体验之启动AVD模拟器异常:cannot set up guest memory 'pc.ram'

启动AVD模拟器异常:Cannot set up guest memory 'pc.ram' 错误信息: HAX is working and emulator runs in fast virt mode Cannot set up guest memory 'pc.ram': Invalid argument Error accepting connect 分析 各种查资料,没有发现网上有同样问题的,在一篇相关文章中找到类似的解决方法. 从语意看,应该是hax安装后没有启动.(不懂hax是什