sqoop迁移mysql数据到hive中

本文介绍了一种使用SQOOP进行数据增量导入的方法,并提供了详细的Python脚本示例。该脚本能够针对不同的表创建并执行SQOOP任务,支持按create_time或date字段进行增量加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、先创建sqoop job,使用增量导入,python脚本如下:


#!/usr/bin/python


import os
import sys
import glob
import time
import datetime


##import all row fields --check-column create_time
def job_group0(name):
cmd = 'sqoop job --create %s -- import -m 1 --connect "jdbc:mysql://192.168.76.12:3306/smart_hardware?useSSL=false&user=phidoop&password=phidoop" --table %s --where "create_time < current_date()" --hive-import --hive-database phi_health --hive-table %s --incremental append --check-column create_time --last-value \'1900-01-01\' ' % (name,name,name)
run = os.system(cmd)

##import all row fields --check-column create_time
def job_group1(num1,num2,name):
for i in range(num1,num2):
cmd = 'sqoop job --create %s_%s -- import -m 1 --connect "jdbc:mysql://192.168.76.12:3306/smart_hardware?useSSL=false&user=phidoop&password=phidoop" --table %s_%s --where "create_time < current_date()" --hive-import --hive-database phi_health --hive-table %s --incremental append --check-column create_time --last-value \'1900-01-01\' ' % (name,i,name,i,name)
print cmd
run = os.system(cmd)


##import all row fields --check-column date
def job_group2(name):
cmd = 'sqoop job --create %s -- import -m 1 --connect "jdbc:mysql://192.168.76.12:3306/smart_hardware?useSSL=false&user=phidoop&password=phidoop" --table %s --where "date < current_date()" --hive-import --hive-database phi_health --hive-table %s --incremental append --check-column date --last-value \'1900-01-01\' ' % (name,name,name)
run = os.system(cmd)

##import all row fields --check-column date
def job_group3(num1,num2,name):
for i in range(num1,num2):
cmd = 'sqoop job --create %s_%s -- import -m 1 --connect "jdbc:mysql://192.168.76.12:3306/smart_hardware?useSSL=false&user=phidoop&password=phidoop" --table %s_%s --where "date < current_date()" --hive-import --hive-database phi_health --hive-table %s --incremental append --check-column date --last-value \'1900-01-01\' ' % (name,i,name,i,name)
print cmd
run = os.system(cmd)

if __name__=="__main__":


job_group0("balance_mac_manger_info")
job_group0("balance_measure_info")
job_group1(0,5,"balance_mac_measure_info")
job_group1(0,20,"blood_pressure_measure_info")
job_group1(0,50,"balance_measure_info")
job_group2("user_body_info")
job_group3(0,10,"user_body_info")

二、执行sqoop job的脚本job_exec.py如下:


#!/usr/bin/python


import os
import sys
import glob
import time
import datetime


def job_exec_group0(name):
cmd = 'sqoop job --exec %s' % (name)

##import all row fields
def job_exec_group1(num1,num2,name):
for i in range(num1,num2):
cmd = 'sqoop job --exec %s_%s' % (name,i)
run = os.system(cmd)


if __name__=="__main__":
job_exec_group0("balance_mac_manger_info")
job_exec_group0("balance_measure_info")
job_exec_group0("user_body_info")
job_exec_group1(0,5,"balance_mac_measure_info")
job_exec_group1(0,20,"blood_pressure_measure_info")
job_exec_group1(0,10,"user_body_info")
job_exec_group1(0,50,"balance_measure_info")



三、将job_exec.py写进定时脚本:

30 1 * * * nohup /var/lib/hadoop-hdfs/sqoop/job_exec.py &


每天凌晨1点半自动执行

### 使用 SqoopMySQL 数据导入 Hive 表 #### 准备工作 为了成功执行此操作,需确保已安装并配置好 Hadoop、HiveSqoop 环境。还需确认 MySQL JDBC 驱动程序位于 `$SQOOP_HOME/lib` 目录下。 #### 基本命令结构 基本的 Sqoop 导入命令如下所示: ```bash sqoop import \ --connect jdbc:mysql://<hostname>:<port>/<database> \ --username <user_name> \ --password <password> \ --table <source_table> \ --hive-import \ --hive-table <target_hive_db>.<target_hive_table> ``` 上述命令用于连接至指定数据库并将选定表格的数据迁移Hive 中[^1]。 #### 动态分区加载实例 对于带有动态分区功能的情况,则可以采用下面这种方式来实现数据迁移过程中的自动分区创建与填充: ```bash sqoop import \ -Dmapreduce.job.queuename=<queue_name> \ --connect jdbc:mysql://<hostname>:<port>/<database> \ --username <user_name> \ --password <password> \ --query "SELECT * FROM work.work_data WHERE \$CONDITIONS AND day >= '2023-01-01' AND day <= '2023-01-31'" \ --hive-import \ --create-hive-table \ --hive-table ods.work_data \ --hive-partition-key day \ --hive-partition-value '${day}' \ -m 1 ``` 这段脚本会从 `work.work_data` 表中提取特定日期范围内的记录,并按照 `day` 列来进行分区处理,在目标 Hive 库内建立相应的外部表结构[^2]。 #### 注意事项 当涉及到大量数据传输时,建议适当调整任务并发度 (`-m`) 参数以及优化查询条件以提高效率;另外需要注意的是源端 SQL 查询语句里必须包含 `${CONDITIONS}` 占位符以便于触发器正常运作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值