Hadoop flume简介

(一)Flume简介

1.什么是Flume?
  Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。其设计原理也是基于将数据流,如日志数据从各种网站服务器上汇集起来存储到HDFS,HBase等集中存储器中。其结构如下图所示:

图1 Flume数据采集工作流程

  Flume 使用Java 编写,其需要运行在 Java1.6 或更高版本之上。

2.应用场景
  比如我们在做一个电子商务网站,然后我们想从消费用户中访问点特定的节点区域来分析消费者的行为或者购买意图。这样我们就可以更加快速地将他想要的推送到界面上。要实现这一点,我们需要将获取到的他访问的页面以及点击的产品数据等日志数据信息收集并移交给Hadoop平台上去分析。而Flume正是帮我们做到这一点。现在流行的内容推送,比如广告定点投放以及新闻私人定制也是基于此,不过不一定是使用Flume,毕竟优秀的产品很多,比如facebook的Scribe,还有Apache新出的另一个明星项目chukwa,还有淘宝Time Tunnel

(二)Flume工作原理

1.Flume的工作原理
  Flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。
  (1)Flume的外部结构

图2 Flume的外部结构



  如上图所示,数据发生器(如:facebook,twitter)产生的数据被单个的运行在数据发生器所在服务器上的agent所收集,之后数据收容器从各个agent上汇集数据并将采集到的数据存入到HDFS或者HBase中。
  (2)Flume事件
  事件作为Flume内部数据传输的最基本单元。它是由一个转载数据的字节数组(该数据组是从数据源接入点传入,并传输给传输器,也就是HDFS/HBase)和一个可选头部构成。
典型的Flume 事件如下面结构所示:
 

图3 Flume event的数据结构

  (3)Flume Agent
  我们在了解了Flume的外部结构之后,知道了Flume内部有一个或者多个Agent,然而对于每一个Agent来说,它就是一个独立的守护进程(JVM),它从客户端那里接收收集数据,或者从其他的 Agent那里接收数据,然后迅速的将获取的数据传给下一个目的节点sink,或者agent,如下图所示Flume的基本模型。

图4 Flume Agent的结构

  Agent主要由source、channel、sink三个组件组成。
    1)Source
  从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channel,Flume提供多种格式的日志数据接收方式,比如Avro、Thrift、twitter、http、exec等。
    2)Channel
  channel是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着一个桥梁的作用,channel是一个完整的事务,这一点保证了数据在收发时候的一致性,并且它可以和任意数量的source和sink链接,支持的类型有: JDBC channel 、File System channel、Memort channel等。
    3)sink
  sink将数据存储到集中存储器比如Hbase和HDFS,它从channals接收数据(events)并将其传递给目标地。目标地可能是另一个sink,也可能是HDFS,HBase。
    4)Source、Channel、sink的组合形式举例

图5 Source、Channel、Sink的组合形式1

图6 Source、Channel、Sink的组合形式2






 

 ♥ 知识链接

JMS


  JMS即Java消息服务(Java Message Service)应用程序接口。是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,类似于JDBC(Java Database Connectivity)。这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。JMS 使用户能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个 JMS客户机发送消息。

2.Flume的可靠性
  当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:
  (1)end-to-end(收到数据后,agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送);
  (2)Store on failure(当数据接收方crash时,将数据写到本地,待恢复后,继续发送);
  (3)Best effort(数据发送到接收方后,不会进行确认)。

3.Flume插件
  (1)Interceptors拦截器
  用于source和channel之间,用来更改或者检查Flume的events数据。
  (2)管道选择器 channels Selectors
  用来选择使用那一条管道来传递数据(events)。管道选择器又分为如下两种:
    1)默认管道选择器:每一个管道传递的都是相同的events;
    2)多路复用通道选择器:依据每一个event的头部header的地址选择管道。
  (3)sink线程
  用于激活被选择的sinks群中特定的sink,实现负载均衡控制。

(三)Kettle简介

  1.Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows、Linux、Unix上运行,数据抽取高效稳定。
  2.Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。
  3.Kettle工程存储方式有两种:一种是以XML形式存储,一种是以资源库方式存储。
  4.Kettle中有两类设计分别是:Transformation(转换)与Job(作业),Transformation完成针对数据的基础转换,Job则完成整个工作流的控制。

  5.Kettle常用三大家族:Spoon、Pan、Kitchen。
  Spoon:通过图形界面方式设计、运行、调试Job与Transformation。
  Pan: 通过脚本命令方式来运行Transformation。
  Kitchen: 通过脚本命令方式来运行Job,一般就是通过调用Kitchen脚本来完成定时任务。

猜你喜欢

转载自blog.csdn.net/weixin_42191996/article/details/88594234