赞
踩
sqoop是一个分布式计算环境,能够使数据在Hadoop和关系型数据库间进行传输,
为什么说他是分布式计算环境呢?是因为sqoop是将导入或导出命令翻译成 MapReduce 程序来实现。
1、导入数据:(import)
是指从关系型数据库(RDBMS)向Hadoop集群(HDFS,Hive,HBase)中导入数据,使用import关键字
2、导出数据:(export)
是指从Hadoop集群(HDFS,Hive,HBase)向关系型数据库(RDBMS)中导入数据,使用export关键字
mysql 导入 HDFS :
1、全表导入: sqoop import \ --connect jdbc:mysql://single:3306/数据库名 \ 连接mysql中的数据库 --driver com.mysql.jdbc.Driver \ 指定驱动,可以省略 --table 表名 \ 数据库中的表(即将要导入的数据) --username root \ --password root \ --columns “字段1,字段2,...” \ 指定导入的字段,不写默认全部字段 --target-dir /PATH/DIEECTORY/文件名 \ HDFS上的文件路径,刚开始不能存在,若不指定会存在默认路径 --m 3 \ 指定使用多少个mapTask进行数据迁移,数据量大建议使用多个map,默认的map为4个 --delete-target-dir \ 若存在目录则将其删除 --as-sequencefile \ 指定导入时文件存储格式,有两种:分隔符文本和序列文件(delimited text or SequenceFiles) --fields-terminated-by ':' 指定导出后的数据以什么分隔符分割(不指定有默认分隔符',') 2、查询导入: sqoop import \ --connect jdbc:mysql://single:3306/数据库名 \ --username root \ --password root \ --query "select sname,gender from student where 条件 and \$CONDITIONS” \ 如果查询中使用where 则要加 "\$CONDITIONS 固定的格式 --target-dir /PATH/DIEECTORY/文件名 \ HDFS上的文件路径,刚开始不能存在 --split-by coloms \ 以哪个字段分割(分区) --m 3 \ --fields-terminated-by ':' 指定导出后的数据以什么分隔符分割 增量导入:(只导入新增的数据) sqoop import \ --connect jdbc:mysql://single:3306/kb06mysqltestdb \ --username root \ --password root \ --query "select sid,sname,gender,class_id from student where \$CONDITIONS" \ --target-dir /kb10/kb06student \ --split-by gender \ --num-mappers 2 \ 指定使用多少个mapTask进行数据迁移,数据量大建议使用多个map,默认的map为4个 --check-column sid \ 检查指定的列,根据此列判断哪些记录是新数据且需要导入的,列不能是字符相关类型 --incremental append \ 指定增量模式,mode包含两种方式:append和lastmodified append:当表中的记录是以id持续增加导入新的记录的时候,可以使用append模式,--check-column id 用于检查id lastmodified: 表有时候也会执行更新操作,此时可以使用lastmodified导入 --last-value 18 指定某个值,将大于该值的检查列记录导入,以确定仅将新的或者更新后的记录导入新的文件系统 一般情况下: --check-column是数据库中的关键字,以此来判断哪些列是新增数据。 --incremental 增量导入模式分为两种:append和lastmodified。 --last-value 后面接的值一般是上一次导入操作后指定列的最大值,便于Sqoop将此最大值后新增的值导入。
HDFS 导出到 mysql:
当向mysql中导入数据时,如果mysql中不存在表时,mysql并不会自动创建表,所以需要我们自己手动创建
create table ...(表结构)
执行导出命令:
sqoop export \
--connect jdbc:mysql://hadoop101:3306/数据库名 \ mysql中的数据库
--username root \
--password root \
--table 表名 \ 导入到mysql中的表名
--export-dir /PATH/DIEECTORY/文件名 \ hdfs上文件的路径
-m 1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。