Flume 入门

1)Flume产生背景

    如果数据在关系型数据库(RDBMS)里面,可通过Sqoop进行抽取。(Spark SQL可代替)

    如果日志在其他机器上,就有了Flume的产生;Flume就是干日志采集的事情。


2)From  outside To  inside:如何使用集群外的数据,得先抽取到Hadoop集群中。

        Flume 入门_第1张图片


3)定时收集ng产生的日志到HDFS

    传统shell方式 {

        1. ng默认会把日志信息写到 access.log 里面  -- 产生日志

        2. crontab(定时) cp access.log target-timestamp.log  -- 定时复制信息

        3. hadoop fs -put target-timestamp.log /hdfspath --上传到HDFS

            Q:集群之外的机器是不能访问HDFS的,怎么处理?

            A:gateway客户端(就是客户机)

        4. shell方式的弊端

            -- 时效性问题,肯定有延迟

            -- 文件过大,没有压缩

            -- 文件格式,不能转到orz,parquet等格式文件

            -- shell挂了后的监控

            -- 吞吐量不能保障

    }


4pv uv    1000个 webserver

        webserver日志类型

            -- nginx    与业务无关的,如 access.log 访问日志

            -- ugc       与业务相关的

        pv uv是通过nginx日志进行计算的,如何计算?

            a)将nginx日志写到数据库,再进行查询   -- 缺点:日志量大,server可能扛不住,这种方式不现实

            b)写MapReduce/Spark代码发布到所有机器执行,假如没有HDFS?代码写错要全部重新部署?不现实

            c)把1000台机器的日志收集到HDFS,再用MapReduce/Spark处理HDFS的文件(*****)

                实现方式: 1000 webserver ==> Flume ==> HDFS ==> MapReduce/Spark

        拓展:dependency job

            Q:a ==> b ==> c    中间的依赖关系,如何进行合适的调度?

            A:流行的调度框架:quartz(作业调度框架) Azkaban(Hadoop批处理调度器)但生产还是得自己开发


5Flume 官方描述

-- distributed,reliable,and available service

           collecting,aggregating(聚合), and moving large amounts of log data(移动大规模的数据日志)

   分布式的海量日志的高效收集、聚合、移动/传输的框架

        -- Agent <== 一个Flume的三大核心组件 {

Source: exec(文件)/Spooling Directory(文件夹)/Taildir Source/NetCat*****

                采集数据,负责数据的流入,将数据从产生的源头采集过来,输出到channel中

        Channel:  Memory*****/File 

数据存储池,连接source和sink,类似于一个队列或者缓冲区

        Sink: HDFS/Logger/Avro/Kafka

                从Channel中获取数据,将数据写到目标目的地

把数据写入到下一个Agent的Source中去

        总结:Source:源头,数据源  Channel:中间管道,把源头的数据放在这里  Sink:在Channel取数据,输出到某个地方

Flume 入门_第2张图片

            Agent : Source + Channel + Sink

        }


6)扇入:减轻HDFS负担

Flume 入门_第3张图片


7)扇出    场景:数据分流、实时离线

Flume 入门_第4张图片


8Flume 常用场景

    Flume ==> HDFS ==> BATCH   ......(离线处理)

    Flume ==> Kafka  ==> Streaming/Storm/Flink  ..... (实时处理)

    都是做同一件事情:源源不断地收集日志


9)Flume 使用

    Flume的使用,就是写配置文件,把三大核心组件拼接起来    bind = source + channel + sink

    --可配置的、可插拔的、可组装的    一个Agent就是一个配置文件


10)Flume 环境搭建

    -- 下载jar包:wget http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.7.0/

    -- 解压,配置环境变量

    -- flume-env.sh    只需要配置JAVA_HOME,内存不够可配置JAVA_OPTS

    -- 配置Agent

        Flume 入门_第5张图片


11)Flume 启动 

    ./flume-ng agent --name a1 --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/hello.conf -Dflume.root.logger=INFO,console

    -- -Dflume.root.logger=INFO,console 日志级别为INFO

        Q:为什么有些数据会显示不完全?

        A:


12)什么是Event 

    Event是Flume传输的一个基本单元,Event包括可选的header + body一个 byte array

    过程:将数据以Event的形式从source传送到sink所在的目的地

    遵循规则:先进先出


13)需求:实时监控一个文件中新增的内容输出到HDFS

    Agent: Source=exec  Channel=memory  Sink=hdfs

    Flume 入门_第6张图片


疑问:

    Cloudera  0.9.2   Flume-OG(老一代)   NG(新一代)    JIRA:Flume-728

    Kafka:消息队列/Stream Platform

    同类产品:file beat http://www.elastic.co

    tail -F vs -f    区别??

 

你可能感兴趣的:(Flume 入门)