sqoop 并行抽取数据,同时解决数据倾斜

本文介绍了如何利用Sqoop的--query选项和split-by参数,结合自增ID来实现并行数据抽取,并有效处理数据倾斜问题。在数据量不同的情况下,提供了map数量的建议,以平衡数据库压力和导数据效率。通过指定自增ID的范围设置boundary,确保并行过程的高效性。

Sqoop 并行抽取数据同时cover数据倾斜:

核心思想就是自己生成一个有序且均匀的自增ID,然后作为map的切分轴,这样每个map就可以分到均匀的数据,可以通过设置map的个数来提高吞吐量。

建议:
数据量500w 以下使用4个map即可。
数据量500w以上8即可,太多会对数据库加压,造成其他场景使用性能降低。
如果是为了专门导数据,和下游计算的并行度,可以适当调大。

引出场景:
通常可以指定split-by 对应的zizengID 列,然后使用–num-mappers或者-m指定map的个数,即并发的抽取进程数量。但是有时候会碰到很多的表没有添加自增ID或者,整数型的主键,或者 主键分布不均,反而会拖慢整个job的进程。

根据sqoop源码的设计,我们可以使用–query语句中添加自增ID,作为split-by的参数,与此同时通过设置的自增ID的范围可以设置boundary。。

核心语法如下:


```bash
--query 方式:涉及参数  --query、--split-by、--boundary-query

--query: select col1、 col2、 coln3、 columnN from (select ROWNUM() OVER() AS INC_ID, T.* from table T where xxx )  where $CONDITIONS
--split-by: INC_ID
--boundary-query: select 1 as MIN , sum(1) as MAX from table where xxx

完整示例语法:
password-file通过 echo -n “password content” > passsword-f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值