1 简介及原理
1.1简介
Sqoop是Apache旗下的一款“hadoop和关系型数据库服务器之间传送数据”的工具。
导入数据:MySQL、Oracle导入数据到hadoop的hdfs、hive、HBASE等数据存储系统。
导出数据:从hadoop的文件系统中导出数据到关系型数据库中。
1.2 sqoop 导入导出原理
参考自Sqoop的介绍(导入导出原理)。
1.2.1 数据导入![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a905d182245d14a8dc903391f5313290.png)
- sqoop会通过jdbc来获取需要的数据库的元数据信息,例如:导入的表的列名,数据类型。
- 这些数据库的数据类型会被映射成为java的数据类型,根据这些信息,sqoop会生成一个与表名相同的类用来完成序列化工作,保存表中的每一行记录。
- sqoop开启MapReduce作业
- 启动的作业在input的过程中,会通过jdbc读取数据表中的内容,这时,会使用sqoop生成的类进行序列化。
- 最后将这些记录写到hdfs上,在写入hdfs的过程中,同样会使用sqoop生成的类进行反序列化。
1.2.2 数据导出
- 首先sqoop通过jdbc访问关系型数据库,得到需要导出的数据的元数据信息。
- 根据获取的元数据信息,sqoop生成一个java类,用来进行数据的传输载体,该类必须实现序列化。
- 启动MapReduce程序。
- sqoop利用生成的这个java类,并行的从hdfs中读取数据。
- 每一个map作业都会根据读取到的导出表的元数据信息和读取到的数据,生成一批insert语句然后多个 map 作业会并行的向数据库 mysql 中插入数据。
总结:数据是从hdfs中并发进行读取,也是并发进行写入,那并行的读取时依赖hdfs的性能,而并行的写入到MySQL,就要依赖MySQL的性能。
1.3 Sqoop技术核心
-
生成mapreduce
sqoop接收用户的请求,通过解析请求,生成mapreduce代码,并打包,将打好的jar包提交给hadoop执行。生成mapreduce代码是sqoop的核心技术,也是数据传输的关键。 -
作业创建
主要用于定时任务,定时导入导出新数据的sqoop作业。例如增量导入。 -
数据映射
关系型数据库字段是有类型的,数据映射可以自动对数据库字段类型和hadoop的类型进行对应。当然也可以自定义类型映射。 -
并行控制
采用sqoop集群或者多个任务并行进行数据的导入导出工作。主要在大型导入导出任务中,为了提升性能使用的。
2 Sqoop导入
。。。太简单了,先参考视频吧:Sqoop入门实践教程