zoukankan      html  css  js  c++  java
  • 数据的采集

    采集简单分类:

    采集类型:

    全量 采集: 相当于每天整张表做个快照,在hdfs上就是一个分区 ,表比较小

    增量采集: 采集每天增加的部分 

    表命名规则:
    -i结尾: 流水型的纯增量的
    -d结尾: 快照的
    -a结尾: 全量没有任何分区 

    1、流水型数据 :

    写入数据库数据不再发生变化(如日志,交易流水) , 第二天处理前一天的数据 

    采集条件可设为
    1/ 按时间增量的抽取 ,sqoop:

    create_time>=T-1 00:00:00

    create_time<=T 00:00:00

    2/ 按表的自增ID,每张表都有个自增ID

    2、每天会发生变化 (如商品):

    1/表比较小 ,每天采集全量

    2/ 表比较大

    必须有两个字段,create_time, updated_time字段

    昨天发生变化的数据+昨日新增的数据  ,采集条件:updated_time >=T-1 00:00:00

    and create_time < T 00:00:00

    快照,就是一个时间点的数据,全量

    sqoop全量在T+1时,比如0点,做一个全量转换,但在运行sqoop时需要花费时间,所以时间并不准确,适合数据量小的时候.
    sqoop在做增量是, 比如0点,按create_time和updated_time为条件是可以的.

    数据采集:

        目前主要的数据源分为数据库、日志、平面文件三种,针对每种数据源的特点,采用适当的采集方案,目前常用的主要开源产品如下:

    数据库:Datax、Sqoop

    日志:flume、logstash、filebeat、rsyslog等

    平面文件:ftp、sftp、scp等

    为什么mysql关系型数据库的采集不用直接用sqoop就行了,还要采集binglog
    数据库用binglog的采集方法优点:

    1/ 时间可以很准确,
    2/ 实时采集,也可用于实时计算.

    如果要用binglog的采集方式,并支持事务或用于实时计算,可采用:

    方法一:

     #先存在hbase的采集方案,以支持事务来实时查询,在数据量不大(千万条时),后端可用hive,和Phoenix来实时查询(当然hive如果选MR作引擎,做不了准实时,有MR的时间)

     缺点:

    1/ hbase如果做聚合指标计算的话,是需要通过 coprocessor 做开发,变成固定api式的使用,灵活程度太低了。如常见聚合操作,找一张大表某个字段的最大值,如果不用Coprocesser则只能全表扫描,在客户端遍历所有结果找出最大值,且只能利用有限的客户端资源进行迭代计算,无法利用上HBase的并发计算能力

    2/ 实时计算Phoenix不稳定和bug太多,影响了它的使用

    方法二:

    使用流式引擎直接计算binlog 这种精确业务数据会造成的数据误差,数据误差的原因和数据顺序、业务计算要求都有关。所以采用:

    confluent写入kudu,impala计算对比mysql结果

    datax:

    阿里开源,支持mysql到orcle, 支持mangoDB .基于多线程级别的并行实现离线、异构平台同步工具,能够快速实现数据异构数据源的离线同步。

     不是分布式.单台的资源压力可能会比较大.

    sqoop:

    开源的,基于mr的、关系型数据库与hdfs之间数据同步工具,目前有1和2两个版本。目前常用的是1.

    sqoop1部署特别简单,就一个客户端,部署在hadoop集群上的一个节点上,只要能连上yarn就可以了

    sqoop2则是有了一个server,客户端通过server来提交作业到yarn上。
    优点:sqoop1架构更简单,但sqoop1命令上用户名密码都是暴露出去的,2是server上创建了connector,客户端不会暴露密码。
    但sqoop2只负责数据的读写操作,不像1还可以在命令行建表建分区等。需要下来再多一个步骤,所以相对1来说不是很方便。

    注意:

    sqoop是在yarn上运行MR,所以每个节点上的nodemanager需要和源mysql数据相连,即yarn的节点ip要加入mysql的白名单.特别是集群扩容增加新节点后,不要忘了把新节点加入源mysql的白名单,不然有些作业调度到新节点上的会失败.

    datax没有这个问题,数据库都是和datax交互, datax数据没有通过yarn,而是直接落在hdfs上.

    datax 和 sqoop的区别:

    Flume:

    开发做异步来提高并发,也通常会用队列的形式. 

    上面是原理介绍,但实际中很少会部一个节点的情况:

    场景一:

    如果100台webserve日志收集都直接写到hdfs,那会有很多小文件.所以做日志归集

     场景二:

    上面解决了聚合问题,但还存在聚合单点问题.实际中聚合点也是至少2台。 所以场景一,二可以整合在一起

    场景三:

    日志分流和多路存储

     场景四:

    数据通道前置

     用kafka使数仓和实时算法、风控等部门都来订阅(消费)kafka,kafka保持了数据的一致性。

    场景五:

    flume替代kafka作数据通道

    有些时候需要快速上线,单一的通道就可以了

     spark streaming:

    https://www.cnblogs.com/fishperson/p/10447033.html

  • 相关阅读:
    Visual Studio Code的常用快捷键
    requests模块
    爬虫基本原理
    Django-分页、中间件和请求的声明周期
    Django-admin管理工具
    Django-form表单
    Django-认证系统
    cookie、session和token
    Ajax
    Django进阶Model篇—数据库操作(ORM)
  • 原文地址:https://www.cnblogs.com/hongfeng2019/p/12048492.html
Copyright © 2011-2022 走看看