Sqoop 抽数据---优化

    sqoop作为一个跨平台抽取和输出数据的工具,在关系型数据库(oralce,mysql等)和大数据平台之间常用。而目前的项目使用的hadoop平台,上游数据库是Oracle。

    作为ETL的一环,加载作业的性能也是需要关注和优化的。如果使用Sqoop命令,则可以从以下几点进行优化:

    1.允许并行抽数:

            -m n:这个参数代表的是允许n个MapReduce任务运行抽数据。对于大表,n>1是最好的,同时需要设定 -split by的字段和表达式(注,只能用单个字段或表达式)。split by 的字段代表了按哪个字段的值来划分并行区间。

           但是这样有个隐患,就是当所选字段或表达式的值分布不均时候(有1条记录值为A, 1000条记录值为B),会造成数据倾斜且性能无提升(hadoop中,一个作业的所有MP任务完成后,这作业才会结束)。所以还需要对split 字段或表达式的数据分布进行价差。看到很多篇说可以使用PK字段,但是个人发现PK字段的值也有分布不均的,其他非PK字段也可以使用。例如一个工厂的原料采购数据,可以使用采购年份进行并行,因为每年的采购数据量相差不大。

      2. 在源数据中过滤不必要的记录和字段: 可以在上游数据库中建立物化视图或者表,过滤掉不需要的记录和字段,减少耗时。

      3. 在上游数据库增加缓存:在并行抽数时,如果无数据倾斜发生,则需要检查上游数据库的缓存空间的大小。增加缓存,能够减少sqoop命令的运行时长。

有错必纠正,欢迎反馈!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值