您的位置:首页 > 运维架构

Sqoop 简单的数据导入/导出、一些常用命令及参数

2018-11-28 21:33 363 查看

一、数据导入:

在Sqoop中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,HBASE)中传输数据,使用 import 关键字。

1)RDBMS 到 HDFS
①确定Mysql 服务开启正常
②在Mysql 中新建一张表并插入一些数据

mysql -uroot -proot
create databese company;
use company;
create table staff(id int(4)primary key not null auto_increment,
name varchar(255),sex varchar(255));
insert into staff(name,sex)valus  'zhangsan','nan');
insert into staff(name,sex)valus  'lisi','nv');

③导入数据
全部导入:

bin/sqoop import --connect jdbc:mysql://192.168.199.130:3306/company
--username root --password root --table staff --target-dir /usr/company
--delete-target-dir --num-mappers 1 --fields-terminated-by "\t"

查询导入:

bin/sqoop import --connect jdbc:mysql://192.168.199.130: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;'

提示:如果 query 后使用的是双引号,则$condition 前必须加转移符,防止 shell 识别为自己的变量。–query 选项,不能同时与 --table 选项使用。

导入指定列:

bin/sqoop import --connect jdbc:mysql://192.168.199.130: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 中如果涉及到多列,用逗号分割,分隔时不要添加空格。

使用sqoop关键字筛选查询导入数据:

bin/sqoop import --connect jdbc:mysql://192.168.199.130: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=porperty.value 这样的方式加入执行任务的参数,多个参数用空格隔开。

2)RDBMS 到 HIVE

bin/sqoop import --connect jdbc:mysql://192.168.199.130:3306/company
--username root --password root --table staff --num-mappers 1
--hive-import --fields-terminated-by "\t" --hive-overwrite --hive-table staff_hive

该过程分为两步:
第一步将数据导入到 HDFS,默认的临时目录是/user/admin/表名。
第二步将导入到HDFS 的数据迁移到 Hive仓库。

二、数据导出

在Sqoop中,“导出”指:从大数据集群(HDFS、HIVE、HBASE)向非大数据集群(RDBMS)中传输数据,用export关键字。

hive/hdfs 到 RDBMS

bin/sqoop export --connect jdbc:mysql://192.168.199.130:3306/company
--username root --password root --table staff --num-mappers 1
--export-dir /user/hive/warehouse/staff_hive --input-fields-terminated-by "\t"

提示:Mysql 中如果表不存在,不会自动创建。 数据是追加。

三、简单的脚本打包
使用 opt 格式的文件打包 sqoop 命令,然后执行。
1)创建一个 .opt文件

mkdir opt
touch opt/job_HDFS2RDBMS.opt

2)编写 sqoop 脚本 vi opt/job_HDFS2RDBMS.opt

export
--connect jdbc:mysql://192.168.199.130: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 --options-file opt/job_HDFS2RDBMS.opt

四、常用命令及参数
常用命令:

import 	将数据导入到集群
export 	将集群数据导出
codegen 	获取数据库中某张表数据生成 Java 并打包 Jar
create-hive-table 	创建 hive 表
eval 	查看 SQL 执行结果
import-all-tables 	导入某个数据库下所有表到 hdfs 中
job 	用来生成一个 sqoop 的任务,生成后,该任务并不执行,除非使用命令执行该任务。
list-databases 	列出所有数据库名
list-tables 	列出某个数据库下所有表
merge 	将hdfs 中不同目录下面的数据合在一起,并存放在指定的目录中
metastore 	记录 sqoop job 的元书库信息
help 	打印 sqoop 帮助信息
version 	打印 sqoop 版本信息

公用参数:

--connect 	连接关系型数据库的 URL
--connection-mannger 	指定要使用的连接管理类
--driver 	JDBC 的 driver class
--help 	打印帮助信息
--username 	连接数据库的用户名
--password 	连接数据库的密码
--verbose 	在控制台打印出详细信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: