Sqoop详解
-
Sqoop介绍
Sqoop是在hadoop和数据库之间传输大量数据的工具
原理:将导入导出命令翻译成MR成功徐来实现,在翻译出的MR中主要是对inputformat和outputformat进行定制。 -
安装与配置
1)解压安装 (这里以sqoop1.4.7为例)
2)修改配置文件
重命名文件mv sqoop-env-template.sh sqoop-env.sh
修改 sqoop-env.shexport HADOOP_COMMON_HOME=/home/admin/modules/hadoop-2.7.2 export HADOOP_MAPRED_HOME=/home/admin/modules/hadoop-2.7.2 export HIVE_HOME=/home/admin/modules/apache-hive-1.2.2-bin
3)拷贝jdbc驱动
拷贝 jdbc 驱动到 sqoop 的 lib 目录下
4)验证sqoop
bin/sqoop version 出现Sqoop 1.4.7(警告可以暂时忽略)算成功
5)测试sqoop是否能连接数据库
bin/sqoop list-databases --connect jdbc://mysql://mysqlName:3306/ --username root --password 123456 -
sqoop的使用案例
1)导入数据
在sqoop中导入是指从非大数据集群(RDMS)向大数据集群(HDFS,HIVE,HBASE)中传入数据,即使用import关键字
(1)RDMS到HDFS第一步:在mysql中新建一张表,并插入一些数据 $ mysql -uroot -p123456 mysql> create database company; mysql> create table company.staff(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255)); mysql> insert into company.staff(name, sex) values('Thomas', 'Male'); mysql> insert into company.staff(name, sex) values('Catalina', 'FeMale'); 第二步:导入数据 (1)全部导入 bin/sqoop import \ --connect jdbc:mysql://hadoop01:3306/company \ --username root \ --password 123456 \ --table staff \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1\ --fields-terminated-by "\t" (2)查询导入 bin/sqoop import \ --connect jdbc:mysql://hadoop01:33-6/company \ --username root \ --password 123456 \ --target-dir /hadoop/testdata/company \ --delete-target-dir \ --num-mappers 1\ --fields-terminated-by "\t" \ --query 'select name,sex from staff where id <= 1 and $CONDITIONS;' 提示1:必须在where后面加‘$CONDITIONS’,如果query后使用的是双引号,则$CONDITIONS前必须加转义符。 提示2:--query选项不能同时与--table选项使用 (3)导入指定列 bin/sqoop import \ --connect jdbc:mysql://hadoop01:3306/company \ --username root \ --password 123456 \ --target-dir /hadoop/textdata/company \ --delete-target-dir \ --num-mappers 1\ --fields-terminated-by "\t" --columns id,sex \ --table staff 提示:columns中如果有多列要用逗号分隔,中间不要添加空格 (4)使用sqoop关键字筛选查询导入数据where 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 staff \ --where "id=1" 提示:sqoop可以使用sqoop import -D property.name=property.value这样的方式加入执行任务的参数,多个参数用空格隔开。
(2)RDBMS到HIVE
bin/sqoop import \ --connect jdbc:mysql://linux01:3306/company \ --username root \ --password 123456 \ --table staff \ --num-mappers 1 \ --hive-import \ --fields-terminated-by "\t" \ --hive-overwrite \ --hive-table staff_hive 提示:该过程分为两步,第一步是将数据导入到HDFS,第二步将导入到hdfs的数据迁移到hive仓库,第一步默认的临时目录是/user/admin/表名
2)导出数据
在sqoop中,导出是指从hdfs、hive、hbase向RDBMS中传输数据使用export
(1)hive/hdfs 到RDBMSbin/sqoop export \ --connect jdbc:mysql://hadoop01:3306/company \ --username root \ --password 123456 \ --table staff \ --num-mappers 1 \ --export-dir /hive/warehouse/staff_hive \ --input-fields-terminated-by "\t" 提示:msyql中表不存在不会自动创建
3)脚本打包
使用过opt格式的文件打包sqoop命令,然后执行(1)创建一个.opt文件 touch opt/job_hdfs2drdbms.opt (2)编写sqoop脚本 export --connect jdbc:mysql://hadoop01:3306/company --username root --password 123456 --table staff --num-mappers 1 --export-dir /hive/warehouse/staff_hive --input-fields-terminated-by "\t" (3)执行脚本 bin/sqoop --options-file opt/job_hdfs2rdbms.opt
-
sqoop的常用命令和参数
1)常用命令列举
import ImportTool 将数据导入到集群
export ExportTool 将集群数据导出
codegen CodeGenTool 获取数据库中某张表数据生成java并打包jar
create-hive-table CreateHiveTableTool 创建hive表
eval EvalSqlToop 查看SQL执行结果
import-all-tables ImportAllTablesTool 导出某个数据库下所有表到hdfs
job JobTool 生成一个个sqoop的任务
list-databases 列出所有数据库名
list-tables 列出某个数据库下所有表
merge 将hdfs中不同目录下面的数据合在一起,并存放在指定目录中
metastore 记录sqoopjob的元数据信息
2)命令&参数详解
公用参数,就是大多数命令都支持的参数
(1)公用参数:数据库连接
–connect、–connection-manager指定要使用的连接管理类
–driver jdbc的driver class
–password --username连接数据库的用户名和密码
–verbose 在控制台打印出详细信息
(2)公用参数:import
–enclosed-by 给字段值前后加上指定的值
–escaped-by 对字段中的双引号加转义符
–fields-terminated-by设定某个字段是以扫描符号作为结束,默认是逗号
–lines-terminated-by设定每行之间的分隔符,默认是"\n"
(3)公用参数export
–input-enclosed-by 对字段值前后加上指定字符
–input-dscaped-by 对含有转义符的字段做转义处理
–input-fields-terminated-by字段自建的分隔符
–input-lines-terminated-by行之间的分隔符
(4)公用参数 hive
–hive-delims-replacement 用自定义的字符串替换掉数据中的\r\n等字符
–hive-drop-import-delims 再导入数据到hive时,去掉数据中\r\n等字符
–map-column-hive 生成hive表时,可以更改生成字段的数据类型给
–hive-partition-key创建分区,后面直接跟分区名,分区字段默认string
–hive-partition-value导入数据时,指定某个分区的值
–hive-home hive的安装目录,可以覆盖之前的默认配置的目录
–hive-import将数据从关系数据库中导入hive表中
–hive-overwrite 覆盖掉hive表中已经存在的数据
–create-hive-table默认是false,如果目标存在,创建任务失败
–hive-table 后面接要创建的hive表,默认使用过Mysql的表名
–table指定关系数据库的表名
上一篇: mysql把主键定义为自动增长标识符类型
下一篇: mysql心得分享:存储过程