zoukankan      html  css  js  c++  java
  • 数据迁移工具Sqoop

    Sqoop是什么?    
        sqoop是一个用来将hadoop和rdbms(mysql、oracle、postgres)的数据进行相互迁移的工具;他可以将rdbms的数据导入到hadoop的hdfs中,也可以将hdfs的数据导出到rdbms中。
    Sqoop原理?    
        Sqoop中一大亮点就是可以通过hadoop的mapreduce把数据从rdbms中导入数据到hdfs/把数据从hdfs中导出到rdbms中。sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过
    mapreduce任务来传输数据,从而提供并发特性和容错。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()

  • 相关阅读:
    U1
    std::vector的内存释放
    (转)浅谈PostgreSQL的索引
    PostgreSQL的generate_series函数应用
    linux 里的`反引号
    wireshark抓取本地回环数据包
    linux shell中 if else以及大于、小于、等于逻辑表达式介绍
    c++利用互斥锁实现读写锁
    c++互斥锁的实现
    大小端,"字节序"
  • 原文地址:https://www.cnblogs.com/mengyao/p/4574964.html
Copyright © 2011-2022 走看看