如果主键存在的话就默认使用主键作为拆分列
如果主键的实际值在其范围内不均匀分布,则可能导致任务不平衡。您应该使用–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
本文探讨了在使用Sqoop进行数据导入时如何选择合适的拆分列,避免数据倾斜和任务不平衡的问题。详细介绍了split-by参数的使用场景,特别是在面对不同数据类型时的注意事项,以及如何解决varchar类型splitkey带来的挑战。
3863

被折叠的 条评论
为什么被折叠?



