2、sqoop的命令使用

参考链接:https://blog.csdn.net/whdxjbw/article/details/81079746

一、import => mysql ==> hive

  • 1、全量数据导入到指定文件目录

      sqoop import \
      -connect jdbc:mysql://rzx166:3306/gacenter_v5 \
      -username root \
      -password surfilter1218 \
      -query "select * from sqooptest where \$CONDITIONS" \
      # 指定通过那个字段来分组,-m指定map数量,默认是4
      -split-by id \
      -m 4 \
      # 指定导入到那个文件目录,分隔符
      -target-dir /root/liufutest/ \
      -fields-terminated-by "," 
    
      参数说明
      -target-dirHDFS目标目录(确保目录不存在,否则会报错,因为Sqoop在导入数据至HDFS时会自己在	HDFS上创建目录)
      -fields-terminated-by “,”文件的分隔符-split-by通过那个字段进行分组,从而给多个map并发执行,只有-m 大于1才需要配置-m并发的map数,默认是4个
    
  • 2、全量数据导入到hive表中

    在上面基础上,指定数据入hive。原理:将-target-dir的文件mv到hive表目录下即可。如果表不存在则创建,默认格式textFile,分隔符就是-fields-terminated-by的值。

      sqoop import \
      -connect jdbc:mysql://rzx166:3306/gacenter_v5 \
      -username root \
      -password surfilter1218 \
      -query "select * from sqooptest where \$CONDITIONS" \
      # 指定通过那个字段来分组,-m指定map数量,默认是4
      -split-by id \
      -m 4 \
      # 指定导入到那个文件目录,分隔符。
      -target-dir /root/liufutest/ \
      -fields-terminated-by "," \
      # 指定导入hive,其实就是将-target-dir的文件mv到hive表下
      # 如果hive没有对应的表,则创建
      -hive-import \
      -hive-table default.sqooptest
    
      参数说明
      -hive-import表示导入到hive-hive-table导入到hive的那张表,如果表不存在则创建,格式:textFile,
      分隔符就是-fields-terminated-by
    
  • 3、增量导入 ~ append模式

    举个栗子,有一个订单表,里面每个订单有一个唯一标识自增列ID,在关系型数据库中以主键形式存在。之前已经将id在0~5201314之间的编号的订单导入到Hadoop中了(这里为HDFS),现在一段时间后我们需要将近期产生的新的订单数据导入Hadoop中(这里为HDFS),以供后续数仓进行分析。此时我们只需要指定–incremental 参数为append,–last-value参数为5201314即可。表示只从id大于5201314后开始导入。

      sqoop import \
      -connect jdbc:mysql://rzx166:3306/gacenter_v5 \
      -username root \
      -password surfilter1218 \
      -query "select * from sqooptest where \$CONDITIONS" \
      # 指定通过那个字段来分组,-m指定map数量,默认是4
      -split-by id \
      -m 4 \
      # 指定导入到那个文件目录,分隔符。
      -target-dir /root/liufutest/ \
      -fields-terminated-by "," \
      # 指定导入hive,将-target-dir的文件mv到hive表下
      # 如果hive没有对应的表,则创建
      -hive-import \
      -hive-table default.sqooptest
      # 增量配置~append
      -incremental append \
      -check-column id \
      -last-value 1
    
  • 4、增量导入 ~ lastModify模式

    此方式要求原有表中有time字段,它能指定一个时间戳,让Sqoop把该时间戳之后的数据导入至Hadoop(这里为HDFS)。因为后续订单可能状态会变化,变化后time字段时间戳也会变化,此时Sqoop依然会将相同状态更改后的订单导入HDFS,当然我们可以指定merge-key参数为orser_id,表示将后续新的记录与原有记录合并。

      sqoop import \
      -connect jdbc:mysql://rzx166:3306/gacenter_v5 \
      -username root \
      -password surfilter1218 \
      -query "select * from sqooptest where \$CONDITIONS" \
      # 指定通过那个字段来分组,-m指定map数量,默认是4
      -split-by id \
      -m 4 \
      # 指定导入到那个文件目录,分隔符。
      -target-dir /root/liufutest/ \
      -fields-terminated-by "," \
      # 指定导入hive,将-target-dir的文件mv到hive表下
      # 如果hive没有对应的表,则创建
      -hive-import \
      -hive-table default.sqooptest
      # 增量配置~lastmodified  ==>(create_time、modified_time)
      # -merge-key一般是更新的表才会用到
      -incremental lastmodified \
      -check-column create_time \
      -last-value "2015-01-01 00:00:00" \
      -merge-key id
    

二、export =>hive导出到mysql

sqoop export \
-connect jdbc:mysql://rzx166:3306/gacenter_v5 \
-username root \
-password surfilter1218 \
-table sqooptest \
-export-dir /user/hive/warehouse/sqooptest/

三、create-hive-table

在hive中创建和mysql一样的表

sqoop create-hive-table \
-connect jdbc:mysql://rzx166:3306/gacenter_v5 \
-username root \
-password surfilter1218 \
-table sqooptest \
-hive-table hivesqooptest

参数说明
–hive-home <dir>Hive的安装目录,可以通过该参数覆盖掉默认的hive目录
–hive-overwrite覆盖掉在hive表中已经存在的数据
–create-hive-table默认是false,如果目标表已经存在了,那么创建任务会失败
–hive-table后面接要创建的hive表–table指定关系数据库表名

四:codegen

将关系数据库表映射为一个Java文件、Java class类、以及相关的jar包,作用主要是两方面:

1、  将数据库表映射为一个Java文件,在该Java文件中对应有表的各个字段。
2、  生成的Jar和class文件在metastore功能使用时会用到。

可以在本地temp中获取到这个jar

sqoop codegen \
-connect jdbc:mysql://rzx166:3306/gacenter_v5 \
-username root \
-password surfilter1218 \
-table sqooptest

转载于:https://my.oschina.net/liufukin/blog/799604

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值