zoukankan      html  css  js  c++  java
  • SQOOP的使用方法

    Sqoop是个命令行工具,用来在Hadoop和rdbms之间传输数据。

    以Hadoop的角度看待数据流向,从rdbms往Hadoop是导入用sqoop import命令,反之从hadoop往rdbms下发数据用sqoop export命令

    以oracle hive为例子,命令举例:

    sqoop import -D oraoop.jdbc.url.verbatim=true --hive-import --hive-overwrite --connect jdbc:oracle:thin:@192.168.1.10:1521:orcl --username usernamexx --password passwdxx --table WH_PRG.TB_JSQ_PRD_GRID_MDF -hive-database test --hive-table hivename  --fetch-size 5000 --hive-drop-import-delims --null-string '\N' --null-non-string '\N' -m 1
    
    sqoop export -D oraoop.jdbc.url.verbatim=true --connect "jdbc:oracle:thin:@192.168.1.10:1521:orcl" --username usernamexx --password passwdxx --table  ORACLETABLE  --export-dir /user/hive/warehouse/test.db/tablename/* --input-fields-terminated-by '01' --input-lines-terminated-by '
    ' --input-null-string '\N' --input-null-non-string '\N'   -m 1
    

    注意:

    oracle表名大写,hive表名保持和创建表时候的大小写,建表是大写,这儿就大写,建表时候小写,这儿就小写  

    -m 1表示并行度,根据oracle库的性能自行决定

    导入的时候是默认覆盖,如果hive中有同名表,会自动删除重建

    导出的时候是追加,要先在oracle测建好空表,而且再次导入时候要把原来的内容清空,否则因为是追加数据会产生重复数据,字段顺序要对齐,否则可能产生列的错位

    附1:Sqoop导入常规参数意思

    参数 参数名称
    others     插件命令附加参数
    target-dir     导入HDFS的目标路径
    delete-target-dir    如果指定目录存在,则先删除掉
    fetch-size    从数据库中批量读取记录数
    split-by    按照指定列去分割数据
    columns        从表中导出指定的一组列的数据
    null-string    字符串类型null时转义为
    null-non-string    非字符串类型null时转义为
    query    查询语句
    where    查询条件
    direct    使用直接导出模式(优化速度)
    warehouse-dir    HDFS存放表的根路径
    append        将数据追加到HDFS上一个已存在的数据集上
    as-avrodatafile    将数据导入到Avro
    as-sequencefile    将数据导入到SequenceFile
    as-textfile    将数据导入到普通文本文件(默认)
    boundary-query    边界查询,用于创建分片(InputSplit)
    direct-split-size    分割输入stream的字节大小(在直接导入模式下)
    inline-lob-limit    设置内联的LOB对象的大小
    compress        启用压缩
    compression-codec    指定Hadoop的codec方式(默认gzip)
    incremental        mode模式
    last-value        指定自从上次导入后列的最大值
    connect            指定JDBC连接字符串
    connection-manager    指定要使用的连接管理器类
    driver            指定要使用的JDBC驱动类
    username        设置认证用户名
    password        设置认证密码
    verbose            打印详细的运行信息
    connection-param-file    可选,指定存储数据库连接参数的属性文件
    hadoop-home        hadoop-home的路径
    enclosed-by        字段值前后加上指定的字符
    escaped-by        双引号作转义处理
    fields-terminated-by    字段分隔符
    lines-terminated-by    行分隔符
    optionally-enclosed-by    强制给字段值前后都加上指定符号
    mysql-delimiters    Mysql默认的分隔符
    input-enclosed-by    对字段值前后指定的字符进行解析
    input-escaped-by    对含有转义双引号的字段值作转义处理
    input-escaped-by    导入使用的字段分隔符
    input-lines-terminated-by    导入使用的行分隔符
    input-optionally-enclosed-by    导入时强制给字段值前后都加上指定符号
    bindir            生成的java文件、class文件及打包为JAR的JAR包文件输出路径
    class-name        生成的Java文件指定的名称
    jar-file        合并时引入的jar包
    outdir    生成的java文件存放路径
    package-name    包名
    map-column-java    映射的数据类型
    table    关系数据库表名
    num-mappers    启动map的数量,默认是4个

    附2:Sqoop的import工具抽数的几种情况
    1. Hive表无分区,全量从Oracle中抽取数据到Hive的表中
    sqoop import -D mapred.job.queue.name=root.myqueue   
    –connect jdbc:oracle:thin:@192.168.1.128:1521:mydatabase  
    –username jsz                                      
    –password 123456                                    
    –table  mys.test              
    –columns ID,NAME,AGE,SALARY,DATA_DATE
    -m 1                                                            
    –hive-table default.test 
    –create-hive-table
    –hive-drop-import-delims                                       
    –verbose                                                          
    –fetch-size 5000                                               
    –target-dir  /apps/testdata/default/test
    –delete-target-dir
    –hive-overwrite        
    –null-string ‘\N’     
    –null-non-string ‘\N’ 
    –hive-import;
    2. Hive表有分区,增量从Oracle中抽取数据到Hive表中:
    sqoop import -D mapred.job.queue.name=root.myqueue  
    –connect jdbc:oracle:thin:@192.168.1.128:1521:mydatabase  
    –username jsz                                      
    –password 123456                                    
    –table  mys.test             
    –columns ID,NAME,AGE,SALARY,LCD
    -m 1                                         
    –hive-partition-key op_day                 
    –hive-partition-value 20160525              
    –where “lcd >= trunc(TO_DATE(‘20160525′,’YYYY-MM-DD’),’dd’) and lcd < trunc(TO_DATE(‘20160526′,’YYYY-MM-DD’),’dd’)” 
    –hive-table default.test_partition 
    –create-hive-table
    –hive-drop-import-delims                                       
    –verbose                                                          
    –fetch-size 5000                                               
    –target-dir  /apps/testdata/default/test_partition
    –delete-target-dir
    –hive-overwrite        
    –null-string ‘\N’     
    –null-non-string ‘\N’ 
    –hive-import;
    3.使用select语句:
    sqoop import                           
    -D mapred.job.queue.name=root.myqueue     
    -D oracle.sessionTimeZone=America/Los_Angeles 
    –connect jdbc:oracle:thin:@192.168.1.128:1521:mydatabase   
    –username jsz  
    –password 123456 
    –query “select ID,NAME,AGE,SALARY,DATA_DATE from mys.test WHERE ID = ‘10086’ and $CONDITIONS”
    –verbose 
    –fetch-size 5000      
    –hive-table default.test 
    –target-dir  /apps/testdata/default/test
    –delete-target-dir
    –fields-terminated-by ‘01’     
    –lines-terminated-by ‘ ’     
    -m 1          
    –hive-import          
    –hive-overwrite          
    –null-string   ‘\N’           
    –null-non-string  ‘\N’          
    –hive-drop-import-delims

    Sqoop的export工具导数的情况:

    将Hive的数据导入Oracle,整个过程分为三步:

    1) 删除Oracle表的历史数据
    sqoop eval  -D mapred.job.queue.name=root.myqueue   
    –connect jdbc:oracle:thin:@192.168.1.128:1521:mydatabase 
    –username jsz   
    –password 123456 
    –verbose                      
    –e “delete from mys.test”
    2) Hive导出到HDFS指定路径
    hive -e “use default;set mapred.job.queue.name=root.myqueue;set hive.insert.into.multilevel.dirs=true;insert overwrite directory ‘/apps/testdata/default/test’ select id,name,age,salary,data_date from default.test;”
    3) 将HDFS的数据导入到Oracle中
    sqoop export   
    -D mapred.job.queue.name=root.myqueue    
    -D mapred.task.timeout=0    
    –connect jdbc:oracle:thin:@192.168.1.128:1521:mydatabase    
    –username jsz    
    –password 123456   
    –table mys.test    
    –columns ID,NAME,AGE,SALARY,DATA_DATE    
    –export-dir /apps/testdata/default/test    
    –verbose    
    –input-null-string ‘\N’    
    –input-null-non-string ‘\N’ 
    –input-fields-terminated-by ‘01’    
    –input-lines-terminated-by ‘ ’    
    -m 1

  • 相关阅读:
    正则表达式
    网络编程
    多线程
    IO—Data
    IO-对象流
    IO-转换流
    异常
    常用类——File——Random——Math——枚举
    每月博客-20180310
    每月博客-20180204
  • 原文地址:https://www.cnblogs.com/yongestcat/p/11510507.html
Copyright © 2011-2022 走看看