001_数据采集工具Flume与 Sqoop

数据采集工具Flume与 Sqoop

知识点01:思考

  1. 在线教育项目中的需求和模块是什么?

    • 需求
      • 基于不同维度的数据分析提高报名转化率
        • 访问转咨询
        • 意向转报名
      • 基于不同维度的数据分析提高学员学习质量
        • 考勤分析
    • 模块/主题
      • 访问分析主题
      • 咨询分析主题
      • 意向分析主题
      • 报名分析主题
      • 考勤分析主题
  2. 整个项目架构中使用到了哪些技术?

    • 数据生成:MYSQL业务数据库系统
      • 访问与咨询:客服系统
      • 意向与报名:CRM系统
      • 考勤分析:学员管理系统
    • 数据采集:Sqoop
    • 数据存储:Hive
    • 数据处理:HiveSQL【MR】
    • 数据应用:MySQL + FineBI
    • 可视化交互工具:Hue
    • 任务流调度系统:Oozie
    • 集群管理工具:CM
    • 版本控制工具:Git
  3. 常用的数据源有哪些?

    • 业务数据
    • 用户行为数据
    • 爬虫数据
    • 运维数据
    • 第三方数据

知识点02:目标

  1. 学习Flume的使用
    • 目标:怎么学习Flume的使用?
    • Flume介绍:功能和应用场景
    • Flume使用:基本使用,学习Flume的使用技巧
  2. 掌握Sqoop的使用
    • 目标:掌握Sqoop所有导入导出的常用参数的使用
    • Sqoop介绍:功能、基本原理、应用场景
    • Sqoop使用:导入和导出

知识点03:Flume的功能与应用

  • 目标掌握Flume的功能与应用场景

    • Flume是什么?
    • 为什么要用Flume,什么场景下使用Flume?
  • 路径

    • step1:功能
    • step2:特点
    • step3:应用
  • 实施

    • 功能
      • 数据采集:将数据从一个地方采集到另外一个地方
        • 数据生成:业务存储位置中
        • 需求:将各种不同的数据来源统一化采集到统一的数据存储中
        • 数据存储:统一化存储
      • 实现分布式实时数据流的数据采集,可以将各种各样不同数据源的数据实时采集到各种目标地中
    • 特点
      • 实时采集:时效性非常高,数据一产生就立即可以被采集
      • 功能全面:支持从各种地方采集数据,可以将采集到的数据写入各种目标地
        • 采集:文件、网络端口
        • 发送:HDFS、Hive、Hbase、Kafka……
      • 允许自定义开发
      • 开发相对简单:所有的功能在底层都已经封装了,只要开发一个配置文件,定义采集谁,发送到哪就可以
      • 可以实现分布式采集:不是分布式工具,将Flume部署在多台机器,一起采集
    • 应用
      • 应用于实时文件、网络数据流采集场景
      • 美团的Flume设计架构
        • https://tech.meituan.com/2013/12/09/meituan-flume-log-system-architecture-and-design.html
  • 小结

    • Flume的功能和应用场景是什么?
    • 功能:实时的分布式数据流采集
      • 应用:实时文件和网络数据流

知识点04:Flume的基本组成

  • 目标掌握Flume的基本组成

  • 路径

    • step1:Agent
    • step2:Source
    • step3:Channel
    • step4:Sink
    • step5:Event
  • 实施

    • 官方:flume.apache.org

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EACkcumN-1623125056317)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507095910117.png)]

      • http://flume.apache.org/releases/content/1.7.0/FlumeUserGuide.html

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oUEkHbZh-1623125056318)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507100111078.png)]

    • Agent:一个Agent表示一个Flume程序,实现采集数据源的数据,将数据采集发送到目标地

      • 将WebServer的日志采集以后写入HDFS
    • 任何一个Agent实现数据采集,都必须由三个基本组件构成

      • Source、Channel、Sink
    • Source:负责监听数据源的数据变化,如果数据源产生新的数据,就立即进行采集

      • 负责实现数据采集
      • 将数据源的每一行数据变成一个Event对象,发送给Channel
    • Channel:负责接收Source采集到的数据,供Sink来读取数据

      • 采集数据的临时缓存的
    • Sink:负责从Channel中读取采集的数据,将数据写入目标地

      • 最终实现数据发送的组件
    • Event:数据流传输的最小的封装的单元,将每一行封装为一个Event

      • 结构

        header:类似于一个Map集合存储,默认为空的,可以选择性在header放KV对,一些属性的配置等
        body:类似于一个字节数组,存放真正的这条数据的内容
        
      • 作用:实现每一条数据的封装

  • 小结

    • Flume中的Agent是什么,由什么组成?
      • 一个Agent就是一个Flume程序
    • 组成:Source、Channel、SInk
    • Source、Channel、Sink的功能分别是什么?
      • Source:采集数据
      • Channel:缓存数据
      • Sink:发送数据

知识点05:Flume的开发规则

  • 目标掌握Flume的基本开发规则

  • 实施

    • step1:开发一个Flume的参数配置文件

      • 需要在配置文件中定义Agent
        • 定义Agent的名称
        • 定义Source:从哪读取数据
        • 定义Channel:将数据缓存在哪
        • 定义Sink:将数据发送到哪
      • 一个文件可以有多个Agent,具体区分每个Agent通过Agent名称来区分
    • step2:运行flume的agent程序,运行这个程序所在的文件,指定agent的名称即可

      • 用法

        flume-ng <command> [options]...
        
      • 使用

        flume-ng agent -c/--conf 指定Flume配置文件目录 --name/-n 指定Agent的名称 --conf-file/-f 指定要运行的文件
        
      • 版本:

        • flume-og:以前的老版本,见不到的
        • flume-ng:现在使用的版本
  • 小结

    • 如何开发一个Flume程序?

      • step1:开发一个文件,定义Agent【名称、source、channel、sink】

      • step2:运行这个文件

        flume-ng agent -c conf_dir -n agentName -f agentFile
        

知识点06:Flume开发测试

  • 目标实现Flume程序的开发测试

  • 实施

    • 需求:采集Hive的日志、临时缓存在内存中、将日志写入Flume的日志中并打印在命令行

      • source:采集一个文件数据

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cRaC1wna-1623125056319)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507103323742.png)]

        • Exec Source:通过执行一条Linux命令来实现文件的动态采集
      • channel:Flume提供了各种channel用于缓存数据

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4m0CGSJ8-1623125056320)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507103901326.png)]

        • mem channel:将数据缓存在内存中
      • sink:Flume提供了很多种sink

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2jL0Vsou-1623125056321)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507104151330.png)]

        • Logger Sink:将数据写入日志中
    • 开发

      • 创建测试目录

        cd /export/server/flume-1.6.0-cdh5.14.0-bin
        mkdir usercase
        
      • 复制官方示例

        cp conf/flume-conf.properties.template usercase/hive-mem-log.properties
        
      • 开发配置文件

        # The configuration file needs to define the sources, 
        # the channels and the sinks.
        # Sources, channels and sinks are defined per a1, 
        
        # in this case called 'a1'
        
        #define the agent
        a1.sources = s1
        a1.channels = c1
        a1.sinks = k1
        
        #define the source
        a1.sources.s1.type = exec
        a1.sources.s1.command = tail -f /export/server/hive-1.1.0-cdh5.14.0/logs/hiveserver2.log
        
        #define the channel
        a1.channels.c1.type = memory
        a1.channels.c1.capacity = 10000
        
        #define the sink
        a1.sinks.k1.type = logger
        
        #bond
        a1.sources.s1.channels = c1
        a1.sinks.k1.channel = c1
        
    • 运行

      flume-ng agent -c conf/ -f usercase/hive-mem-log.properties -n a1 -Dflume.root.logger=INFO,console
      
    • 结果

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tEeeMECa-1623125056322)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507104747650.png)]

  • 小结

    • 实现测试即可

知识点07:常用Source:Exec

  • 目标掌握Exec Source的功能与应用场景

  • 路径

    • step1:功能与应用场景
    • step2:测试实现
  • 实施

    • 功能与应用场景

      • 功能:通过执行一条Linux命令来实现数据动态采集
        • 固定搭配tail -f命令来使用
        • 增量采集
      • 应用场景:实现动态监听采集单个文件的数据
        • 缺点:如果日志是多个文件的动态变化
    • 测试实现

      • 需求:动态采集hiveserver的日志文件,输出在Flume的日志并打印在命令行中
      • 开发:参考知识点06
  • 小结

    • Exec Source的功能与应用场景是什么?
    • 功能:通过执行一条Linux命令来实现文件的数据采集
      • 应用:动态监听单个文件

知识点08:常用Source:Taildir

  • 目标掌握Taildir Source的功能与应用场景

  • 路径

    • step1:功能与应用场景
    • step2:测试实现
  • 实施

    • 功能与应用场景

      • 应用场景

        • 需求:当前日志文件是一天一个,需要每天将数据实时采集到HDFS上

        • 数据:Linux

          /tomcat/logs/2020-01-01.log
                       2020-01-02.log
                       ……
                       2020-11-10.log
          
        • 问题:能不能exec source进行采集?

          • 不能,exec只能监听采集单个文件
        • 解决:Taildir Source

      • 功能:从Apache Flume1.7版本开始支持,动态监听采集多个文件

        • 如果用的是1.5或者1.6,遇到这个问题,需要自己手动编译这个功能
    • 测试实现

      • 需求:让Flume动态监听一个文件和一个目录下的所有文件

      • 准备

        cd /export/server/flume-1.6.0-cdh5.14.0-bin
        mkdir position
        mkdir -p /export/data/flume
        echo " " >> /export/data/flume/bigdata01.txt
        

      mkdir -p /export/data/flume/bigdata

      
      - 开发
      
      ```properties
      # define sourceName/channelName/sinkName for the agent 
      a1.sources = s1
      a1.channels = c1
      a1.sinks = k1
      
      # define the s1
      a1.sources.s1.type = TAILDIR
      #指定一个元数据记录文件
      a1.sources.s1.positionFile = /export/server/flume-1.6.0-cdh5.14.0-bin/position/taildir_position.json
      #将所有需要监控的数据源变成一个组,这个组内有两个数据源
      a1.sources.s1.filegroups = f1 f2
      #指定了f1是谁:监控一个文件
      a1.sources.s1.filegroups.f1 = /export/data/flume/bigdata01.txt
      #指定f1采集到的数据的header中包含一个KV对
      a1.sources.s1.headers.f1.headerKey1 = value1
      #指定f2是谁:监控一个目录下的所有文件
      a1.sources.s1.filegroups.f2 = /export/data/flume/bigdata/.*
      #指定f2采集到的数据的header中包含一个KV对
      a1.sources.s1.headers.f2.headerKey1 = value2
      a1.sources.s1.fileHeader = true
      
      # define the c1
      a1.channels.c1.type = memory
      a1.channels.c1.capacity = 1000
      a1.channels.c1.transactionCapacity = 100
      
      # def the k1
      a1.sinks.k1.type = logger
      
      #source、channel、sink bond
      a1.sources.s1.channels = c1
      a1.sinks.k1.channel = c1
      
      • 结果

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qhaLu8q5-1623125056323)(Day15_数据采集工具Flume与 Sqoop.assets/image-20210507112002320.png)]

      • 元数据文件的功能:/export/server/flume-1.6.0-cdh5.14.0-bin/position/taildir_position.json

        • 问题:如果Flume程序故障,重启Flume程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值