大数据:增量采集、处理、导出

本文详细介绍了大数据环境下增量采集、处理和导出的整个流程。包括使用Flume进行增量文件采集,通过Sqoop增量采集数据库数据,以及在Hive中进行增量处理和导出。同时,讨论了不同场景下的增量处理策略和实现方法,并提供了脚本开发的实例。
摘要由CSDN通过智能技术生成

增量采集、处理、导出

一、增量采集

1.增量采集的业务需求

离线与实时
离线:以时间为单位来实现数据的处理:采集、计算

  • 场景:每天处理一次,每个小时处理一次,每个月,每年
  • 特点:时效性比较低,一般都是分钟级别
  • 工具:Hadoop生态圈
    • Sqoop、HDFS、Hive、MapReduce、SparkCore、SparkSQL、Tez、Impala、Sqoop、MySQL

实时:以数据为单位的实现数据的处理:采集、计算

  • 场景:产生一条数据就要立刻采集以及处理一条数据
  • 特点:时效性非常高,一般都是毫秒级别
  • 工具:实时生态圈
    • Flume、Canal、Kafka、SparkStreaming/Flink、Redis、Hbase

离线需求

  • 实现离线采集、离线计算、离线结果保存
  • 所有过程:都是增量的过程

增量与全量

  • 全量:每次都所有数据进行处理
    • 一般用于数据迁移、维度表的更新
  • 增量:每次对最新【新增、更新】的数据进行处理
    • 工作中主要的场景

2.增量采集的方案

Flume:增量文件采集

  • exec:tail命令,动态的获取文件的尾部
    • tail命令,自动读取文件的尾部
  • taildir:动态实时监控多个文件
    • 记录文件的采集位置:taildir_position.json
    • 实现增量采集

Sqoop:增量采集数据库

  • 方式一:按照某一列自增的int值来实现:append

    • 要求:必须有一列自增的int值,必须有主键
    • 特点:只能采集新增的数据
  • 方式二:按照数据变化的时间列的值来实现:lastmodifield

    • 要求:必须有一列时间列,时间列随着数据的更新而自动更新
    • 特点:能采集新增和更新的数据
  • 方式三:通过指定目录分区采集到对应的HDFS目录下

    • 要求:表中有两个字段
      • create_time:创建时间
      • 新增的数据
  • update_time:更新时间

    • 更新的数据
  • 怎么解决更新和新增数据的问题:通过SQL的过滤

-e "select * from table where substr(create_time,1,10) = '2021-05-16' or substr(update_time,1,10) = '2021-05-16'“
  • 增量要求目录是提前存在,追加新增的数据进入,没有使用官方提供的增量,目录不能提前存在
--target-dir /nginx/log/2021-05-15/
  • 问题:如何通过Sqoop将数据采集到Hive的分区表中?
    • –hive-partition-key daystr:指定分区的字段是哪个字段
    • –hive-partition-value 2021-05-15:指定导入哪个分区
  • 原理
    • 根据指定的参数,在HDFS中创建一个目录:key=value
table/daystr=2021-05-15
  • 在Hive中加载分区即可

  • 方式二:通过手动指定HDFS方式来代替

--target-dir /nginx/log/daystr=2021-05-15/hourstr=00

3.增量采集的实现

  • 创建MySQL测试数据表
create database if not exists db_order;
use db_order;
drop table if exists tb_order;
create table tb_order(
id varchar(10) primary key,
pid varchar(10) not null,
userid varchar(10) not null,
price double not null,
create_time varchar(20) not null
);
  • 插入测试数据
insert into tb_order values('o00001','p00001','u00001',100,'2021-05-13 00:01:01');
insert into tb_order values('o00002','p00002','u00002',100,'2021-05-13 10:01:02');
insert into tb_order values('o00003','p00003',
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值