目录
产生背景
当有数据想从RDBMS上抽取到Hadoop时,有以下几种方式:
1)读取一个文件后,加载到Hive的表中
2)通过编写shell脚本来获取RDBMS上的数据,之后通过HDFS shell中的put命令传到HDFS
3)使用MapReduce将RDBMS上的数据写到HDFS,这种也是最常用的方式
当有数据想从Hadoop上导入RDBMS上时,也可以使用MapReduce来操作。
但以上的数据导入/导出存在比较明显的问题:
1、MapReduce编写的繁琐
2、效率低下(比如,当新进一条业务线,就必须得再写一个MapReduce,复用性差)
基于存在的问题,抽取一个框架该怎么设计?
1、RDBMS
需要: drive/username/password/url/database/table/sql等
2、Hadoop
需要: hdfs path/分隔符/mappers数量/reducers数量(reducer的数量决定了有多少个文件输出)
3、需求1:当接入新的业务线后,只需要将新的业务所对应的参数传递给MapReduce即可
a. 使用hadoop jar的方式来提交作业
b. 动态的根据业务线需求来传入参数
4、需求2: 使用操作简洁便利
WebUI + DB Configuration ==> UI/UE
使每条业务线就是一行表记录,全部配置到数据库内,用户只需要在UI操作即可
在上述的问题及愿景下产生了Sqoop框架。
sqoop1与2的区别
sqoop1不兼容sqoop2,sqoop2相比sqoop1改进了以下几个方面:
- 引入了sqoop server,集中化管理connector等
- 多种访问方式: CLI,Web UI,REST API
- 引入了基于角色的安全机制
sqoop1和sqoop2的功能对比
功能 | sqoop1 | sqoop2 |
用于所有主要RDBMS的连接器 | 支持 | 不支持 解决办法: 使用已在以下数据库上执行测试的通用 JDBC 连接器: Microsoft SQL Server 、 PostgreSQL 、 MySQL 和 Oracle 。 此连接器应在任何其它符合 JDBC 要求的数据库上运行。但是,性能可能无法与 Sqoop 中的专用连接器相比 |
k8s安全集成 | 支持 | 不支持 |
数据从RDBMS传输至Hive或HBase | 支持 | 不支持 解决办法: 按照此两步方法操作。 将数据从 RDBMS 导入 HDFS 在 Hive 中使用相应的工具和命令(例如 LOAD DATA 语句),手动将数据载入 Hive 或 HBase |
数据从Hive或HBase传输至RDBMS | 不支持 解决办法: 按照此两步方法操作。 从 Hive 或 HBase 将数据提取至 HDFS (作为文本或 Avro 文件) 使用 Sqoop 将上一步的输出导出至 RDBMS |
不支持 按照与sqoop1相同的解决方法操作 |
sqoop1架构图
sqoop2架构图
sqoop1在使用上通过sqoop客户端直接提交作业,通过CLI控制台的方式访问
sqoop2引入sqoop server,实现集中管理,并可以通过web UI的交互方式来进行访问
sqoop1部署相对比较简单,但