图9.1 Sqoop 工作流程示意图
Sqoop 的底层工作机制是MapReduce 任务,也就是将Sqoop 导入或导出命令翻译成MapReduce作业来实现。Sqoop 工具接收到用户提交的Shell 命令或“Java Api”命令后,通过Sqoop 中的任务翻译器将命令转换为一个只有Map 任务的MapReduce Job。这个Job 会访问数据库的元数据信息,通过并行的Map 任务将关系型数据库表中的数据一行一行地读取出来,然后写入Hadoop 中。也可以将Hadoop 中的数据导出到关系型数据库。Sqoop 的架构如图9.2所示。
图9.2 Sqoop 架构图
(1)Sqoop 导入机制
Sqoop 导入(Sqoop Import)就是从关系型数据库中提取出数据并导入HDFS,操作流程如图9.3 所示。
(www.xing528.com)
图9.3 Sqoop 导入流程
使用Sqoop 进行数据的导入导出操作都是使用JDBC 来访问关系型数据库中的数据。在导入数据前,Sqoop 会通过JDBC 检索关系型数据库表的元数据,获得它要操作的表的列以及列的SQL 数据类型信息。这些SQL 类型会被映射成Java 的数据类型,底层的MapReduce 应用将会根据这些Java 类型来保存字段的值。
在导入的过程中,Sqoop 会将输入命令转化为基于Map 任务的MapReduce 作业,而MapReduce 作业会通过InputFormat 以JDBC 的方式从关系型数据库中读取数据。多个Map 任务并发执行,将查询到的数据复制到HDFS 上。
(2)Sqoop 导出机制
Sqoop 导出(Sqoop Export)通常是将数据从HDFS 导出到关系型数据库中,其操作流程如图9.4 所示。
图9.4 Sqoop 导出流程
在进行数据导出前,需要先在关系型数据库中创建好表。Sqoop Export 通常选择JDBC 完成数据导出。首先Sqoop 会获取目标表的元数据;然后根据目标表的结构生成一个Java 类,这个类用于从导出的文本文件中解析记录,并将合适的值插入到目标表中。Sqoop 根据输入命令,启动一个基于Map 任务的MapReduce 作业。多个Map 任务并行执行,从HDFS 中读取数据,使用生成的类解析记录,并使用JDBC 方法将数据插入目标表中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。