sqoop 命令行参数-m和--split-by的用法以及注意事项(有大坑!)

本文介绍了sqoop在从数据库导入到Hive时,如何使用-m和--split-by参数提高效率。--split-by参数用于指定字段进行数据划分,配合-m指定并发map任务。但需要注意的是,选择的字段必须避免数据倾斜和非整数类型,否则可能导致数据错误或效率降低。正确选择分割字段对于保证数据完整性和提升效率至关重要。
摘要由CSDN通过智能技术生成

       最近在办公的时候,通常用的sqoop从pg数据库抽到hive竟然出现了数据量出错的问题,通过查看sqoop日志发现抽过来的数据量很不对劲,排查发现是--split-by参数设置的问题。
       注意:这个是大坑,不要只看sqoop执行成功就完事儿了。
       先来讲解一下sqoop中 --split-by参数的含义,这个参数的意义其实很简单,它一般是和-m来搭配使用的。该参数主要是用来**提高数据抽取的效率**,使得多个map并发执行抽取的操作。
       比如要从pg数据库(只是举个例子,oracle、mysql同理)抽到hive,我们要用sqoop抽取其数据库中一个表的所有数据。像大数据这块儿,上百万的数据量是常有的事情,如果不设置--split-by,sqoop会默认一条条来抽取,直到把整个数据库表中的数据抽完。可见这是一个单一map在执行逐条抽取的操作,可想而知效率会变得比较低。
       但是如果用--split-by这就不一样了,我们可以用--split-by来指定所抽取表中的一个字段,然后用-m来指定抽取的时候有多少个map并发执行抽取,这样就可以大大提高抽取的效率。
       比如所抽取表中有一个字段   grade  int  comment '成绩' ,那这个时候就可以把sqoop的参数设置为这样:--split-by   grade   -m  4 。这就代表着sqoop从该表抽取数据的时候,将根据grade这个字段数值的范围,来把整个表的数据划分成4块儿,然后4个map并发执行抽取数据,每一个map抽取它所负责的grade范围所对应的数据量。具体这4块儿怎么划分范围的呢,其实就是sqoop它会近似于执行这个命令  select max(grade),mi

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值