zoukankan      html  css  js  c++  java
  • 新篇章:大数据——Flume

    体系结构

    Event英文直译是事件,但是在Flume中表示数据传输的一个最小单位。参照下图可以看得出Agent就是Flume的一个部署实例, 一个完整的Agent中包含了三个组件Source、Channel和Sink,Source是指数据的来源和方式,Channel是一个数据的缓冲池,Sink定义了数据输出的方式和目的地。

    Agent中的source和sink与channel存取Event是异步的。

    扇入(多对一)和扇出(一对多)的概念,就是说Agent可以将数据流发到多个下级Agent,也可以从多个Agent发到一个Agent中。

    imageimage

    一个avro source需要有个hostname(或者ip地址)一个端口号来接收数据

    一个内存channel有最大队列长度的属性(capacity)

    一个HDFS sink需要知晓文件系统的URI地址创建文件,文件访问频率hdfs.rollInterval)等等。

    所有的这些组件属性都需要在Flume配置文件中设置。

    基本概念

    flume:deliver data from applications to Apache Hadoop's HDFS ;a simple and flexible architecture based on streaming data flows. It is robust and fault tolerant with tunable reliability mechanisms and many failover and recovery mechanisms. It uses a simple extensible data model that allows for online analytic applications。

    flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力

    1. 什么是Flume

    (1) 海量数据采集,处理,集合

    (2) 是分布式,高可用,高性能

    2. Flume可靠性:(面试会问)

    (1) end to end:一定在本地保存(最高)

    (2) Store on failure:不一定在本地保存(使用频率比较高的策略)

    (3) Besteffort:一定不在本地保存(最低)

    3. Flume的核心结构:(面试会问)

    (1) Source:负责接受,读取,监听数据源

    (2) Sink:负责接受通道输送来的数据,并且将数据交到指定的存储介质当中

    (3) Channel:负责对数据进行输送

    (4) Events:保存数据的最基本单元

    4. Flume能达到的设计目标

    (1) 每一个组件都可以有若干种选择

    (2) 无论是输入还是输出,同样有若干种选择

    (3) 非常灵活,没有固定的格式,可以任意搭配。

    5. Flume的架构模式(面试会问)

    (1) 单一流程

    (2) 多代理流程

    (3) 流的合并

    (4) 多路复用流

    (5) 负载平衡

    部署应用

    基于Hadoop寄生,因此将:压缩包直接解压移动到hadoopserver下即可。

    配置环境变量:/etc/profile  :

    export FLUME_HOME=/path……/apache-flume-1.6.0-bin

    export FLUME_CONF_DIR=$FLUME_HOME/conf

    export PATH=.:$PATH:$FLUME_HOME/bin

    ===========flume命令解析

    image

    agen:flume客户端

    avro-client:Avro Flme客户端

    ====agent avro 客户端命令

    image

    模板配置:hello world

    image

    ========文件配置示例

    job01.sources = source01
    job01.sinks = sink01
    job01.channels = chan01

    job01.sources.source01.type = avro
    job01.sources.source01.channels = chan01
    job01.sources.source01.bind = 0.0.0.0
    job01.sources.source01.port = 4141

    job01.sinks.sink01.type = logger

    job01.channels.chan01.type = memory
    job01.channels.chan01.capacity = 1000
    job01.channels.chan01.transactionCapacity = 100

    job01.sources.source01.channels = chan01
    job01.sinks.sink01.channel = chan01

    =======启动job

    flume-ng agent -c conf -f ./avro.conf -n job01 -D flume.root.logger=INFO,console

    =====测试

    flume-ng avro-client -c . -H c1 -p 4141 -F log.log

    同理:参照文档:


    部署碰到问题:

    yum install -y nc   //-bash: nc: command not found问题

  • 相关阅读:
    如何在原生微信小程序中实现数据双向绑定
    【推荐】开源项目minapp-重新定义微信小程序的开发
    iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 规范与部署
    iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 错误处理
    系列3|走进Node.js之多进程模型
    手把手教你撸一个 Webpack Loader
    iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 记录日志
    React Native 网络层分析
    如何实现VM框架中的数据绑定
    iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 解析JSON
  • 原文地址:https://www.cnblogs.com/macro-renzhansheng/p/13581450.html
Copyright © 2011-2022 走看看