• 大数据技术之Flume研究摘要(一)


    FlumeCloudera提供的一个高可用的,高可靠的。分布式的海量日志採集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同一时候,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

    Flume有两个版本号,Flume 0.9XCDH3及更早版本号的统称Flume-ogFlume-ogagentcollectionmaster等组件组成。Flume1.XCDH4及以后的版本号统称Flume-ngFlume-ngagentclient等组件组成。截止到眼下为止,Flume最新版本号为1.6.0版本号。Flume1.6.0有几个新特性:

    • Flume Sink and Source for Apache Kafkasourcesink新增对Kafka的支持)
    • A new channel that uses Kafkachannel使用Kafka的消息通道)
    • Hive Sink based on the new Hive Streamingsupport
    • End to End authentication in Flume
    • Simple regex search-and-replace interceptor(拦截器支持简单的正則表達式)

    Agent

    Flume执行的核心是agentagent用于採集数据。将数据源的数据发送给collector。它是一个完整的数据收集工具,含有三个核心组件,各自是sourcechannelsinkEventSource,流向Channel,再到SinkEvent代表着一个数据流的最小完整单元,从外部数据源来。向外部的目的地去。Source:完毕对日志数据的收集,分成transtion event 打入到channel之中。Channel:主要提供一个队列的功能,对source提供中的数据进行简单的缓存。Sink:取出Channel中的数据,进行对应的存储文件系统。数据库。或者提交到远程server。

    通过这些组件,event能够从一个地方流向还有一个地方,例如以下图所看到的。


    Source消费从外部流进的Events,如AvroSource接收外部client传来的或是从别的agent流出来的Avro EventSource能够把event送往一个或多个channel

    channel是一个队列。持有event等待sink来消费。一种Channel的实现:FileChannel使用本地文件系统来作为它的存储。Sink的作用是把Eventchannel里移除,送往外部数据仓库或给下一站agentSource。如HDFSEventSink送往HDFS。同个agent下的sourcesink是异步的。

    flume-ng是由一个个agent组成的。一个agent就像一个细胞一样。当然能够自由组合,例如以下图:



    下图为多对一Collection场景:

    Source

    完毕对日志数据的收集。分成transtion event打入到channel之中

    • Source用于获取数据,可从文本文件,syslogHTTP等获取数据
    • SinkSource获得的数据进一步传输给后面的Collector
    • syslogTcp(5140) |agentSink("localhost",12345)
    • tail("/etc/services") |agentSink("localhost",12345)

    能够让应用程序同已有的Source直接打交道,如AvroSourceSyslogTcpSource

    也能够写一个Source。以IPCRPC的方式接入自己的应用。

    Flume自带了直接可用的数据源(source),如:

    ltext("filename")

    ltail("filename")

    lfsyslogTcp(5140)

    lconsole("format")

    lexec

    lexecPeriodic

    lexecStream

    lirc

    llog4jfile

    lmultitail

    lnonlsynth

    lnull

    lreport

    lrpcSource

    lscribe

    lseqfile

    lsyslogTcp

    lsyslogTcp1

    lsyslogUdp

    l……

    对于直接读取文件Source,有两种方式:

    lExecSource:以执行Linux命令的方式。持续的输出最新的数据,如tail -F 文件名称指令,在这样的方式下。取的文件名称必须是指定的。 ExecSource能够实现对日志的实时收集,可是存在Flume不执行或者指令执行出错时,将无法收集到日志数据,无法保证日志数据的完整性。

    lSpoolSource:监測配置的文件夹下新增的文件,并将文件里的数据读取出来。

    须要注意:复制到spool文件夹下的文件不能够再打开编辑;spool文件夹下不可包括对应的子文件夹。SpoolSource尽管无法实现实时的收集数据,可是能够使用以分钟的方式切割文件。趋近于实时。假设应用无法实现以分钟切割日志文件的话,能够两种收集方式结合使用。

    在实际使用的过程中,能够结合log4j使用,使用log4j的时候,将log4j的文件切割机制设为1分钟一次。将文件复制到spool的监控文件夹。

    log4j有一个TimeRolling的插件,能够把log4j切割的文件到spool文件夹。

    基本实现了实时的监控。

    Flume在传完文件之后,将会改动文件的后缀,变为.COMPLETED(后缀也能够在配置文件里灵活指定)

    Channel
    Channel有多种方式:

    MemoryChannel,JDBCChannel,MemoryRecoverChannel,FileChannel

    MemoryChannel能够实现快速的吞吐,可是无法保证数据的完整性。

    MemoryRecoverChannel在官方文档的建议上已经建义使用FileChannel来替换。

    FileChannel保证数据的完整性与一致性。在详细配置不限的FileChannel时,建议FileChannel设置的文件夹和程序日志文件保存的文件夹设成不同的磁盘,以便提高效率。

    Sink

    Sink在设置存储数据时,能够向文件系统、数据库、hadoop存数据。在日志数据较少时。能够将数据存储在文件系中。而且设定一定的时间间隔保存数据。在日志数据较多时,能够将对应的日志数据存储到Hadoop中。便于日后进行对应的数据分析。

    Flume提供了非常多Sink,如:

    lconsole[("format")]

    ltext(txtfile)

    ldfs(dfsfile)

    lsyslogTcp(host,port)

    lagentSink[("machine"[,port])]

    lagentDFOSink[("machine"[,port])]

    lagentBESink[("machine"[,port])]

    lattr2hbase

    lavroSink

    lcollectorSink

    lcounter

    lformatDfs

    lhbase

    lirc

    llogicalSink

    lmultigrep

    lregexhisto

    lregexhistospec

    lrpcSink

    lseqfile

    lthriftSink

    l……


    扫描以下的二维码能够关注作者的微信公众号。


  • 相关阅读:
    C++ P1890 gcd区间
    C++ P1372 又是毕业季I
    C++ CF822A I'm bored with life
    C++ P4057 [Code+#1]晨跑
    C++ CF119A Epic Game
    关于树状数组的几点总结
    markdown语法
    portal开发"下拉框"“日期框”查询要怎么配置
    泛型总结--待续
    Actioncontext跟ServletActionContext的区别---未完待续
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5229923.html
Copyright © 2020-2023  润新知