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

15.9深入了解导出功能

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

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

image.png

图15-4.使用MapReduce并行执行导出 对于MySQL数据库来说,Sqoop可以采取使用mysqlimpor't的直接模式 方法。每个map任务会生成一个mysqlimport进程,该进程通过本地文件 系统上的一个命名FIFO通道进行通信,数据通过这个FIFO通道流人 mysqlimpopt,然后再被写入数据库。 虽然从HDFS读取数据的MapReduce作业大多根据所处理文件的数量和大 小来选择并行度(map任务的数量),但Sqoop的导出工具允许用户明确设定 任务的数量。由于导出性能会受并行的数据库写入线程数量的影响,所以 Sqoop使用CombineFilelnputFormat类将输入文件分组分配给少数几个 map任务去执行。

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

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

表情

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

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