05 Sqoop原理
Sqoop的原理:其实就是将导入导出命令转化为mapreduce
程序来执行,sqoop
在接收到命令后,都要生成mapreduce
程序。
5.1 Sqoop 代码定制
使用sqoop
的代码生成工具可以方便查看到sqoop
所生成的java
代码,并可在此基础之上进行深入定制开发。
5.1.2 代码定制语法
以下是Sqoop
代码生成命令的语法:
$ sqoop-codegen (generic-args) (codegen-args) $ sqoop-codegen (generic-args) (codegen-args)
5.1.2 代码定制案例
示例:以USERDB
数据库中的表emp
来生成Java
代码为例,下面的命令用来生成导入:
$ sqoop-codegen \ --import --connect jdbc:mysql://localhost/userdb \ --username root \ --table emp
如果命令成功执行,那么它就会产生如下的输出:
14/12/23 02:34:40 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5 14/12/23 02:34:41 INFO tool.CodeGenTool: Beginning code generation ………………. 14/12/23 02:34:42 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/local/hadoop Note: /tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/emp.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. 14/12/23 02:34:47 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/emp.jar
验证: 查看输出目录下的文件
$ cd /tmp/sqoop-hadoop/compile/9a300a1f94899df4a9b10f9935ed9f91/ $ ls emp.class emp.jar emp.java
如果想做深入定制导出,则可修改上述代码文件!
06 Sqoop、DataX关系与对比
DataX
之前写过教程,可以参考《DataX教程》
6.1 Sqoop特点
Sqoop主要特点:
- 可以将关系型数据库中的数据导入
hdfs
、hive
或者hbase
等hadoop
组件中,也可将hadoop
组件中的数据导入到关系型数据库中;sqoop
在导入导出数据时,充分采用了map-reduce
计算框架,根据输入条件生成一个map-reduce
作业,在hadoop
集群中运行。采用map-reduce
框架同时在多个节点进行import
或者export
操作,速度比单节点运行多个并行导入导出效率高,同时提供了良好的并发性和容错性;- 支持
insert
、update
模式,可以选择参数,若内容存在就更新,若不存在就插入;- 对国外的主流关系型数据库支持性更好。
6.2 DataX特点
DataX主要特点:
- 异构数据库和文件系统之间的数据交换;
- 采用
Framework
+plugin
架构构建,Framework
处理了缓冲,流控,并发,上下文加载等高速数据交换的大部分技术问题,提供了简单的接口与插件交互,插件仅需实现对数据处理系统的访问;- 数据传输过程在单进程内完成,全内存操作,不读写磁盘,也没有
IPC
;- 开放式的框架,开发者可以在极短的时间开发一个新插件以快速支持新的数据库/文件系统。
6.3 Sqoop与DataX的区别
Sqoop与DataX的区别如下:
sqoop
采用map-reduce
计算框架进行导入导出,而datax
仅仅在运行datax
的单台机器上进行数据的抽取和加载,速度比sqoop
慢了许多;sqoop
只可以在关系型数据库和hadoop
组件之间进行数据迁移,而在hadoop
相关组件之间,比如hive
和hbase
之间就无法使用sqoop
互相导入导出数据,同时在关系型数据库之间,比如mysql
和oracle
之间也无法通过sqoop
导入导出数据。- 与之相反,
datax
能够分别实现关系型数据库hadoop
组件之间、关系型数据库之间、hadoop
组件之间的数据迁移;sqoop
是专门为hadoop
而生,对hadoop
支持度好,而datax
可能会出现不支持高版本hadoop
的现象;sqoop
只支持官方提供的指定几种关系型数据库和hadoop
组件之间的数据交换,而在datax
中,用户只需根据自身需求修改文件,生成相应rpm
包,自行安装之后就可以使用自己定制的插件;
07 文末
本文主要讲解了Sqoop
的概念、安装以及使用,谢谢大家的阅读,本文完!