博客
关于我
sqoop增量导入hive_sqoop定时增量导入mysql数据到hdfs(hive)
阅读量:798 次
发布时间:2023-04-02

本文共 3977 字,大约阅读时间需要 13 分钟。

MySQL数据迁移与处理方案

背景与需求

我们面临一个庞大的数据处理任务,涉及两张大型MySQL数据库,分别存储量级达1亿和4.5亿条记录。由于数据库规模过大,直接从MySQL读取数据会导致性能瓶颈严重。为此,我们决定通过Sqoop实现定时增量导入Hive的方式,将数据迁移至Hive存储,进而通过Spark SQL进行处理与分析。

Sqoop定时增量导入方案

1. Sqoop Job配置与执行

创建并执行Sqoop Job

# 删除之前的Jobsqoop job -delete torderincrementjob# 创建Sqoop Jobsqoop job --create torderincrementjob \--connect jdbc:mysql://172.16.*.*:3306/*?useCursorFetch=true \--username root \--password-file /input/sqoop/pwd/109mysql.pwd \--target-dir /mysqldb/t_order \--table t_order \--fields-terminated-by "\t" \--lines-terminated-by "\n" \--null-string '\\N' \--null-non-string '\\N' \--incremental append \--check-column id \--last-value 1281 \-m 1

Sqoop Job执行日志解读

在第一次执行Job时,Sqoop会生成以下日志信息:

Lower bound value: 1281Upper bound value: 100701508

随着每次Job的执行,Sqoop会记录新的上界值,例如:

Lower bound value: 100701508Upper bound value: 100703035
Lower bound value: 100703035Upper bound value: 100704475

2. Hive外部表创建

创建Hive外部表,关联HDFS存储的数据:

CREATE external TABLE `t_order` (    `id` bigint,    `serial` string,    `product_id` int,    `product_type` tinyint,    `product_name` string,    `quantity` double,    `buyer_id` bigint,    `payer_id` bigint,    `price` double,    `vip_price` double,    `settle_price` double,    `currency` string,    `payer_level` tinyint,    `status` tinyint,    `pay_mode` tinyint,    `payment_serial` string,    `client_type` string,    `app_type` tinyint,    `seller_id` string,    `partner_id` int,    `reference` string,    `channel_source` string,    `note` string,    `expiration_time` string,    `operator` string,    `create_time` string,    `pay_time` string,    `update_time` string)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t'LINES TERMINATED BY '\n'LOCATION 'hdfs://golive-master:8020/mysqldb/t_order';

此时,可以通过Hive查询HDFS存储的数据:

select * from golivecms20.t_order limit 10;

定时任务配置

1. 脚本文件设计

#!/bin/shcurrent_time=$(date +%Y%m%d%H%M%S)echo $current_time > /data/bigdata/app/sqoopjob/timermysqltohdfs.logecho ............................ >> /data/bigdata/app/sqoopjob/timermysqltohdfs.log# t_order表同步/data/bigdata/sqoop-1.4.6-cdh5.7.0/bin/sqoop job -exec torderincrementjob# t_userlogout表同步/data/bigdata/sqoop-1.4.6-cdh5.7.0/bin/sqoop job -exec tuserlogoutincrementjob

2. Crontab定时任务设置

00 1,7,13,19 * * * /bin/bash /data/bigdata/app/sqoopjob/timermysqltohdfs.sh >> /data/bigdata/app/sqoopjob/timermysqltohdfs.log 2>&1

t_userlogout表同步方案

1. Sqoop Job配置与执行

创建Sqoop Job:

sqoop job --create tuserlogoutincrementjob \--connect jdbc:mysql://172.16.*.*:3306/*?useCursorFetch=true \--username root \--password-file /input/sqoop/pwd/68mysql.pwd \--target-dir /mysqldb/t_userlogout \--table t_userlogout \--fields-terminated-by "\t" \--lines-terminated-by "\n" \--null-string '\\N' \--null-non-string '\\N' \--incremental append \--check-column ID \--last-value 1 \-m 1

执行第一次Job:

sqoop job -exec tuserlogoutincrementjob

2. Hive外部表创建

创建Hive外部表:

CREATE external TABLE `t_userlogout` (    `ID` bigint,    `GoliveId` string,    `InstalmentCode` string,    `ManufacturerCode` string,    `MacAddress` string,    `AreaCode` string,    `IpAddress` string,    `LoginTime` string,    `LogoutTime` string,    `DeviceID` string,    `VersionType` string,    `Version` string,    `Platform` string,    `PartnerID` int,    `BranchType` int,    `LicenseProviderCode` string)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t'LINES TERMINATED BY '\n'LOCATION 'hdfs://golive-master:8020/mysqldb/t_userlogout';

附录

1. SQL查询优化

通过--query选项可以指定特定的SQL查询:

--query "select ID,GoliveId,InstalmentCode,ManufacturerCode,MacAddress,IpAddress,LoginTime,VersionType,Version,PartnerID from t_userlogout where $CONDITIONS"

2. 数据字段映射

可以通过--query选项指定特定的字段:

--query "select id,serial,product_id,product_type,product_name,buyer_id,price,vip_price,settle_price,status,pay_mode,client_type,seller_id,partner_id,channel_source,expiration_time,create_time,pay_time,update_time from t_order where $CONDITIONS"

本方案通过Sqoop实现定时增量导入Hive的方式,将大规模MySQL数据高效迁移至Hive存储,解决了直接读取大表带来的性能问题。通过Spark SQL与Hive的结合使用,可以对数据进行高效处理与分析。

转载地址:http://nqefk.baihongyu.com/

你可能感兴趣的文章
OpenCV与AI深度学习 | 使用YOLOv8做目标检测、实例分割和图像分类(包含实例操作代码)
查看>>
OpenCV与AI深度学习 | 基于GAN的零缺陷样本产品表面缺陷检测
查看>>
OpenCV与AI深度学习 | 基于OpenCV和深度学习预测年龄和性别
查看>>
OpenCV与AI深度学习 | 基于Python和OpenCV将图像转为ASCII艺术效果
查看>>
OpenCV与AI深度学习 | 基于PyTorch实现Faster RCNN目标检测
查看>>
OpenCV与AI深度学习 | 基于PyTorch语义分割实现洪水识别(数据集 + 源码)
查看>>
OpenCV与AI深度学习 | 基于YOLO11的车体部件检测与分割
查看>>
OpenCV与AI深度学习 | 基于YOLOv8的停车对齐检测
查看>>
OpenCV与AI深度学习 | 基于机器视觉的磁瓦表面缺陷检测方案
查看>>
Opencv中KNN背景分割器
查看>>
OpenCV中基于已知相机方向的透视变形
查看>>
opencv之模糊处理
查看>>
opencv保存图片路径包含中文乱码解决方案
查看>>
opencv图像分割2-GMM
查看>>
OpenCV学习(13) 细化算法(1)(转)
查看>>
OpenCV探索
查看>>
opencv笔记(1):图像缩放
查看>>
OpenCV(1)读写图像
查看>>
OpenCV:概念、历史、应用场景示例、核心模块、安装配置
查看>>
Openlayers Source基础及重点内容讲解
查看>>