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()

  • 相关阅读:
    【LeetCode】145. Binary Tree Postorder Traversal (3 solutions)
    【LeetCode】151. Reverse Words in a String
    【LeetCode】152. Maximum Product Subarray
    【LeetCode】154. Find Minimum in Rotated Sorted Array II (3 solutions)
    如何使用 Chrome 浏览器调试动态加载的 Javascript 脚本
    如何对数据库中的表以及表中的字段进行重命名
    关于 sql server 数据库权限乱七八糟的一些东西
    对 sql server 数据库的备份进行加密
    使用vs的查找功能,简单大概的统计vs中的代码行数
    在 sql server 中,查询 数据库的大小 和 数据库中各表的大小
  • 原文地址:https://www.cnblogs.com/mengyao/p/4574964.html
Copyright © 2011-2022 走看看