zoukankan      html  css  js  c++  java
  • Flume的简单介绍-copy

    Flume概述:

    Apache Flume是一个分布式的、可靠的、可用的系统,用于有效地收集、

    聚合和将大量日志数据从许多不同的源移动到一个集中的数据存储。

    Apache Flume的使用不仅仅局限于日志数据聚合。由于数据源是可定制的,

    Flume可以用于传输大量事件数据,包括但不限于网络流量数据、

    社交媒体生成的数据、电子邮件消息和几乎所有可能的数据源。

    =================================================================

    flume的优点:

    1.可以和任意集中式存储进行集成(HDFS,HBASE)

    2.输入的数据速率大于写入存储目的地速率,flume会进行缓冲

    3.flume提供上下文路由(数据流路线)

    4.flume中的事物基于channel,使用了两个事物模型(sender+receiver)

    确保消息被可靠发送

    5.flume是 可靠的,容错的,可扩展的,。

    flume特点

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

    1.flume高效收集web server的log到HDFS HBASE)

    2.高校获取数据到hadoop

    3.导入大量数据

    4.flume支持大量的source和destination类型

    5.flume支持多级跳跃,source和destination的扇入和扇出

    6.flume可以水平伸缩

    为什么用flume而不用hdfs的put

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

    1.同一时刻只能传输一个文件

    2.put处理的是静态文件

    架构-组件-配置说明

    Flume架构:

    1. 描述

    在数据生成器运行的节点上启动单独的flume agent。来收集数据

    数据收集器收集数据,推送到HDFS,HBASE

    2. Flume Event

    事件是flume的传输单元,主要是byte[],可以含有一些header信息

    在source和destination之间

    3. Flume agent

    每个agent是一个独立的Java进程,从客户端(其他agent)接收数据

    然后转发到下一个destination(sink(沉槽) | agent)

    Agent包含三个组件:

    A. Source(源)->生成数据的地方

    从事件生成器接收数据,以event事件的形式传给一个或多个channel

    B. Channel(通道)

    从source中接受flume event,作为临时存放地,缓存到buffer中,直到sink

    将其消费掉,是source和sink之间的桥梁

    Channel是事务的,可以和多个source或sink协同

    C.sink(沉槽)

    存放数据到HDFS,从channel中消费event,并分发给destination,sink的

    Destination 也可以是另一个agent或者HDFS,HBASE

    注意:一个flume的agent,可以有多个source,channel,sink

                               

    Flume的附加组件

    1. 拦截器

    2. 通道选择器

    3. Sink处理器

    安装flumn-1.6.0

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

    1.下载flume-

    2.tar ln -s apahe-flume-1.6.-bin flume

    3.配置环境变量

    export FLUMN_HOME=/usr/local/soft/flume-1.6.0

    export PATH=$PATH:$FLUMN_HOME/bin

    4.验证安装

    [hadoop@master conf]$ flume-ng version

    5.配置flume

    flume-env.sh

    export JAVA_HOME=/usr/local/soft/jdk1.8.0

    配置Flume

    1.命名agent组件

    2.描述配置source

    3.描述配置channel

    4.描述配置sink

    5.绑定source,sink,到channel

    agent_name)

    a1.sources=r1,r2

    a1.sinks=s1,s2

    a1.channels=c1,c2

    #sources-r1

    a1.sources.r1.type=

    a1.sources.r1.xxx=

    a1.sources.r1.yyy=

    #sink-s1

    a1.source.r1.type=

    a1.sources.r1.xxx=

    #channels-c1

    a1.channels.c1.type=

    a1.channels.c1.xxx=

    #binding(绑定)一个source可以配置多个channel

    a1.sources.r1.channels=c1 (可以配多个通道)

    a1.sinks.s1.channel=c1 (sink只能配置一个channel)

    Flume核心类考察

    Simple案例

    flume-conf.properties:

    # Name the components on this agent

    a1.sources = r1

    a1.sinks = k1

    a1.channels = c1

    # Describe/configure the source

    a1.sources.r1.type = netcat

    a1.sources.r1.bind =localhost  //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

    a1.channels.c1.capacity = 1000

    a1.channels.c1.transactionCapacity = 100

    # Bind the source and sink to the channel

    a1.sources.r1.channels = c1

    a1.sinks.k1.channel = c1

    运行flume agent

    #--conf :配置目录

    #--conf-file :配置文件

    #--name  :代理名称

    #-D    :指定额外的参数

    $>cd flume/conf

    $>flume-ng agent --conf .--conf-file flume-conf.properties --name a1 -Dflume.root.logger=INFO,console

      

    flume-ng agent --conf . --conf-file flume-conf.properties --name a1 -Dflume.root.logger=INFO,console(控制台)

    打开另一个终端:

    [hadoop@master ~]$ nc localhost 44444

    helloworld

    OK

    核心类考察

    1. Source

    生成Event,调用ChannelProcessor的方法,将Event put到Channel中去

    2.Sink

    连接到Channel,消费里面的Event,将其发送到destination,有很多相应的sink类型你

    Sink可以根据Sinkgroup和Sinkprocessor进行分组

    Sink的process()方法只能有一个线程访问

    SetChannel() getCannel() process()

    3.Channel

    连接Source(Event Procuder)和Sink(Event Consumer),本质上Channel就是Buffer

    支持事务处理,保证原子性(Put+take)

    Channel是线程安全的

    Put() take() getTransaction()


    ————————————————
    版权声明:本文为CSDN博主「qq_41028958」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_41028958/article/details/80955805

  • 相关阅读:
    将博客搬至CSDN
    【LeetCode & 剑指offer刷题】熟悉OJ平台3:OJ编程实例
    【LeetCode & 剑指offer刷题】熟悉OJ平台2:如何处理输入问题
    【LeetCode & 剑指offer刷题】熟悉OJ平台1:OJ术语
    【LeetCode & 剑指offer刷题】发散思维题9:Shuffle an Array
    【LeetCode & 剑指offer刷题】发散思维题8:Roman to Integer
    【LeetCode & 剑指offer刷题】发散思维题7:Fizz Buzz
    【LeetCode & 剑指offer刷题】发散思维题6:231. Power of Two(系列)
    【LeetCode & 剑指offer刷题】发散思维题5:65 不用加减乘除做加法
    【LeetCode & 剑指offer刷题】发散思维题4:64 求1+2+…+n
  • 原文地址:https://www.cnblogs.com/hanease/p/14488802.html
Copyright © 2011-2022 走看看