目录
一、sqoop基本原理
1.1、何为Sqoop?
Sqoop(SQL-to-Hadoop)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导出到关系型数据库中。
1.2、为什么需要用Sqoop?
我们通常把有价值的数据存储在关系型数据库系统中,以行和列的形式存储数据,以便于用户读取和查询。但是当遇到海量数据时,我们需要把数据提取出来,通过MapReduce对数据进行加工,获得更符合我们需求的数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。为了能够和HDFS系统之外的数据库系统进行数据交互,MapReduce程序需要使用外部API来访问数据,因此我们需要用到Sqoop。
1.3、关系图
1.4、架构图

在 mapreduce 中主要是对 inputformat 和 outputformat 进行定制。
Sqoop工具接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器(Task Translator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝。
二、Sqoop可用命令
| 命令 | 方法 |
|---|---|
| codegen | 生成与数据库记录交互的代码 |
| create-hive-table | 将表定义导入到Hive中 |
| eval | 评估SQL语句并显示结果 |
| export | 导出一个HDFS目录到一个数据库表 |
| help | 可用命令列表 |
| import | 将一个表从数据库导入到HDFS |
| import-all-tables | 从数据库导入表到HDFS |
| import-mainframe | 从大型机服务器导入数据集到HDFS |
| job | 使用已保存的工作 |
| list-databases | 列出服务器上可用的数据库 |
| list-tables | 列出数据库中可用的表 |
| merge | 合并增量导入的结果 |
| metastore | 运行一个独立的Sqoop转移 |
| version | 显示版本信息 |
对于不同的命令,有不同的参数,这里给大家列出来了一部分Sqoop操作时的常用参数,以供参考,需要深入学习的可以参看对应类的源代码,本文目前介绍常用的导入、导出的一些命令。
2.1、公用参数:数据库连接
| 参数 | 说明 |
|---|---|
| --connect | 连接关系型数据库的URL |
| --connection-manager | 指定要使用的连接管理类 |
| --driver | JDBC的driver class |
| --help | 打印帮助信息 |
| --username | 连接数据库的用户名 |
| --password | 连接数据库的密码 |
| --verbose | 在控制台打印出详细信息 |
2.2、公用参数:import
| 参数 | 说明 |
|---|---|
| --enclosed-by | 给字段值前后加上指定的字符 |
| --escaped-by | 对字段中的双引号加转义符 |
| --fields-terminated-by | 设定每个字段是以什么符号作为结束,默认为逗号 |
| --lines-terminated-by | 设定每行记录之间的分隔符,默认是\n |
| --mysql-delimiters | Mysql默认的分隔符设置,字段之间以逗号分隔,行之间以\n分隔,默认转义符是\,字段值以单引号包裹。 |
| --optionally-enclosed-by | 给带有双引号或单引号的字段值前后加上指定字符。 |
2.3、公用参数:export
| 参数 | 说明 |
|---|---|
| --input-enclosed-by | 对字段值前后加上指定字符 |
| --input-escaped-by | 对含有转移符的字段做转义处理 |
| --input-fields-terminated-by | 字段之间的分隔符 |
| --input-lines-terminated-by | 行之间的分隔符 |
| --input-optionally-enclosed-by | 给带有双引号或单引号的字段前后加上指定字符 |


最低0.47元/天 解锁文章
130

被折叠的 条评论
为什么被折叠?



