美文网首页
Flume基础

Flume基础

作者: 糊涂蟲 | 来源:发表于2018-08-10 22:39 被阅读0次

    1、产生背景

    RDBMS==>Sqoop==>Hadoop

    日志:分数在各个服务器上  如何抽到HDFS上

    1、定时任务将文件写到HDFS    crontab

    2、flume

    2、官网

    flume.apache.org

    Flume是一种分布式、可靠和可用的服务,可以高效地收集、聚合和移动大量的日志数据。它具有基于流数据流的简单灵活的体系结构。它具有稳定性和容错性,具有可调的可靠性机制和多种故障转移和恢复机制。它使用了一个简单的、可扩展的数据模型,允许在线分析应用程序。

    3、关键字

    collecting            采集       source

    aggregating        聚合       channel (找个地方把采集过来的数据暂存下)

    moving               移动       sink

    4、功能

    Flume:编写配置文件,组合source、channel、sink三者之间的关系

    Agent:就是由source、channel、sink组成

    编写flume的配置文件其实就是配置agent的构成

    Flume就是一个框架:针对日志数据进行采集汇总,把日志从A地方搬运到B地方去

    5、系统要求

    1、java1.6以上

    2、足够内存(source,sink,channel都可能用)

    3、足够的磁盘空间

    4、对文件要有读写权限

    6、环境搭建

    文档:官网-->documentation-->Flume User Guide

    版本:cdh5.7.0(与Hadoop统一)

    wget http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.7.0.tar.gz

    解压

    tar -xzvf flume-ng-1.6.0-cdh5.7.0.tar.gz -C ~/app

    配置环境变量并生效   

    vi ~/.bash_profile

    export FLUME_HOME=/home/hadoop/app/apache-flume-1.6.0-cdh5.7.0-bin

    export PATH=$FLUME_HOME/bin:$PATH

    source ~/.bash_profile

    修改配置文件

    cp flume-env.sh.template flume-env.sh

    vi flume-env.sh

    export JAVA_HOME=/usr/java/jdk1.8.0_45

    7、版本

    flume -og        老版本,已经不用

    flume -ng        新版本

    8、运行

    flume-ng  <commad> [options]...

    常用的commads:help / agent / avro-client / version

    举例:[hadoop@hadoop000 bin]$ flume-ng version

                Flume 1.6.0-cdh5.7.0

                Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git

                Revision: 8f5f5143ae30802fe79f9ab96f893e6c54a105d1

                Compiled by jenkins on Wed Mar 23 11:38:48 PDT 2016

                From source with checksum 50b533f0ffc32db9246405ac4431872e

    9、启动命令标准的写法

            ./flume-ng agent \                    ===>启动命令

            --name $agent_name \            ===>自定义的agent_name

            --conf $FLUME_HOME/conf \        ===>使用conf目录下一个配置文件:全局

            --conf-file /home/hadoop/script/flume/xxxx.conf \        ==>指定一个配置文件(自己编写的agent的配置文件:自定义)

            -Dflume.root.logger=INFO,console \

            -Dflume.monitoring.type=http \    

            -Dflume.monitoring.port=34343

    9、agent_xxx.conf 的写法

    agent_name:a1

    r1、k1、c1分别为source、sink和channel的名称

    # Name the components on this agent

    复数表示每一个可以配多个

    <agent_name>.sources=<source_name>        

    <agent_name>.sinks=<sink_name>

    <agent_name>.channels=<channel_name>

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

    <agent_name>.sources.<source_name>.type =xx

    <agent_name>.sinks.<sink_name>.type =yyy

    <agent_name>.channels.<channel_name>.type =zzz

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

    <agent_name>.sources.<source_name>.channels=<channel_name>

    <agent_name>.sinks.<sink_name>.channel=<channel_name>

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

    举例:从指定的网络端口上采集日志到控制台输出(netcat source、memory channel 和logger  sink),需要telnet输入日志

            a1.sources = r1

            a1.sinks = k1

            a1.channels = c1

    # Describe/configure the source   配置source信息

            a1.sources.r1.type = netcat     ==>必须netcat

            a1.sources.r1.bind = 0.0.0.0    ==>绑定本地ip

            a1.sources.r1.port = 44444    ==>绑定端口号(随便一个未被占用的)

    # Describe the sink

            a1.sinks.k1.type = logger        ==>打印在控制台

    # Use a channel which buffers events in memory

            a1.channels.c1.type = memory

    # Bind the source and sink to the channel  将source和sink绑定到channel

            a1.sources.r1.channels = c1        ==>source 去哪个channel

            a1.sinks.k1.channel = c1            ==>sink去channel拿数据

    10、常用的source

    avro (重点):监听Avro端口和从外部Avro端接收事件流,当在另一个(上一个)Flume agent搭配内置Avro sink,它可以创建分层集合拓扑

    exec  :启动的时候运行给定一个linux命令 tail -F  xx.log            ===>监控文件

    Spooling Directory:允许通过将文件放入磁盘上的“spooling”目录中来读取数据               ===>监控文件夹(不能有子文件)

    Taildir:exec 和spooling的整合  (生成90%以上)           1.6版本不能工作在windows

    netcat: 可以监听给定的端口,并将每一行文本转换为一个事件   需要telnet

    具体写法参考官网

    11、常用的sink

    HDFS:数据写到HDFS

    logger:打印在控制台

    avro : 配合avro source使用

    kafka:(sparkstreaming或者 storm、 flink的流式处理当中)使用flume搜集数据推送到kafka,然后流式处理的数据到kafka中去取

    12、常用的channel

    memory:event将会被暂存在内存了

    file:数据存到本地

    13、agentxxx.conf作用

    各种组合source、channel、sink之间的关系,需要什么去官网找什么

    例如:把一个文件中新增的内容收集到HDFS

            exec ---memory ---HDFS    模式

    如果是一个文件夹

            spooling---memory---HDFS    

    文件数据写入kafka    

            exec---memory---kafka

    以此类推。。。

    14、Event

    传输的最小单元

    Event是有headers  +  body(字节数组  +  内容)组成

    相关文章

      网友评论

          本文标题:Flume基础

          本文链接:https://www.haomeiwen.com/subject/hsjfvftx.html