一、sqoop导入命令(import)
在Sqoop中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,HBASE)中传输数据。
1.在MySql中新建一张表并插入一些数据
create database company;
create table company.staff(id int(4) primary key not null auto_increment,name varchar(255),sex varchar(255));
insert into company.staff(name,sex) values('Thomas','Male');
insert into company.staff(name,sex) values('Catalina','FeMale');
2.导入数据(全部导入)
bin/sqoop import \
--connect jdbc:mysql://linux01:3306/company \
--username root \
--password root \
--table staff \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"
3.导入数据(查询导入)
bin/sqoop import \
--connect jdbc:mysql://linux01:3306/company \
--username root \
--password root \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--query 'select name,sex from staff where id <= 1 and $CONDITIONS;'
-
必须在Where之中添加$CONDITIONS
-
如果query 后面使用的是双引号,则$CONDITIONS前必须加转译符,防止shell识别为自己的变量
-
--query选项,不能同时与--table选项使用
4.导入数据(导入指定列)
bin/sqoop import \
--connect jdbc:mysql://linux01:3306/company \
--username root \
--password root \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--columns id,sex \
--table staff
-
columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格
5.使用sqoop关键字筛选差选导入数据
bin/sqoop import \
--connect jdbc:mysql://linux01:3306/company \
--username root \
--password root \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--table staff
--where "id=1"
-
在Sqoop中可以使用sqoop import -D property.name=property.value这样的方式加入执行任务的参数,多个参数用空格隔开。
6.RDBMS到Hive
bin/sqoop import \
--connect jdbc:mysql://linux01:3306/company \
--username root \
--password root \
--table staff \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table staff_hive
-
该过程分为两步,第一步将数据导入到HDFS,第二部将导入到HDFS的数据迁移到Hive仓库
-
第一步默认的临时目录是/user/admin/表名
二、导出数据
在Sqoop中,从大数据集群(HDFS,HIVE,HBASE)向非大数据集群(RDBMS)中传输数据,叫做:导出,使用export关键字。
bin/sqoop export \
--connect jdbc:mysql://linux01:3306/company \
--username root \
--password root \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--input-fields-terminated-by "\t"
-
Mysql中如果表不存在,不会自动创建
三、编写命令脚本
Sqoop支持将命令预先写入文本文件中,通过执行该脚本,来执行脚本中的命令。脚本文件需要以.opt作为后缀名
1.新建脚本
vim opt/job_HDFS2RDBMS.opt
2.编写sqoop脚本
export
-connect
jdbc:mysql://linux01:3306/company
--username
root
--password
root
--table
staff
--num-mappers
1
--export-dir
/user/hive/warehouse/staff_hive
--input-fields-terminated-by
"\t"
-
一行只能有一个命令或者参数
-
参数和参数值需要分成两行来写,中间不可以有任何没用的行数
3.执行脚本
bin/sqoop --option-file opt/job_HDFS2RDBMS.opt