一、可能的数据处理架构
1 | Sqoop import ->Hive/HDFS ->MR Job/Spark Job/Streaming Job/ML Job/SQL -> Result Data |
二、Sqoop导出通用参数
- –connect 连接关系型数据库
- –username 关系型数据库用户
- –password/-P 关系型数据库密码
三、Sqoop导出控制参数
–columns 字段1,字段2,字段3
1 | 注意: 没有被包含在--columns后面(例如class_month,last_mod_ts)的这些列名或字段要么具备默认值,要么就允许插入空值,数据库会拒绝接受sqoop导出的数据,导致Sqoop作业失败 |
–export-dir
1 | 指定导出目录,在执行导出的时候,必须指定这个参数,同时具备--table或--call参数的两者之一。 |
–input-null-string、–input-null-non-string
1 | 这两个参数可选,如果没有指定第一个参数[--input-null-string],对于字符串类型的列来说,“NULL”这个字符串就会被翻译为空值。 |
四、全表从HDFS导出-示例
1 | sqoop export --connect jdbc:mysql://serverip:3306/bigdata --username root -P --table bigdata --export-dir /user/root/bigdata |
五、全表从HDFS更新/增量导出
–update-key
更新标识,即根据某个字段进行更新,例如class_id,可以同时指定多个更新标识,用逗号分隔
–updatemod
有两种模式:
一种是updateonly(默认模式),仅仅更新已存在的数据记录,不会插入新纪录
另一种模式时allowinsert,允许插入新纪录
Sqoop的Export工具,对应两种语句
1 | 一种是Insert语句,如果表当中存在PK[主键]约束,且表中已包含数据,此时,导出报错。 需要用到—update-key和updatemod |
1 | 如果指定了update-key,那么Sqoop就会修改在数据表中已存在的数据,此时的每一个更新数据记录都会变成一个Update语句,用这个语句去更新目标表中已存在的数据,这是根据–update-key所指定的这个列进行更新的。 |
更新/增量导出-示例
updateonly模式
1 | sqoop export --connect jdbc:mysql://serverip:3306/bigdata --username root -P --table bigdata --export-dir /user/root/bigdata/ --update-key class_id --update-mode updateonly |
allowinsert模式
1 | sqoop export --connect jdbc:mysql://serverip:3306/bigdata --username root -P --table bigdata2 --export-dir /user/root/bigdata/ --update-key class_id --update-mode updateinsert |
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2019/03/13/Mars-hadoop-sqoop导出实战/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!