zoukankan      html  css  js  c++  java
  • Hadoop之Flume详解

    1、日志采集框架Flume
      1.1 Flume介绍
        Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。
        Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集到的数据输出到HDFS、hbase、hive、
        kafka等众多外部存储系统中
        一般的采集需求,通过对flume的简单配置即可实现
        Flume针对特殊场景也具备良好的自定义扩展能力,因此,flume可以适用于大部分的日常数据采集场景

      1.2 运行机制
        1、 Flume分布式系统中最核心的角色是agent,flume采集系统就是由一个个agent所连接起来形成
        2、 每一个agent相当于一个数据传递员(Source 到 Channel 到 Sink之间传递数据的形式是Event事件;
          Event事件是一个数据流单元。) ,内部有三个组件:
          a) Source:采集源,用于跟数据源对接,以获取数据
          b) Sink:下沉地,采集数据的传送目的,用于往下一级agent传递数据或者往最终存储系统传递数据
          c) Channel:angent内部的数据传输通道,用于从source将数据传递到sink

      1.3 采集案例
        1、采集目录到HDFS
          采集需求:某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去
          根据需求,首先定义以下3大要素
          1) 采集源,即source——监控文件目录 : spooldir
          2) 下沉目标,即sink——HDFS文件系统 : hdfs sink
          3) source和sink之间的传递通道——channel,可用file channel 也可以用内存channel
        配置文件编写:
          # 配置source组件
          agent1.sources.source1.type = spooldir
          agent1.sources.source1.spoolDir = /home/hadoop/logs/
          # 配置sink组件
          agent1.sinks.sink1.type = hdfs
          agent1.sinks.sink1.hdfs.path =hdfs://hdp-node-01:9000/weblog/flume-collection/%y-%m-%d/%H-%M
          agent1.sinks.sink1.hdfs.filePrefix = access_log

      Channel参数解释:
        capacity:默认该通道中最大的可以存储的event数量
        trasactionCapacity:每次最大可以从source中拿到或者送到sink中的event数量
        keep-alive:event添加到通道中或者移出的允许时间

    2、采集文件到HDFS
      采集需求:比如业务系统使用log4j生成的日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs
      根据需求,首先定义以下3大要素
        1) 采集源,即source——监控文件内容更新 : exec ‘tail -F file’
        2) 下沉目标,即sink——HDFS文件系统 : hdfs sink
        3) Source和sink之间的传递通道——channel,可用file channel 也可以用 内存channel

        # Describe/configure tail -F source1
        agent1.sources.source1.type = exec
        agent1.sources.source1.command = tail -F /home/hadoop/logs/access_log
        agent1.sources.source1.channels = channel1
        # Describe sink1
        agent1.sinks.sink1.type = hdfs
        #a1.sinks.k1.channel = c1
        agent1.sinks.sink1.hdfs.path =hdfs://hdp-node-01:9000/weblog/flume-collection/%y-%m-%d/%H-%M
        agent1.sinks.sink1.hdfs.filePrefix = access_log

  • 相关阅读:
    天文望远镜(二)
    天文望远镜(一)
    安静
    JavaScript 私有类字段和 TypeScript 私有修饰符
    js解析剪切板里的excel内容
    js正则
    jquery扩展方法:实现模拟Marquee无限循环滚动
    js中onload和ready区别
    Js如何从字符串中提取数字?
    JSBridge 初探
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/9904867.html
Copyright © 2011-2022 走看看