Sqoop --split by 支持的类型及现象

本文探讨了在使用Sqoop进行数据导入时如何选择合适的拆分列,避免数据倾斜和任务不平衡的问题。详细介绍了split-by参数的使用场景,特别是在面对不同数据类型时的注意事项,以及如何解决varchar类型splitkey带来的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果主键存在的话就默认使用主键作为拆分列
如果主键的实际值在其范围内不均匀分布,则可能导致任务不平衡。您应该使用–split-by参数显式选择不同的列
Sqoop目前无法拆分多列索引。如果表没有索引列,或者具有多列键,则还必须手动选择拆分列。
–split-by对非数字类型的字段支持不好,会导致无法切分任务。一般用于主键及数字类型的字段

split-by 根据不同的参数类型有不同的切分方法,如int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来 确定划分几个区域
当int的范围特别小的时候,最后一个mapper会有一定倾斜

split key 要求 非空

  • sqoop mysql -> hive 当指定 split key 为 varchar类型时会遇到的情况
    现象
    1、任务无法切分,数据倾斜造成速度慢或者内存溢出
    2、split key 字段存在空值时会丢失数据

目前想到的解决办法是:将-m 设置称1,split-by不设置,即只有一个map运行,缺点是不能并行map录入数据。(注意,当-m 设置的值大于1时,split-by必须设置字段)

split key 支持的好的有一下数据类型

BigDecimal,Boolean,Date,Float,Integer

BigDecimalSplitter.java

BooleanSplitter.java

DBSplitter.java

DateSplitter.java

FloatSplitter.java

IntegerSplitter.java

OracleDateSplitter.java
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值