zoukankan      html  css  js  c++  java
  • flume复习(一)

     关于flume官方文档介绍可以去:http://flume.apache.org/看看。接下来就介绍一下关于我个人对flume的理解


      一、flume介绍:

      1.flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统并且可以进行在线分析。

      2.支持在日志系统中定制各类数据发送方,用于收集数据,同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。

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

      4.flume名词解释。

      Client:Client生产数据,运行在一个独立的线程。

       Event: 一个数据单元,消息头和消息体组成。(Events可以是日志记录、 avro 对象等。)

      Flow: Event从源点到达目的点的迁移的抽象。

      Agent: 一个独立的Flume进程,包含组件Source、 Channel、 Sink。(Agent使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。)

      Source: 数据收集组件。(source从Client收集数据,传递给Channel)

      Channel: 中转Event的一个临时存储,保存由Source组件传递过来的Event。(Channel连接 sources 和 sinks ,这个有点像一个队列。)

      Sink: 从Channel中读取并移除Event, 将Event传递到FlowPipeline中的下一个Agent(如果有的话)(Sink从Channel收集数据,运行在一个独立线程。)


    二、flume核心结构

      1.Agent:flume运行的核心是agent,运行的最小单位也是agent,一个flume就是一个JVM,他是一个完整的数据收集工具,包含有3个核心组件,source,channel和sink。一个时间Event可以从一个方向流向另一个方向。如下图所示:

    2.source:数据的收集端。负责将数据捕获后进行特殊的格式化。source将数据封装到事件(Event)里,然后推入到Channel中,Flume提供了很多内置的Source, 支持 Avro, log4j, syslog 和 http post(body为json格式)。可以让应用程序同已有的Source直接打交道,如AvroSource,SyslogTcpSource。 如果内置的Source无法满足需要, Flume还支持自定义Source。

        

    3.channel:接Source和Sink的组件。数据流的临时存放地,对source中的数据进行缓冲,直到sink将其消费掉。

    4.sink:从channel提取数据存放到中央化存储(hadoop/hbase)


    三、flume命令和配置

    1.flume安装

      1.下载
      2.tar
      3.环境变量
      4.验证flume是否成功
        $>flume-ng version //next generation.下一代.

    2.配置flume   []

      命名agent上的组件

      a1.sources=r1;  //所有的源

      a1.sinks=k1;   //所有的sink

      a1.channels=c1; //所有的channel

      描述源的配置

      a1.sources.r1.type=netcat;  //源的类型是瑞士军刀

      a1.sources.r1.bind=localhost;  //绑定本机

      a1.sources.r1.port=44444;  //绑定44444端口

      描述sink

      a1.sinks.k1.type=loggger;  //将通道中提取的数据存储到日志中去

      使用在内存中进行缓冲的通道

       a1.channels.c1.type=memory;  //

      a1.channels.c1.capacity=1000;  //内存中可以存储1000个事件  

      a1.channels.c1.transactionCapacity = 100;  //

       把源和通道以及sink和通道进行绑定

      a1.sources.r1.channels=c1;  //一个源可以有多个通道

      a1.sinks.k1.channel=c1;    //一个sink只能有一个通道

    3.运行flume

      1)启动flume agent

        $> bin/flume-ng agent -f /soft/flume/conf/hello.conf  -n a1 -Dflume.root.logger=INFO,console

        开启这个端口来接收来自8888端口的数据

      2)打开netcat,nc localhost 8888


    四、测试source

     1.配置seq压力源(源测试)

      a1.sources = r1
      a1.channels = c1
      a1.sinks = k1

      a1.sources.r1.type=seq
      a1.sources.r1.totalEvents=1000

      a1.sinks.k1.type=logger

      a1.channels.c1.type=memory

      a1.sources.r1.channels=c1

    2.批量收集文件

      监控一个文件夹,静态文件。在收集完成之后会重命名为一个新的文件.compeleted

      1.配置文件[spool-r.conf] 

      a1.sources=r1
      a1.channels=c1;
      a1.sinks=k1

      a1.sources.r1.type=spooldir
      a1.sources.r1.spoolDir=/home/centos/spool
      a1.sources.r1.fileHeader=true

      a1.sinks.k1.type=loger
      a1.channels.c1.type=memory

      a1.sources.c1.channels=c1;
      a1.sinks.c1.channel=c1;

      2.创建目录

      $>mkdir ~/spool

      3.启动flume

      $>bin/flume-ng agent -f /soft/flume/conf/spooldir-r.conf  -n a1 -Dflume.root.logger=INFO,console

    3.实时日志收集exec(对文件进行实时监控)  

      1.配置文件[exec-r.conf] 

      a1.sources=r1
      a1.sinks=k1
      a1.channels=c1

      a1.sources.r1.type=exec
      a1.sources.r1.command=tail -F /home/centos/test.txt

      a1.sinks.k1.type=logger
      a1.channels.c1.type=memory

      a1.sources.r1.channels=c1
      a1.sinks.k1.channel=c1

      2.启动flume

      $>flume-ng agent -f /soft/flume/conf/exec-r.conf -n a1 -Dflume.root.logger=INFO,console

      3.在/home/centos下写文件

        $>touch test.txt 

        $>echo hello world >> test.txt


     五、.测试sink

       1.hdfs

    a1.sources = r1
    a1.channels = c1
    a1.sinks = k1

    a1.sources.r1.type = netcat
    a1.sources.r1.bind = localhost
    a1.sources.r1.port = 8888

    a1.sinks.k1.type = hdfs
    a1.sinks.k1.hdfs.path = /user/centos/flume/%y-%m-%d/%H/%M/%S
    a1.sinks.k1.hdfs.filePrefix = events-

    #是否舍弃,每十分钟会产生一个新的目录
    a1.sinks.k1.hdfs.round = true
    a1.sinks.k1.hdfs.roundValue = 1
    a1.sinks.k1.hdfs.roundUnit = day
    a1.sinks.k1.hdfs.useLocalTimeStamp = true
    a1.sinks.k1.hdfs.rollInterval=10
    a1.sinks.k1.hdfs.rollSize=30
    a1.sinks.k1.hdfs.rollCount=3

    a1.channels.c1.type = memory

    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1 

      2.hbase

    a1.sources=r1

    a1.channels=c1

    a1.sinks=k1

    a1.sources.r1.type=netcat

    a1.sources.r1.bind=localhost

    a1.sources.r1.port=8888

    a1.sinks.k1.type=hbase

    a1.sinks.k1.table=ns1:t2

    a1.sinks.k1.columnFamily=f1

    a1.sinks.k1.serializer = org.apache.flume.sink.hbase.RegexHbaseEventSerializer

    a1.channels.c1.types=memory

    a1.sources.r1.channels=c1

    a1.sinks.k1.channel=c1

      3.从source到channels的过程

      

     数据从外部进入到源source中来,

      4.使用avroSource和avroSink实现越点(agent)代理

    --------------------------------------------

      1.创建配置文件   

    #a1
    a1.sources=r1
    a1.sinks=k1
    a1.channels=c1

    a1.sources.r1.type=netcat
    a1.sources.r1.bind=localhost
    a1.sources.r1.port=8888

    a1.sinks.k1.type=avro
    a1.sinks.k1.hostname=localhost
    a1.sinks.k1.port=9999

    a1.channels.c1.type=memory

    a1.sources.r1.channels=c1
    a1.sinks.k1.channel=c1

    #a2
    a1.sources=r2
    a1.sinks=k2
    a1.channels=c2

    a1.sources.r2.type=avro
    a1.sources.r2.bind=localhost
    a1.sources.r2.port=9999

    a2.sinks.k2.type=logger

    a2.channels.c2.type=memory

    a2.sources.r2.channels=c2
    a2.sinks.k2.channel=c2

      2.启动a2:flume-ng agent -f /soft/flume/conf/avro_hop.conf -n a2 -Dflume.root.logger=INFO,console

      3.验证a2是否开启

        $>netstat -anop | grep 9999

      4.开启a1.flume-ng agent -f /soft/flume/conf/avro_hop.conf -n a1

        验证是否开启:$>netstat -anop | grep 8888

     5.channels

    --------------------------------------------------------

      1.memory

        

      2.FileChannel

        a1.sources=r1
        a1.sinks=k1
        a1.channels=c1

        a1.channels=c1

        a1.channels.c1.type=file

        a1.channels.c1.checkpointDir=/home/centos/flume/fc_check

        a1.channels.c1.dataDirs=/home/centos/flume/fc_data

     

  • 相关阅读:
    vue-cli3配置开发环境和生产环境
    vue配置开发环境和生产环境
    js实现div拖拽互换位置效果
    axios用post提交的数据格式
    面试题会被问及哪些?(总结)
    深入理解vue
    nodejs 前端项目编译时内存溢出问题的原因及解决方案
    MUI框架开发HTML5手机APP(一)--搭建第一个手机APP
    关于if省略{}时的一些问题
    函数声明的两种形式的区别
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/9431967.html
Copyright © 2011-2022 走看看