大数据(3j)Sqoop生产经验

Posted 小基基o_O

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据(3j)Sqoop生产经验相关的知识,希望对你有一定的参考价值。

增量同步遇到的坑

  • 上游(业务系统)手动导入数据,导入的时间使用了历史时间而不是插入时间

并行度

  • Sqoop的底层运行任务是MR中的Map,没有Reduce,默认4个MapTask

  • 数据导入时,建议并行度设为1:--num-mappers 1
    并行度>1时,会产生多个文件

  • 数据量较大时,可以增加并行度,并指定切分的键:--split-by

列式存储导出问题

问题描述:
数仓表采用列式存储,Sqoop导出时可能出问题
解决方案:
1、ads层数据量不多,不采用列式存储(首选)
2、创建 常规存储的 临时表,再导出

Sqoop数据导出一致性问题

场景:
Sqoop导出HIVE到mysql时,使用4个MapTask,过程中有2个任务失败,导致MySQL中存储了另外两个Map任务导入的数据
原因:
Sqoop将导出过程分解为多个事务
解决方案:
添加 --staging-table选项,指定 表名(是个辅助表),使阶段数据在单个事务中移动到目标表
--staging-table 用于辅助的表名 \\
--clear-staging-table \\

上游业务系统数据库按月分表

  • sqoop的Python脚本设置动态表名即可
from datetime import date, timedelta
# 今天
today = date.today()
# 上个月最后一天
last_day_of_last_month = today - timedelta(days=today.day)
# 上个月
month = last_day_of_last_month.month
# 上个月最后一天所在年份
year = last_day_of_last_month.year
# 年月
ym = '%4d%2d' % (year, month)
print(ym)
# 动态表名
tb_name = TB_NAME + ym

上游表字段变更管理

变更日期库名表名变更操作变更字段是否要修改Sqoop任务
2021-10-24MySQLb1t1删除字段f5
2021-10-24MySQLb1t2增加字段f3,f4

以上是关于大数据(3j)Sqoop生产经验的主要内容,如果未能解决你的问题,请参考以下文章

大数据学习之路又之从小白到用sqoop导出数据

数据集成:Flume和Sqoop

Apache Sqoop - Overview Apache Sqoop 概述

Sqoop生产数据倾斜问题验证

大数据高级开发工程师——大数据相关工具之一 Sqoop

大数据之非常详细Sqoop安装和基本操作