一 sqoop简介:
Sqoop 是一款开源的工具,主要用于在 Hadoop(Hive)与传统的数据库(mysql、postgresql…)
间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres 等)中的
数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。
Sqoop 项目开始于 2009 年,最早是作为 Hadoop 的一个第三方模块存在,后来为了让使
用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop 独立成为一个 Apache
项目。
Sqoop2 的最新版本是 1.99.7。请注意,2 与 1 不兼容,且特征不完整,它并不打算用于
生产部署。
二 sqoop原理:
将导入或导出命令翻译成 mapreduce 程序来实现。
在翻译出的 mapreduce 中主要是对 inputformat 和 outputformat 进行定制。
三 导入数据
在 Sqoop 中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,
HBASE)中传输数据,叫做:导入,即使用 import 关键字。
1 mysql----hdfs:
#语法:
sqoop import --connect JDBCURL --table 表名 --username 帐号 --password 密码 --target-dir 导出至HDFS目标 --fields-terminated-by '\t' -m mapper的个数
sqoop import --connect jdbc:mysql://HadoopNode1:3306/test --table emp --username root --password 123456 --target-dir /user/sheng/input/sqoop1/stu --fields-terminated-by '\t' -m 1
2 mysql ----> HDFS的增量导入:
当mysql数据表随着时间的使用,表中原始数据增长,但只想导入增加过的记录至HDFS
在实际的工作当中都是数据库的表中数据不断增加的,比如刚才的consumer表,因此每次导入的时候只想导入增量的部分,不想将表中的数据在重新导入一次(费时费力),即如果表中的数据增加了内容,就向Hadoop中导入一下,如果表中的数据没有增加就不导入—–这就是增量导入。
-
-incremental append:增量导入
-
-check-column:(增量导入时需要指定增量的标准—哪一列作为增量的标准)
-
-last-value:(增量导入时必须指定参考列—–上一次导入的最后一个值,否则表中的数据又会被重新导入一次)
#语法:
sqoop import --connect JDBCURL --table 表名 --username 帐号 --password 密码 --target-dir 导出至HDFS目标 --fields-terminated-by '\t' -m mapper的个数 --incremental append --check-column 以什么字段来标识增加 --last-value 最大记录数
#例:
sqoop import --connect jdbc:mysql://HoodpNode3:3306/test --table student --username root --password 123456 --target-dir /user/sheng/input/sqoop1/stu --fields-terminated-by '\t' -m 1 --incremental append --check-column empno --last-value 7934
3 mysql ----> Hive
语法:
sqoop import --connect JDBCURL --table 表名 --username 帐号 --password 密码 --hive-import --create-hive-table --hive-table 数据库名.表名 --fields-terminated-by '\t' -m 1
sqoop import --connect jdbc:mysql://HadoopNode1:3306/test --table emp --username root --password 123456 --hive-import --create-hive-table --hive-table default.emp --fields-terminated-by '\t' -m 1
4 HDFS ----> mysql:
#语法:
sqoop export --connect JDBCURL --table 表名 --username 帐号 --password 密码 --table 表名 -export-dir HDFS的路径 --input-fields-terminated-by '\t'
#例:
sqoop export --connect jdbc:mysql://HadoopNode1:3306/test --table hdfs_mysql --username root --password 123456 --export-dir /user/sheng/input/sqoop1/stu/part-m-00000
--fields-terminated-by '\t' -m 1
5 HIVE ----> mysql:
#语法:
sqoop export --connect JDBCURL --table 表名 --username 帐号 --password 密码 --table 表名 -export-dir hive数据仓库及表的路径 --input-fields-terminated-by '\t'
#例:
sqoop export --connect jdbc:mysql://HadoopNode1:3306/test --username root --password 123456 --table hive_mysql -export-dir /user/hive/warehouse/emp/emp.txt --input-fields-terminated-by '\t'
--table hive_mysql
--direct