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','北京');
2、创建mysql接收表
-- 创建接收表
create table demo.export_txt_demo
(
name varchar(10),
address varchar(10)
);
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中的位置
说明:
① 导出表(集群中的),接收表(关系型中的)。都必须先存在,才能通过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北京');
2、创建mysql接收表
-- 创建接收表
create table demo.export_par_demo
(
name varchar(10),
address varchar(10)
);
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'
说明:与textfile导出类似。
① 导出表(集群中的),接收表(关系型中的)。都必须先存在,才能通过sqoop exprot导出。
② 上面示例是导出的parquet类型的表。
③ 使用textfile导出 比 parquet导出速度快。因为parquet是压缩文件,需要先解压在导出。
02-小结
使用sqoop export是不是很简单就将集群数据导出到数据库了呢?大家有想过重复导出的问题没有?其实我们实际工作中,都会遇到需要重复执行一个指令的时候。有想过怎么处理吗?这里是不是可以结合shell脚本来一起使用呢?东西是死的,人是活的。一定要学会灵活运用!
sqoop export更多参数使用:
图片截自sqoop.apache.org