Sqoop 数据迁移工具 --6.Sqoop 导入导出的原理剖析

1、Sqoop 导入原理 

从上面的演示例子中,我们大致能得出一个结论,sqoop 工具是通过 MapReduce 进行导入 作业的。总体来说,是把关系型数据库中的某张表的一行行记录都写入到 hdfs 

下面给大家奉上一张原理图: 

Sqoop 数据迁移工具 --6.Sqoop 导入导出的原理剖析

上面这张图大致解释了 sqoop 在进行数据导入工作的大致流程,下面我们用文字来详细描述 一下: 

1、第一步,Sqoop 会通过 JDBC 来获取所需要的数据库元数据,例如,导入表的列名,数据 类型等。 

2、第二步,这些数据库的数据类型(varchar, number 等)会被映射成 Java 的数据类型(String, int 等),根据这些信息,Sqoop 会生成一个与表名同名的类用来完成序列化工作,保存表中的每一行记录。 

3、第三步,Sqoop 启动 MapReducer 作业 
 
4、第四步,启动的作业在 input 的过程中,会通过 JDBC 读取数据表中的内容,这时,会使 用 Sqoop 生成的类进行反序列化操作 
 
5、第五步,最后将这些记录写到 HDFS 中,在写入到 HDFS 的过程中,同样会使用 Sqoop 生 成的类进行反序列化 

2、Sqoop 导出原理 

Sqoop 进行数据导出,总体也是基于 mapreduce 任务。 
 
下面先看图:

Sqoop 数据迁移工具 --6.Sqoop 导入导出的原理剖析 

详细文字描述: 
 
1、 第一步,sqoop 依然会通过 JDBC 访问关系型数据库,得到需要导出数据的元数据信息 
 
2、 第二步,根据获取到的元数据的信息,sqoop 生成一个 Java 类,用来进行数据的传输载 体。该类必须实现序列化和反序列化 
 
3、 第三步,启动 mapreduce 作业 

4、 第四步,sqoop 利用生成的这个 java 类,并行的从 hdfs 中读取数据 
 
5、 第五步,每个 map 作业都会根据读取到的导出表的元数据信息和读取到的数据,生成一 批 insert 语句,然后多个 map 作业会并行的向数据库 mysql 中插入数据 
 
所以,数据是从 hdfs 中并行的进行读取,也是并行的进入写入,那并行的读取是依赖 hdfs 的性能,而并行的写入到 mysql 中,那就要依赖于 mysql 的写入性能嘞