大数据(二十六):Sqoop的import、export命令和命令脚本

一、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

猜你喜欢

转载自blog.csdn.net/qq_34886352/article/details/83145917