整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

15.9. 深入了解导出功能

hadoop 花牛 9℃ 0评论

Sqoop导出功能的架构与其导入功能的非常相似(参见图15-4)。在执行导出操作之前,Sqoop会根据数据库连接字符串来选择一个导出方法。对于大多数系统来说,Sqoop都会选择JDBC,然后,Sqoop会根据目标表的定义生成一个Java类;这个生成的类能够从文本文件中解析出记录,并能够向表中插入类型合适的值(除了能够读取ResultSet中的列);接着会启动一个MapReduce作业,从HDFS中读取源数据文件,使用生成的类解析出记录,并且执行选定的导出方法。

基于JDBC的导出方法会产生一批INSERT语句,每条语句会向目标表中插入多条记录。在大部分的数据库系统中,通过一条语句插入多条记录的执行效率要髙于多次执行插入单条记录的INSERT语句。多个独立的线程被用于从HDFS读取数据并与数据库进行通信,以确保涉及不同系统的I/o操作能够尽量重叠执行。

blob.png 

图15-4.使用MapReduce并行执行导出

 

对于MySQL数据库来说,Sqoop可以采取使用mysqlimport的直接模式方法。每个map任务会生成一个mysqlimport进程,该进程通过本地文件系统上的一个命名FIFO通道进行通信,数据通过这个FIFO通道流入mysqlimpopt,然后再被写入数据库。

虽然从HDFS读取数据的MapReduce作业大多根据所处理文件的数量和大小来选择并行度(map任务的数量),但Sqoop的导出工具允许用户明确设定任务的数量。由于导出性能会受并行的数据库写入线程数量的影响,所以Sqoop使用CombineFilelnputFormat类将输入文件分组分配给少数几个map任务去执行。

转载请注明:全栈大数据 » 15.9. 深入了解导出功能

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址