利用sqoop将hive和mysql数据互导入(转)

本文详细介绍了如何使用SQOOP工具实现MySQL数据到Hive的高效导入,以及从Hive导出到MySQL的过程,包括参数优化和注意事项。

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

一、sqoop 将数据从mysql 导入 hive

导入步骤为:

a.先将mysql数据用sqoop导入到hdfs中

sqoop import 
--connect jdbc:mysql://xxx:3306/xxx \
--username xxx \
--password xxx \
--query 'select columns from table_name where $CONDITIONS' \
--target-dir /user/hdfs/imp \
--delete-target-dir \
--num-mappers 1 \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec \
--fields-terminated-by '\t'

如果导出的数据库是mysql 则可以添加一个 属性 --direct ,数据导出速度会快一点,我在uat环境中测试了此参数,似乎在数据不大的导出时,对速度的影响不太明显。

–direct 使用直接导出模式(优化速度)

若执行成功后,可在hive验证是否导入成功,命令为

dfs -ls /user/hdfs/imp 

b.在hive中创建一张表

drop table if exists default.testDemo;
create table default.testDemo(
    id string,
    name string,
    branch_name string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;

c.将hdfs中的数据导入到hive中

load data inpath '/user/hdfs/imp' into table default.testDemo;

验证是否导入hive成功 :

select * from default.testDemo;

二、sqoop 将数据从hive导出到 mysql

使用 staging-table(临时表)参数,保证数据完全成功导出到临时表(testDemo_tmp)表中,再把testDemo_tmp 中的数据move到目标表(testDemo)。这种方式的前提是:临时表和目标表表结构必须完全一致。

sqoop export \
--connect jdbc:mysql://xxxx:3306/db_base \
--username xxx \    
--password xxx \
--input-fields-terminated-by "\001" \
--input-lines-terminated-by "\n" \
--input-null-string "\\n" \
--input-null-non-string "\\n" \
--staging-table testDemo_tmp \
--clean-staging-table \
--table testDemo \
--export-dir hdfs_url_xxx/hive_table_xxx \
--columns "column,...,columns"

此种方法导出有个弊端,若mysql表有主键约束,就不能反复执行sqoop导出(会因为主键冲突导出失败)。当时我们的优化方案时,在执行sqoop export之前,调一段shell脚本根据导入条件delete一遍。

#!/bin/bash
function clearData(){
    dateStr=`date -d 'yesterday' +%Y%m%d`
    result=`mysql -h$1 -u$2 -p$3 <<EOF 
             use $4;
             delete from testDemo where data_date='${dateStr}';
       exit
EOF`
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值