• 大数据技术之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……


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


  • 相关阅读:
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    centos 编码问题 编码转换 cd到对应目录 执行 中文解压
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    Android MVP 十分钟入门!
    mysql备份及恢复
    mysql备份及恢复
    mysql备份及恢复
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5229923.html
Copyright © 2020-2023  润新知