Hadoop-Flume基础理论入门(1)

log

一.基本概念

flume是一个分布式日志采集系统,可对接各种数据输入源,具有高可用,可平滑扩展的特点;

flume用于简单示意图

flume像是一个管道,可以接入多种数据源,比如系统日志,文件系统及http请求等,并将收集到的信息存入Hdfs/Hbase中.

flume支持多路径流量,多管道接入流量(就是允许同时接入多种数据源),多管道接出流量(允许向多种数据源输出),上下文路由(也就是路由选择,可以使用多种策略,比如复制策略和复用策略)等。

二.flume组件介绍

flume外部架构

数据发生器(如:facebook,twitter)产生的数据被单个的运行在数据发生器所在服务器上的agent所收集,之后数据收容器从各个agent上汇集数据并将采集到的数据存入到HDFS或者HBase中。

注意:

1. agent和collector一般部署在不同的机器上,用于解耦合;
2. agent的数量一般要比collector多,n:1;
3. 其实从配置上agent和collector一样,只是职能分工不一样而已。 

2.1 传输数据格式

storm  -- > Tuple
Hdfs    --> block
Flume  --> Event事件
Flume使用Event对象来作为传递数据的格式,是内部数据传输的最基本单元.

Event由两部分组成: header(可有可无)和body(数据)


Event的结构组成
(1) Header头部(可选)

Header 是 key/value 形式的,可以用来制造路由决策或携带其他结构化信息(如事件的时间戳或事件来源的服务器主机名)。

你可以把它想象成和 HTTP 头一样提供相同的功能——通过该方法来传输正文之外的额外信息。

Flume提供的不同source会给其生成的event添加不同的header.(偷偷的告诉你,这就是可配置的拦截器的包装功能).

header存在时,也可以用于消息的分发.

(2) Body(存储实际的数据)

Body是一个字节数组,包含了实际的内容,

2.2 重要组件-agent

agent,又叫代理,它是一个守护进程(JVM),可以用来监控系统.一旦系统产生日志,便开始进行采集.主要就是用来接收和汇集消息.

Flume内部可以有一个或者多个agent.多个agent之间的通信是通过Avro进行的.

深入到agent内部,agent包括三个必不可少的模块:source,channel和sink.

Agent三大组件

(1) source:用于对接各种输入源(数据源)

它是flume源;flume之间交互是以Event的格式,当一个Flume源接收到一个事件时,source将通过一个或者多个channel存储该事件.

(2) channel:可以理解为一个通道,进行被动的存储.

所以也可以看成是一个短暂的存储容器(容器),channel同时对接多个source与sink.

之所以做短暂的存储而不是立即转移走,是为了积累到一定的量再进行批量的处理,这样可以提高效率,更利于提升性能.

channel具有完整的事务管理,可以保证数据在收发时候的一致性.

通过配置,channel中的数据可以存储到缓存memory中,也可以存储到文件中.存储到memery中,效率更快,吞吐率更高,但由于进行的是内存事务管理,所以当channel故障时,数据存在丢失的风险;为了保证数据的可靠性,一般选落地file文件的方式进行存储.

- channel存储空间有限,为了防止接收Event过量超出容量,可以通过参数设置event的最大个数.
 
-Flume通常选择FileChannel,而不是用Memory Channel.
(3) sink: 用于对接各种输出源(存储)

sink成功取出event之后,会将事件event从channel中移除,并将事件存放到外部数据介质上.

所谓的外部数据介质,可以是Hdfs中,也可以是下一个Flume的source中.

另外,对于缓存在通道中的事件,source和sink是采用异步处理的方式.并不是channel收一个事件event之后,sink立马就过来取数据.

另外,在agent中还有两个可选的配置组件interceptor拦截器和selector选择器.

(1) interceptor拦截器: 可配置到source之前,对接入source的数据起到一个拦截,过滤与包装的功能,另外,多个拦截器可链式拼装,进行组合使用;

官方提供的已有拦截器:
– Timestamp Interceptor:
  在event的header中添加一个key叫:timestamp,value为当前的时间戳

– Host Interceptor:
  在event的header中添加一个key叫:host,value为当前机器的hostname或者ip

– Static Interceptor:
  可以在event的header中添加自定义的key和value

– Regex Filtering Interceptor:
  通过正则来清洗或包含匹配的events

– Regex Extractor Interceptor:
  通过正则表达式来在header中添加指定的key,value则为正则匹配的部分

(2) selector选择器: 可配置到channel之前,进行路由选择,选择将数据传输到哪个channel中.

channel selector有两种类型:

– Replicating Channel Selector (default):将source过来的events发往所有channel
– Multiplexing Channel Selector:而Multiplexing 可以选择该发往哪些channel
channel

复制机制(默认机制)可以让各个存储节点均收到消息.
复用机制指可以指定消息具体流向哪里.

Multiplexing Channel Selector具体是如何做到有针对方向的进行消息分发的呢?这个就要又提到可配置到source之前的interceptor拦截器了.

比如,通过Host Interceptor可以在event的header中添加机器的ip,通过识别ip进行不同的分发;

2.3 flume可靠性说明

(1) flume的channel是一个完整的事务,数据在传送完成后,事件才从通道中移除.
(2)flume的channel可以暂存数据,当目标可以访问时,数据可以进行暂存到channel中,等目标可访问之后,再进行传输.
(3) 当Source对接的是上一个Agent的Sink时,Source和Sink封装在一个事务的存储和检索中,即事件的放置或者提供由一个事务通过通道来分别提供。这保证了事件集在流中可靠地进行端到端的传递。

– Sink开启事务
– Sink从Channel中获取数据
– Sink把数据传给另一个Flume Agent的Source中
– Source开启事务
– Source把数据传给Channel
– Source关闭事务
– Sink关闭事务

疑问点:这种source上游对接sink的情况,通过实现事务控制的方式,可以实现当source传event到channel过程中失败,sink实现event重传.但当source直接对接数据接入源时,又该如何实现呢?

2.4 复杂的流动

为了应对各种复杂多变的业务场景,flume的agent可以多个组合进行使用,agent的组件source,channel和link也可以像搭积木一样,组合使用.如图所示:

基本流动
复杂流动1
复杂流动2
复杂流动3

至于如何配置flume?使用flume且等下文.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351

推荐阅读更多精彩内容

  • 博客原文 翻译作品,水平有限,如有错误,烦请留言指正。原文请见 官网英文文档 引言 概述 Apache Flume...
    rabbitGYK阅读 11,458评论 13 34
  • title: Flume构建日志采集系统date: 2018-02-03 19:45tags: [flume,k...
    溯水心生阅读 16,129评论 3 25
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • 介绍 概述 Apache Flume是为有效收集聚合和移动大量来自不同源到中心数据存储而设计的可分布,可靠的,可用...
    ximengchj阅读 3,518评论 0 13
  • 1.我是一名消防员,今天结束72小时值勤工作后,我顺便去食品店买东西,有位女士向朝跑过来,突然抱住了我。我惊讶极了...
    茸小呆阅读 780评论 0 1