导入数据
在 Sqoop 中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,
HBASE)中传输数据,叫做:导入,即使用 import 关键字。、
RDBMS 到 到 HDFS
1) 确定 Mysql 服务开启正常
2) 在 Mysql 中新建一张表并插入一些数据
$ mysql -uroot -p123456 mysql> create database company; mysql> create table company.emp(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255)); mysql> insert into company.emp(name, sex) values('Thomas', 'Male'); mysql> insert into company.emp(name, sex) values('Catalina', 'FeMale'); |
3) 导入数据
a.全部导入
$ bin/sqoop import \ --connect jdbc:mysql://linux01:3306/company \ --username root \--password 123456 \ --table emp \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" |
$ bin/sqoop import \ --connect jdbc:mysql://linux01:3306/company \ --username root \ --password 123456 \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query 'select name,sex from emp where id <=1 and $CONDITIONS;' |
must contain '$CONDITIONS' in WHERE clause.如果 query 后使用的是双引号,则$CONDITIONS 前必须加转移符,防止 shell识别为自己的变量。--query 选项,不能同时与--table 选项使用
c.导入指定列
$ bin/sqoop import \ --connect jdbc:mysql://linux01:3306/company \ --username root \ --password 123456 \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --columns id,sex \ --table emp |
d .使用sqoop关键字筛选查询导入数据
$ bin/sqoop import \ --connect jdbc:mysql://linux01:3306/company \ --username root \ --password 123456 \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --table emp \ --where "id=1" |
RDBMS 到 到 Hive
$ bin/sqoop import \ --connect jdbc:mysql://linux01:3306/company \ --username root \ --password 123456 \ --table emp \ --num-mappers 1 \ --hive-import \ --fields-terminated-by "\t" \ --hive-overwrite \ --hive-table emp_hive |
该过程分为两步,第一步将数据导入到 HDFS,第二步将导入到 HDFS 的数据迁移到 Hive 仓库,第一步默认的临时目录是/user/用户/表名
导出数据
在 Sqoop 中,“导出”概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群(RDBMS)中传输数据,叫做:导出,即使用 export 关键字。
HIVE/HDFS 到 到 RDBMS
$ bin/sqoop export \ --connect jdbc:mysql://linux01:3306/company \ --username root \ --password 123456 \ --table emp \ --num-mappers 1 \ --export-dir /user/hive/warehouse/emp_hive \ --input-fields-terminated-by "\t" |
脚本打包
使用 opt 格式的文件打包 sqoop 命令,然后执行
创建一个.opt
$ mkdir opt
$ touch opt/job_HDFS2RDBMS.opt
编写 sqoop 脚本
$ vi opt/job_HDFS2RDBMS.opt export --connect jdbc:mysql://linux01:3306/company --username root --password 123456 --table emp --num-mappers 1 --export-dir /user/hive/warehouse/emp_hive --input-fields-terminated-by "\t" |
形参和实参都要分别占用一行