Sqoop迁移Hadoop与RDBMS间的数据2020

本文介绍了Sqoop在Hadoop与RDBMS间的数据迁移方法,涵盖hive到hdfs、hdfs到mysql、mysql到hdfs等多种迁移场景,还提及各场景下的操作步骤、注意事项,如创建对应表结构、配置数据库连接、实现增量导入等。

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

Sqoop迁移Hadoop与RDBMS间的数据

1–hive->hdfs

1、不建议从Hive表到RDBMS表的直接导出,因为当Hive表记录较大时,或者RDBMS有多个分区表时,无法做精细的控制
2、从Hive表导出到HDFS时,可以进一步对数据进行字段筛选字段加工数据过滤操作,使得HDFS上的数据更"接近"或等于将来实际要导入RDBMS表的数据

insert overwrite directory '/kb10/shop1118' 
row format delimited 
fields terminated by ',' 
stored as textfile 
select shopid,shopname,contact.mobile mobile,
concat_ws('',address) address,volumn['2020'] vol2020 
from shop

3、输入如下命令,可查看传输到指定hdfs目录/kb10/shop1118下的数据信息:

hdfs dfs -cat /kb10/shop1118/000000_0

2–hdfs->mysql

1、先在mysql创建表,表结构与原hive表中的结构进行对应;

create table hive_shop(
id int,
name varchar(10),
mobile varchar(20),
address varchar(100),
vol2020 int
);
sqoop export \
--connect jdbc:mysql://single:3306/kb10 \
--username root \
--password kb10 \
--table hive_shop \
--columns id,name,mobile,address,vol2020 \
--fields-terminated-by ',' \
--export-dir '/kb10/shop1118/000000_0'

注:--connect jdbc:mysql://single:3306/kb10 \ 配置数据库连接为mysql数据库;--username root \mysql的用户名;--password kb10 \mysql用户名密码;--table hive_shop \指定上传的表名;--export-dir '/kb10/shop1118/000000_0'hdfs下数据位置信息

3–mysql->hdfs

#–incremental append 只支持新增不支持修改
#–split-by 和-m结合实现numberReduceTasks并行
#–table TABLE_NAME或–query SELECT_COMMAND
#–check-column 和–last-value结合实现增量导入,若last-value为0,指将原mysql表中的数据进行全量导入

sqoop import \
--connect jdbc:mysql://single:3306/kb10mysqltestdb \
--username root \
--password kb10 \
--query "select sid,sname,gender,class_id from student where \$CONDITIONS" \
--target-dir /kb10/student1120 \
--split-by sid \
-m 2 \
--check-column sid \
--incremental append \
--last-value 0

#向原表中插入一条新的数据

insert into student(sid,sname,gender,class_id)values(19,'李白','男',4)
sqoop import \
--connect jdbc:mysql://single:3306/kb10mysqltestdb \
--username root \
--password kb10 \
--query "select sid,sname,gender,class_id from student where \$CONDITIONS" \
--target-dir /kb10/student1120 \
--split-by sid \
-m2 \
--check-column sid \
--incremental append \
--last-value 18

注:第一次全量上传一共18条数据,第二次增量上传时将last-value设置为18,上传成功后hdfs文件系统中新增一个新的文件;
在这里插入图片描述
在这里插入图片描述

4–MySQL –> Hbase

在
1、在hbase的命名空间kb10下创建表Mysql_stu1,列族分别为infoscore

sqoop import \
--connect jdbc:mysql://single:3306/kb10mysqltestdb \
--username root \
--password kb10 \
--table score \
--hbase-table kb10:mysql_stu1 \
--column-family score \
--hbase-row-key sid \
--hbase-bulkload 

注:--hbase-bulkload 不用指定输出路径,自动数据转移;将mysql中kb10mysqltestdb数据库下的score表数据上传至mysql_stu1表的score列族;将原表中的主键sid作为row-key,保证其唯一性;

5-mysql->hive

在hive中先创建表结构与Mysql原表对应结构的表信息

create external table mysql_stucopy(
stuName string,
stuPhone string
)
row format delimited 
fields terminated by ','
stored as textfile;
sqoop import \
--connect jdbc:mysql://single:3306/kb10 \
--username root \
--password kb10 \
--num-mappers 1    \
--table stucopy \
--hive-import \
--hive-table mysql_stucopy \
--fields-terminated-by ',' \
--hive-overwrite \
--delete-target-dir

6–hbase->hive

#利用hbase作为hive的数据源,因为hbase延时低,数据吞吐量大
1、将hive的lib下的hive-hbase-handler-1.1.0-cdh5.14.2.jar拷贝到hbase的lib下

[single lib]# cd /opt/software/hadoop/hive110/lib/
[single lib]# cp hive-hbase-handler-1.1.0-cdh5.14.2.jar /opt/software/hadoop/hbase120/lib/

2、拷贝hbase相关jar到hive中

hbase-client-1.2.0-cdh5.14.2.jar
hbase-hadoop2-compat-1.2.0-cdh5.14.2.jar
hbase-hadoop-compat-1.2.0-cdh5 .14.2.jar
hbase-it-1.2.0-cdh5 .14.2.jar
hbase-server-1.2.0-cdh5.14.2.jar
create external table hbase_score(sid string,student_id int,course_id int,score int)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with SERDEPROPERTIES ("hbase.columns.mapping" = ":key,score:student_id,score:course_id,score:score")
TBLPROPERTIES ("hbase.table.name" = "kb10:mysql_stu1");

7–hive->mysql

mysql中创建与hive对应的表,并在环境变量中配置hcatalog路径

sqoop export \
--connect jdbc:mysql://lichan:3306/ms_dm_intes \
--username root \
--password root \
--table events \
#hive数据库
--hcatalog-database dwd_intes \ 
--hcatalog-table dwd_events \
-m3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值