码迷,mamicode.com
首页 > 其他好文 > 详细

数据迁移工具Sqoop简介

时间:2015-06-14 13:47:56      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

Sqoop是什么?    
    sqoop是一个用来将hadoop和rdbms(mysql、oracle、postgres)的数据进行相互迁移的工具;他可以将rdbms的数据导入到hadoop的hdfs中,也可以将hdfs的数据导出到rdbms中。
Sqoop原理?    
    Sqoop中一大亮点就是可以通过hadoop的mapreduce把数据从rdbms中导入数据到hdfs/把数据从hdfs中导出到rdbms中。sqoop架构非常简单,其整合了Hive、Hbase和Oozie,
    通过map-reduce任务来传输数据,从而提供并发特性和容错。sqoop主要通过JDBC和关系数据库进行交互。理论上支持JDBC的database都可以使用sqoop和hdfs进行数据交互。    
    但是,只有一小部分经过sqoop官方测试,如下:    
    Database            version             --direct support              connect string matches    
    HSQLDB              1.8.0+              No                            jdbc:hsqldb:*//    
    MySQL               5.0+                Yes                           jdbc:mysql://    
    Oracle              10.2.0+             No                            jdbc:oracle:*//    
    PostgreSQL          8.3+                Yes                           (import only) jdbc:postgresql://
    较老的版本有可能也被支持,但未经过测试。出于性能考虑,sqoop提供不同于JDBC的快速存取数据的机制,可以通过--direct使用。
Sqoop工作流程
1.读取要导入数据的表结构,生成运行类,默认是QueryResult,打成jar包,然后提交给Hadoop
2.设置好job,主要也就是设置好的各个参数
3.这里就由Hadoop来执行MapReduce来执行Import命令了,
      1)首先要对数据进行切分,也就是DataSplit
          DataDrivenDBInputFormat.getSplits(JobContext job)
      2)切分好范围后,写入范围,以便读取
       DataDrivenDBInputFormat.write(DataOutput output) 这里是lowerBoundQuery and  upperBoundQuery
       3)读取以上2)写入的范围
          DataDrivenDBInputFormat.readFields(DataInput input)
4)然后创建RecordReader从数据库中读取数据
DataDrivenDBInputFormat.createRecordReader(InputSplit split,TaskAttemptContext context)
5)创建Map
TextImportMapper.setup(Context context)
6)RecordReader一行一行从关系型数据库中读取数据,设置好Map的Key和Value,交给Map
DBRecordReader.nextKeyValue()
7)运行map
TextImportMapper.map(LongWritable key, SqoopRecord val, Context context)
最后生成的Key是行数据,由QueryResult生成,Value是NullWritable.get()

 

数据迁移工具Sqoop简介

标签:

原文地址:http://www.cnblogs.com/mengyao/p/4574964.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!