sqoop是一款用于hadoop和关系型数据库之间数据导入导出的工具。你能够经过sqoop把数据从数据库(好比mysql,oracle)导入到hdfs中;也能够把数据从hdfs中导出到关系型数据库中。sqoop经过Hadoop的MapReduce导入导出,所以提供了很高的并行性能以及良好的容错性。java
sqoop适合如下的人群使用:mysql
本文档是依据sqoop v1.4.6翻译的.目前最新的版本是sqoop2,变化有点大。sql
sqoop是Apache软件基金会提供的开源框架。官方网站参考:http://sqoop.apache.org。数据库
想要使用这款工具须要有一下的背景:apache
在你使用sqoop以前,须要先安装hadoop。这个文档是基于Linux环境的,若是你是在windows下使用,须要安装cygwin。windows
经过sqoop,你能够从关系型数据库中导出数据,导入到hdfs中。输入多是数据库的一张表或者查询结果;输出则是数据库表或者结果的导出文件集合。导入进程是并行的,所以输出的结果多是多个文件(最终在hdfs中可能会获得多个文件)。这些文件多是标准的文本文件TextFile(好比,使用逗号作字段间的分割),也多是Avro或者SequeenceFiles的记录文件。bash
sqoop的导入进程是一个自动生成出来的java class,所以它的不少组件均可以自定义,好比导入的格式、文本的格式、到出的格式等等。oracle
sqoop还提供了不少的工具来检查数据库.框架
好比经过sqoop-list-databases能够列出数据库的表视图。ide
[root@hadoop-master bin]# sqoop-list-databases --connect 'jdbc:mysql://localhost:3306/dbname' --username 'name' --password 'passwd' 16/09/29 18:29:11 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6 16/09/29 18:29:11 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 16/09/29 18:29:11 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. test dev xingoo
经过sqoop-list-tables查看表
[root@hadoop-master bin]# sqoop-list-tables --connect 'jdbc:mysql://localhost:3306/dbname' --username 'name' --password 'passwd' 16/09/29 18:26:50 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6 16/09/29 18:26:50 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 16/09/29 18:26:51 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. a b c d
大多数导入进程,代码生成,导出进程均可以自定义。对于数据库,你能够控制到特定的行或者列,读取哪些行,读取哪些列。对于输出的hdfs文件,能够指定特定的分隔符以及转义字符,以及文本的格式化。甚至能够控制生成代码的类和包的名字。
总结的来讲,sqoop是基于mapreduce的一款db和hadoop之间的数据交换工具。后续的文档,将会介绍sqoop在使用时的参数。