sqoop数据导出导入

一 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 
发布了133 篇原创文章 · 获赞 53 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43599377/article/details/104516046