01-集群数据导出至关系型

sqoop export指令的作用就是,将集群HDFS中数据导出至关系型数据库中。

我们这还是以mysql为例。

 

  • 一、将集群textfile类型表导出到mysql中。

1、创建集群测试表和数据

-- hive创建一张表,默认是textfile类型的
create table if not exists dc_dev.export_txt_demo
(
name    string,
address string
);
-- 创建测试数据
insert into dc_dev.export_txt_demo values('测试1','上海');
insert into dc_dev.export_txt_demo values('测试2','北京');

HIVE show tables命令的作用 hive export命令_mysql

HIVE show tables命令的作用 hive export命令_mysql_02

 

2、创建mysql接收表

-- 创建接收表
create table demo.export_txt_demo
(
name varchar(10),
address varchar(10)
);

HIVE show tables命令的作用 hive export命令_大数据_03

 

3、在集群中运行sqoop export 指令导出集群数据

sqoop export --connect 'jdbc:mysql://10.100.157.28:3306/demo' \
--username 'root' \
--password 'jfdev123' \
--table 'export_txt_demo' \
--export-dir  /user/hive/warehouse//dc_dev.db/export_txt_demo \
--input-fields-terminated-by '\001' \
--input-null-string '\\N' \
--input-null-non-string '\\N'

参数说明:
--connect '数据库连接' \
--username '数据库账号' \
--password '数据库密码' \
--table '数据库表名' \
--export-dir  集群hdfs中导出的数据目录 \
--input-fields-terminated-by '分隔符,textfile类型默认\001' \
--input-null-string '空值处理:\\N' \
--input-null-non-string '空值处理:\\N'

## “--export-dir” 参数是数据在hdfs中的路径
## 可在hive中,通过 show create 表(即:show create dc_dev.export_txt_demo)
## 即可知道表数据在hdfs中的位置

HIVE show tables命令的作用 hive export命令_sqoop_04

HIVE show tables命令的作用 hive export命令_mysql_05

说明:

① 导出表(集群中的),接收表(关系型中的)。都必须先存在,才能通过sqoop exprot导出。

② 上面示例是导出的textfile类型的表。

 

 

  • 二、将集群parquet类型表导出到mysql中。

1、集群中创建parquet测试表

-- hive创建一张表parquet类型的表
create table if not exists dc_dev.export_par_demo
(
name    string,
address string
) STORED AS parquet; -- 观察这里制定建表类型
-- 创建测试数据
insert into dc_dev.export_par_demo values('par测试1','par上海');
insert into dc_dev.export_par_demo values('par测试2','par北京');

HIVE show tables命令的作用 hive export命令_大数据_06

HIVE show tables命令的作用 hive export命令_大数据_07

 

2、创建mysql接收表

-- 创建接收表
create table demo.export_par_demo
(
name varchar(10),
address varchar(10)
);

HIVE show tables命令的作用 hive export命令_大数据_08

 

3、在集群中运行sqoop export 指令导出集群数据

sqoop export --connect 'jdbc:mysql://10.100.157.28:3306/demo' \
--username 'root' \
--password 'jfdev123' \
--table 'export_par_demo' \
--hcatalog-database dc_dev \
--hcatalog-table export_par_demo \
--num-mappers 1 \
--input-null-string '\\N' \
--input-null-non-string '\\N'

参数说明:
--connect '数据库连接' \
--username '数据库账号' \
--password '数据库密码' \
--table '数据库表名' \
--hcatalog-database 'hive库名' \
--hcatalog-table 'hive表名' \
--num-mappers '默认启动MapReduce数量:1个,不宜太多数据库顶不住' \
--input-null-string '空值处理:\\N' \
--input-null-non-string '空值处理:\\N'

HIVE show tables命令的作用 hive export命令_大数据_09

HIVE show tables命令的作用 hive export命令_sqoop_10

说明:与textfile导出类似。

① 导出表(集群中的),接收表(关系型中的)。都必须先存在,才能通过sqoop exprot导出。

② 上面示例是导出的parquet类型的表。

③ 使用textfile导出 比 parquet导出速度快。因为parquet是压缩文件,需要先解压在导出

 

 

02-小结

使用sqoop export是不是很简单就将集群数据导出到数据库了呢?大家有想过重复导出的问题没有?其实我们实际工作中,都会遇到需要重复执行一个指令的时候。有想过怎么处理吗?这里是不是可以结合shell脚本来一起使用呢?东西是死的,人是活的。一定要学会灵活运用!

 

sqoop export更多参数使用:

HIVE show tables命令的作用 hive export命令_mysql_11

图片截自sqoop.apache.org