基于Sqoop的MySQL-Hive全量/增量同步解决方案(支持多表批量处理

一、全量同步方案设计

1.1 基础命令模板

sqoop import \
--connect jdbc:mysql://mysql_host:3306/db_name \
--username user \
--password pass \
--table source_table \
--hive-import \
--hive-table target_table \
--hive-overwrite \  # 覆盖已有表
--num-mappers 8 \    # 并行度(根据集群资源调整)
--split-by id \      # 分片字段(需为数字类型)
--fields-terminated-by '\001' \
--lines-terminated-by '\n' \
--null-string '\\N' \
--null-non-string '\\N'

1.2 关键参数说明

参数说明必须项
--hive-import启用Hive表自动创建
--hive-drop-import-delims删除Hive默认分隔符推荐
--mapreduce.job.name自定义任务名称
--autoreset-to-one-mapper无主键表自动单线程推荐

1.3 多表批量处理脚本

#!/bin/bash# 配置参数
DB_CONFIG="mysql_host:3306/db_name"
USER="root"
PASS="password"
HIVE_DB="dw"
TABLES=("user" "order" "product")  # 表名列表# 循环处理每个表
for TABLE in "${TABLES[@]}"
doecho "正在同步表: $TABLE"sqoop import \--connect "jdbc:mysql://$DB_CONFIG" \--username $USER \--password $PASS \--table $TABLE \--hive-import \--hive-database $HIVE_DB \--hive-overwrite \--num-mappers $(get_conf $TABLE) \  # 动态获取并行度--split-by $(get_split_col $TABLE) \  # 动态获取分片字段--null-string '\\N' \--null-non-string '\\N'
done

二、增量同步方案设计

2.1 Append模式(新增数据)

sqoop import \
--connect jdbc:mysql://mysql_host:3306/db_name \
--username user \
--password pass \
--table source_table \
--hive-import \
--hive-table target_table \
--incremental append \
--check-column update_time \  # 时间戳字段
--last-value '2024-05-01 00:00:00' \
--num-mappers 4

2.2 LastModified模式(更新数据)

sqoop import \
--connect jdbc:mysql://mysql_host:3306/db_name \
--username user \
--password pass \
--table source_table \
--hive-import \
--hive-table target_table \
--incremental lastmodified \
--check-column update_time \
--last-value '2024-05-01 00:00:00' \
--merge-key id \  # 主键合并
--num-mappers 4

2.3 自动化增量管理

# 动态获取最后同步时间
LAST_VALUE=$(hive -e "SELECT MAX(update_time) FROM target_table")# 执行增量同步
sqoop import \
--check-column update_time \
--last-value "$LAST_VALUE" \
--incremental append \
--hive-import \
--hive-table target_table

三、多表同步增强方案

3.1 配置驱动模式

table_sync.conf

[user]
table=user
split_col=id
parallel=8[order]
table=order
split_col=order_id
parallel=12[product]
table=product
split_col=product_id
parallel=6

批量执行脚本

#!/bin/bashCONFIG_FILE="table_sync.conf"
HIVE_DB="dw"while IFS='=' read -r key value
doif [[ $key == "table" ]]; thenTABLE=${value}echo "处理表: $TABLE"sqoop import \--connect "jdbc:mysql://mysql_host:3306/db_name" \--username user \--password pass \--table $TABLE \--hive-import \--hive-database $HIVE_DB \--hive-overwrite \--num-mappers $(grep "^${TABLE}=" $CONFIG_FILE | cut -d'=' -f2) \--split-by $(grep "^${TABLE}=" $CONFIG_FILE | cut -d'=' -f3) \--null-string '\\N'fi
done < $CONFIG_FILE

3.2 全量+增量混合模式

#!/bin/bash# 全量同步配置
FULL_SYNC_TABLES=("config" "lookup")# 增量同步配置
INCREMENTAL_TABLES=("user" "order")# 执行全量同步
for TABLE in "${FULL_SYNC_TABLES[@]}"
dosqoop import \--table $TABLE \--hive-import \--hive-overwrite
done# 执行增量同步
for TABLE in "${INCREMENTAL_TABLES[@]}"
dosqoop import \--table $TABLE \--incremental append \--check-column update_time \--last-value $(hive -e "SELECT MAX(update_time) FROM $TABLE")
done

四、关键问题解决方案

4.1 数据类型映射

# 显式指定类型映射(解决TINYINT转BOOLEAN问题)
sqoop import \
--map-column-hive status=STRING \
--map-column-hive is_valid=BOOLEAN

4.2 分区表同步

# 按日期分区
sqoop import \
--hive-partition-key dt \
--hive-partition-value $(date +%Y-%m-%d) \
--where "dt='${DATE}'"

4.3 性能优化参数

# 压缩传输(提升30%网络效率)
sqoop import \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec# 内存调优(避免OOM)
sqoop import \
--driver-memory 4G \
--executor-memory 8G

五、监控与容错机制

5.1 同步状态记录

-- 创建同步状态表
CREATE TABLE sync_status (table_name VARCHAR(50) PRIMARY KEY,last_sync_time TIMESTAMP,sync_type VARCHAR(20)  -- FULL/APPEND
);

5.2 自动重试策略

MAX_RETRY=3
RETRY_COUNT=0while [ $RETRY_COUNT -lt $MAX_RETRY ]; dosqoop import ... || {RETRY_COUNT=$((RETRY_COUNT+1))sleep 300}
done

5.3 异常检测脚本

#!/bin/bash# 检查Hive表行数
HIVE_COUNT=$(hive -e "SELECT COUNT(*) FROM target_table")# 检查MySQL行数
MYSQL_COUNT=$(mysql -uroot -ppass -D db -e "SELECT COUNT(*) FROM source_table")if [ $HIVE_COUNT -ne $MYSQL_COUNT ]; thenecho "数据不一致!差异行数:$(expr $MYSQL_COUNT - $HIVE_COUNT)"# 触发告警send_alert "Sqoop同步异常"
fi

六、生产环境最佳实践

  1. 元数据管理
    使用sqoop import-all-tables同步全库时,需提前在Hive创建对应数据库

  2. 增量同步策略

    增量频率 | 适用场景 | 检查字段
    ---------|----------|----------
    每分钟   | 实时日志 | log_ts
    每小时   | 交易流水 | update_time
    每天     | 统计报表 | dt
  3. 资源隔离方案

    # 为不同业务分配独立队列
    sqoop import \
    --queue hadoop_yarn_queue_olap
  4. 版本兼容性

    MySQL版本推荐Sqoop版本注意事项
    5.71.4.7需添加JDBC驱动
    8.01.4.7需升级Connector/J

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/85170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(7)—— HTML + CSS实现博客系统页面

目录 一&#xff0c;效果展示 二&#xff0c;实现博客列表页 2.1 实现导航栏 2.2 实现个人信息 2.3 实现博客列表 三&#xff0c;实现博客正文页 3.2 复用 3.4 实现博客正文 四&#xff0c;实现博客登录页 4.1 版心 4.2 登录框 五&#xff0c;实现博客编辑页 5.1 …

【技能拾遗】——家庭宽带单线复用布线与配置(移动2025版)

&#x1f4d6; 前言&#xff1a;在家庭网络拓扑中&#xff0c;客厅到弱电箱只预埋了一根网线&#xff0c;由于已将广电的有线电视取消并改用IPTV。现在需要解决在客厅布置路由器和观看IPTV问题&#xff0c;这里就用到单线复用技术。 目录 &#x1f552; 1. 拓扑规划&#x1f55…

VTK|实现类似CloundCompare的测量功能

文章目录 CloundCompare在点、线、面三种模式下的显示内容✅ 图1&#xff1a;点模式✅ 图2&#xff1a;线模式✅ 图3&#xff1a;面模式 增加控制菜单栏实现测量功能类如何调用项目git链接 CloundCompare在点、线、面三种模式下的显示内容 点 线 面 三张图展示了 CloudComp…

4000万日订单背后,饿了么再掀即时零售的“效率革命”

当即时零售转向价值深耕&#xff0c;赢面就是综合实力的强弱。 文&#xff5c;郭梦仪 编&#xff5c;王一粟 在硝烟弥漫的外卖行业“三国杀”中&#xff0c;饿了么与淘宝闪购的日订单量竟然突破了4000万单。 而距淘宝闪购正式上线&#xff0c;还不到一个月。 在大额福利优惠…

vedio.ontimeupdate()和video.onloadeddata()

video.onloadeddata &#xff08;&#xff09; video.onloadeddata 是 JavaScript 中用于监听 HTML <video> 元素 「当前帧数据已加载」 的事件处理器。当视频的第一帧画面数据加载完成&#xff08;足以开始播放&#xff09;时&#xff0c;会触发此事件。 1. 基本用法 …

Baklib内容中台革新企业知识实践

Baklib智能知识中枢构建 作为现代企业知识管理的核心架构&#xff0c;Baklib内容中台通过整合多源异构数据形成智能化知识中枢&#xff0c;实现从信息采集到价值转化的全链路管理。其底层采用跨平台数据贯通技术&#xff0c;支持API接口与企业现有CRM、ERP系统无缝对接&#x…

用不太严谨的文字介绍遥测自跟踪天线的基本原理

前两天跟一个客户见面的时候&#xff0c;客户问我&#xff1a;遥测自跟踪天线能够跟踪目标&#xff0c;是什么原理&#xff1f;不需要目标的位置&#xff0c;怎么做到自跟踪的&#xff1f; 突然一瞬间&#xff0c;有点语塞。 难道要介绍天线、馈源、极化、左旋、右旋、和差网…

VS配置redis环境、redis简单封装

一、安装redis数据库 1.下载redis的压缩包 wget https://download.redis.io/releases/redis-6.0.5.tar.g 2.解压缩redis压缩包&#xff0c;一般就在当前路径 tar -zvxf redis-6.0.5.tar.gz -C /usr/local/redis 方便找我把它解压缩在/usr/local/redis&#xff0c;如果没有r…

C++23 已移除特性解析

文章目录 引言C23 已移除特性介绍1. 垃圾收集的支持和基于可达性的泄漏检测&#xff08;P2186R2&#xff09;背景与原理存在的问题移除的影响 2. 混合宽字符串字面量拼接非良构&#xff08;P2201R1&#xff09;宽字符串编码概述混合拼接的问题示例分析移除的意义 3. 不可编码宽…

Cloudflare

Cloudflare 是一个网络基础设施和网站安全服务提供商&#xff0c;它的主要作用是让网站 更快、更安全、更可靠。简单来说&#xff0c;它是一个“护盾 加速器”。 &#x1f9e9; Cloudflare 的主要功能&#xff1a; 1. &#x1f680; 加速网站访问&#xff08;CDN&#xff09…

Spring Boot启动慢?Redis缓存击穿?Kafka消费堆积?——Java后端常见问题排查实战

Spring Boot启动慢&#xff1f;Redis缓存击穿&#xff1f;Kafka消费堆积&#xff1f;——Java后端常见问题排查实战 引言 Java后端系统因其丰富的技术栈和复杂的业务逻辑&#xff0c;常常面临启动延迟、性能瓶颈、异常错误等多种挑战。从核心语言、Web框架到分布式微服务及缓…

数字人引领政务新风尚:智能设备助力政务服务

在信息技术飞速发展的今天&#xff0c;政府机构不断探索提升服务效率和改善服务质量的新途径。实时交互数字人在政务服务中的应用正成为一大亮点&#xff0c;通过将“数字公务员”植入各种横屏智能设备中&#xff0c;为民众办理业务提供全程辅助。这种创新不仅优化了政务大厅的…

ToolsSet之:十六进制及二进制编辑运算工具

ToolsSet是微软商店中的一款包含数十种实用工具数百种细分功能的工具集合应用&#xff0c;应用基本功能介绍可以查看以下文章&#xff1a; Windows应用ToolsSet介绍https://blog.csdn.net/BinField/article/details/145898264 ToolsSet中Number菜单下的Hex Operate工具可以进…

DSP处理数字信号做什么用的?

DSP&#xff08;数字信号处理器&#xff09;的核心任务是高效、实时地处理数字信号&#xff0c;通过专用硬件架构和算法优化&#xff0c;完成对信号的转换、增强、分析和控制。以下是DSP处理数字信号的主要用途及典型场景&#xff1a; 1. 信号增强与优化 降噪&#xff08;Noise…

电脑如何保养才能用得更久

在这个数字化的时代&#xff0c;电脑已经成为了我们生活和工作中不可或缺的伙伴。无论是处理工作文档、追剧娱乐&#xff0c;还是进行创意设计&#xff0c;电脑都发挥着至关重要的作用。那么&#xff0c;如何让我们的电脑“健康长寿”&#xff0c;陪伴我们更久呢&#xff1f;今…

设计模式-监听者模式

文章目录 监听者模式 监听者模式 监听器模式指的是事件源经过事件的封装传给监听器&#xff0c;当事件源触发事件之后&#xff0c;监听器收到事件的通知并执行事件回调方法。 -监听者观察者概念定义当范围对象的状态发生变化时&#xff0c;服务器自动调用监听器对象中的方法来…

小程序33-列表渲染

列表渲染 就是指通过循环遍历一个数组或对象&#xff0c;将其中的每个元素渲染到页面上 在组件上使用 wx:for 属性绑定一个数组或对象&#xff0c;既可使用每一项数据重复渲染当前组件 每一项的变量名默认为item&#xff0c;下标变量名默认为index 在使用 wx:for进行遍历的时候…

[ Qt ] | QRadioButton和QCheckBox的使用

目录 QRadioButton 常用属性 clicked(bool)信号、pressed信号、released信号 小项目 QRadioButton QRadioButton是一个单选按钮&#xff0c;也是继承自QAbstractButton(继承自QWidget) 常用属性 checkable 是否能选中 checked 是否已经被选中 autoExclusive 是否排…

[网页五子棋][匹配模式]创建房间类、房间管理器、验证匹配功能,匹配模式小结

文章目录 创建房间类创建房间类实现房间管理器 实现匹配器(3)验证匹配功能问题&#xff1a;匹配按钮不改变验证多开 小结 创建房间类 LOL&#xff0c;通过匹配的方式&#xff0c;自动给你加入到一个房间&#xff0c;也可手动创建游戏房间 这一局游戏&#xff0c;进行的“场所…

Apifox 5 月产品更新|数据模型支持查看「引用资源」、调试 AI 接口可实时预览 Markdown、性能优化

Apifox 新版本上线啦&#xff01; 看看本次版本更新主要涵盖的重点内容&#xff0c;有没有你所关注的功能特性&#xff1a; 自动解析 JSON 参数名和参数值调试 AI 接口时&#xff0c;可预览 Markdown 格式的内容性能优化&#xff1a;新增「实验性功能」选项 使用独立进程执行…