zoukankan      html  css  js  c++  java
  • flume传输日志文件到HDFS过程讲解

    Flume定义:

    Flume是Cloudera提供的一个高可用的、高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构, 灵活简单。

    为什么选用Flume

      主要作用: 实时读取服务器本地磁盘的数据, 将数据写入到HDFS

     Flume的组织架构

      最简单的组织架构, 单agent

       Flume流式处理过程

      说明:

        source: 数据输入端

          常见类型: spooling directory, exec, syslog, avro, netcat等

        channel:位于source和sink之间的缓冲区

          memory: 基于内存缓存, 允许数据有丢失

          file: 持久化channel, 系统宕机不会丢失数据

        sink: 数据输出端

          常见的目的地有: HDFS, Kafka, logger, avro, File, 自定义

        Put事务流程:

          doPut: 将批数据写入临时缓冲区putList

          doCommit: 检查channel内存队列是否足够合并

          doRollback: 内存队列空间不足, 回滚数据

        Take事务流程:

          doTake: 将批数据提取到临时缓冲区takeList

          doCommit: 如果数据全部发送成功, 则清空临时缓冲区takeList

          doRollback: 如果数据发送过程中出现异常, 则将临时缓冲区takeList中数据返还给channel

      多agent

      

      事件流多路传输到一个或多个目标, 通过定义一个流复用器来实现.

     

      多路日志收集型

    Flume安装

      Flume官网地址: http://flume.apache.org/

      文档地址: http://flume.apache.org/FlumeUserGuide.html

      下载地址: http://flume.apache.org/download.html

      安装步骤:

      1、将apache-flume-1.7.0-bin.tar.gz上传到/opt/software目录下

      2、解压到/opt/module目录下

        # tar -zxf apache-flume-1.7.0-bin.tar.gz -C /opt/module/

      3、将目录apache-flume-1.7.0-bin改为名flume

        # mv apache-flume-1.7.0-bin flume

      4、将flume-env.sh.template改名为flume-env.sh, 并修改其配置

        # mv flume/conf/flume-env.sh.template flume/conf/flume-env.sh

        # vi flume/conf/flume-env.sh

          export JAVA_HOME=/opt/module/jdk1.8.0_161

      5、验证安装是否成功 

      # flume/bin/flume-ng version
      Flume 1.7.0
      Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
      Revision: 511d868555dd4d16e6ce4fedc72c2d1454546707
      Compiled by bessbd on Wed Oct 12 20:51:10 CEST 2016
      From source with checksum 0d21b3ffdc55a07e1d08875872c00523

    实时读取本地文件到HDFS

      1、flume必须持有hadoop相关的包才能将数据输出到hdfs, 将如下包上传到flume/lib下

        涉及到的包如下, 以hadoop-2.9.2为例:

        commons-configuration-1.6.jar

        commons-io-2.4.jar

        hadoop-auth-2.9.2.jar

        hadoop-common-2.9.2.jar

        hadoop-hdfs-2.9.2.jar

        hadoop-hdfs-client-2.9.2.jar

        htrace-core4-4.1.0-incubating.jar

        stax2-api-3.1.4.jar

        woodstox-core-5.0.3.jar

      2、修改/etc/hosts, 加入hadoop的地址

        10.xx.xx.xx hadoo

      3、创建配置文件flume-file-hdfs.conf

        # cd flume/

        # mkdir jobs

        # touch jobs/flume-file-hdfs.conf

      4、添加内容如下

        

    # Name the components on this agent
    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1
    
    # Describe/configure the source
    #定义source为可执行命令
    a1.sources.r1.type = exec
    a1.sources.r1.command = tail -F /opt/module/flume/logs/flume.log
    #执行shell脚本的绝对路径
    a1.sources.r1.shell = /bin/bash -c
    
    # Describe the sink
    a1.sinks.k1.type = hdfs
    a1.sinks.k1.hdfs.path = hdfs://hadoop:9000/flume/%Y%m%d/%H
    #上传文件的前缀
    a1.sinks.k1.hdfs.filePrefix = logs-
    #是否按照时间滚动文件
    a1.sinks.k1.hdfs.round = true
    #多少时间单位创建一个新文件夹
    a1.sinks.k1.hdfs.roundValue = 1
    #时间单位
    a1.sinks.k1.hdfs.roundUnit = hour
    #是否使用本地时间戳
    a1.sinks.k1.hdfs.useLocalTimeStamp = true
    #积攒多少个event才flush一次hdfs
    a1.sinks.k1.hdfs.batchSize = 100
    #文件类型, 是否压缩
    a1.sinks.k1.hdfs.fileType = DataStream
    #多久生成一个新文件
    a1.sinks.k1.hdfs.rollInterval = 60
    #每个文件的大小
    a1.sinks.k1.hdfs.rollSize = 10240
    #文件的滚动与event数量无关
    a1.sinks.k1.hdfs.rollCount = 0
    #最小冗余
    a1.sinks.k1.hdfs.minBlockReplicas = 1
    
    # 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
    

     5、启动flume

      # bin/flume-ng agent --conf conf/ --conf-file jobs/flume-file-hdfs.conf --name a1  -Dflume.root.logger=DEBUG,console 

     6、查看hdfs系统文件是否接收到文件

      # hdfs dfs -ls /flume
      Found 1 items
      drwxr-xr-x - root supergroup 0 2020-04-02 22:37 /flume/20200402

     flume传输日志文件到hdfs成功了。

      

    友情提示:

      hadoop伪分布部署: https://www.cnblogs.com/kongzhagen/p/6872297.html

  • 相关阅读:
    FFT加速多项式乘法C语言版(基2FFT)
    springboot2中@ConfigurationProperties装载yml文件的时候调取出现值为null的解决办法
    LeetCode27-移除元素
    dom4j在解析xml文件的时候将" "解析成空格的解决办法
    LeetCode17- 电话号码的字母组合
    LeetCode19- 删除链表的倒数第N个节点
    LeetCode14- 最长公共前缀
    LeetCode20- 有效的括号
    LeetCode21- 合并两个有序链表
    MySQL单表百万数据记录分页性能优化
  • 原文地址:https://www.cnblogs.com/kongzhagen/p/12623208.html
Copyright © 2011-2022 走看看