zoukankan      html  css  js  c++  java
  • sqoop

    版权声明:本文为yunshuxueyuan原创文章。
    如需转载请标明出处: http://www.cnblogs.com/sxt-zkys/
    QQ技术交流群:299142667

    sqoop

    Apache Sqoop是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具。它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实现了容错。

    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 help命令查看sqoop帮助

    import(将关系数据库迁移到HDFS上)

    [例1]  将mysql中的sds表导入HDFS中

    sqoop import
    
    --connectjdbc:mysql://node01/test
    
    --username root -password passwd
    
    --table sds

    [例2]  将mysql中的sds,指定的列表导入HDFS中

    sqoop import
    
    --connect jdbc:mysql://node01/test
    
    --username root -password 123
    
    --table sds
    
    --columns "SD_ID,CD_ID,LOCATION"

     [例3] 将整个数据库中的表全部导入到hdfs上

    import-all-tables命令

    sqoop import-all-tables
    
    --connect jdbc:mysql://node01/test
    
    --username root -password 123
    

      

    [例4] 指定导出文件为SequenceFiles,文件命名为com.ctrip.sds

    sqoop import
    
    --connect jdbc:mysql://node01/test
    
    --username root -password 123
    
    --table psn
    
    --class-name com.ctrip.psn --as-sequencefile
    

      

    [例5] 导入文本时可以指定分隔符

    sqoop import
    
    --connect jdbc:mysql://node01/test
    
    --username root -password 123
    
    --table psn
    
    --fields-terminated-by '	'
    
    --lines-terminated-by '
    '
    
    --optionally-enclosed-by '"'
    

      

     [例6] 可以指定过滤条件

    sqoop import
    
    --connect jdbc:mysql://node01/test
    
    --username root -password passwd
    
    --table sds
    
    --where "sd_id > 100"
    

      

    --m设置并行数据,即map的数据,决定文件的个数。

    --target-dir设置hdfs上的目标目录。

    export(将hdfs上的数据导入到关系数据库中)

    [例一]  将HDFS中数据导入到mysql中的sds表

    sqoop export
    
    --connect jdbc:mysql://node01/test
    
    --username root -password 123 
    
    --table psn 
    
    --export-dir /user/root/psn
    

    mysql数据库的sds表需要先把表结构创建出来,否则export操作会直接失败。

    [例二]  将关系数据库表导入到hive表中

    create-hive-table 

    sqoop create-hive-table
    
    --connect jdbc:mysql://node01/test
    
    --username root --password 123
    
    --table psn
    
    --hive-table sds_bak
    

      

    默认sds_bak是在default数据库的。

    这一步需要依赖HCatalog,需要先安装HCatalog,否则报错。

    list-databases列出一台server上可用的数据库

    sqoop list-databases
    
    --connect jdbc:mysql://node01/
    
    --username root -password 123
    

      

    list-tables列出一个数据库中的表

    sqoop list-tables
    
    --connect jdbc:mysql://node01/test
    
    --username root -password 123
    

      

    codegen:

    将关系数据库表映射为一个java文件、java class类相关的jar包

    sqoop codegen
    
    --connect jdbc:mysql://node01/test
    
    --username root -password 123
    
    --table psn
    

      

    eval用户可以很快的使用sql语句对数据库进行操作。

    sqoop eval
    
    --connect jdbc:mysql://node01/test 
    
    --username root -password 123 
    
    --query "SELECT * FROM psn LIMIT 10"
    

      

    job用来生成sqoop任务。

    sqoop job
    
    --create myjob
    
    -- import
    
    --connect jdbc:mysql://node01/test
    
     --username root -password 123 
    
    --table psn -m 1
    

      

    sqoop job -exec myjob
    

      

    metastore 配置sqoop job的共享元数据信息,这样多个用户定义和执行sqoop job在这一metastore中。

    启动:sqoop metastore

    关闭:sqoop metastore –shutdown

    存储位置: conf/sqoop-site.xml/sqoop.metastore.server.location

    [补充]

    由于sqoop是通过map完成数据的导入,各个map过程是独立的,没有事物的概念,可能会有部分map数据导入失败的情况。为了解决这一问题,sqoop中有一个折中的办法,即是指定中间staging表,成功后再由中间表导入到结果表。

    --staging-table <staging-table-name>staging表结构也是需要提前创建出来

    sqoop export
    
    --connect jdbc:mysql://192.168.81.176/sqoop
    
    --username root -password passwd
    
    --table sds
    
    --export-dir /user/guojian/sds
    
    --staging-table sds_tmp
    

      

    [注]在使用 –direct,--update-key或者--call存储过程的选项时,staging中间表是不可用的。

    验证结果:

    (1)数据会首先写到sds_tmp表,导入操作成功后,再由sds_tmp表导入到sds结果表中,同时会清除sds_tmp表。

    (2)如果有map失败,则成功的map会将数据写入tmp表,export任务失败,同时tmp表的数据会被保留。

    (3)如果tmp中已有数据,则此export操作会直接失败,

    --clear-staging-table 指定在执行前清除中间表。

    版权声明:本文为yunshuxueyuan原创文章。
    如需转载请标明出处: http://www.cnblogs.com/sxt-zkys/
    QQ技术交流群:299142667

  • 相关阅读:
    数据库的操作封装成类
    简单搭建WEB框架及原理
    界面小项目之小米商品排列
    界面小项目之小米登录注册
    kubernetes版本1.7.6对比1.13.0
    docker将宿主机文件复制到容器内
    常用git命令
    centos7常用命令汇总
    openstack相关的命令总结
    kubernetes常用命令2
  • 原文地址:https://www.cnblogs.com/sxt-zkys/p/7428121.html
Copyright © 2011-2022 走看看