zoukankan      html  css  js  c++  java
  • 关于sqoop --split-by 及 -m的理解

     


    场景: 

    sqoop import --connect jdbc:postgresql://...../..... --username ....  --query "select * from retail_tb_order_qiulp_test where status = 'TRADE_FINISHED' or status = 'TRADE_CLOSED' or status = 'TRADE_CLOSED_BY_TAOBAO' and $CONDITIONS"  --hive-import -m 6 --hive-table custom_analyse_db.retail_tb_order_main --hive-overwrite --hive-partition-key part --hive-partition-value qiulp --target-dir /user/qiulp/test1 --split-by tid 
    注意红色字体部分, retail_tb_order_qiulp_test表原有1000条数据,导入hive后成了6000条,是map的倍数关系。
    如下图,一条数据在hive中有6条相同的数据: 

    理解 
    1.split-by 根据不同的参数类型有不同的切分方法,如int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来 确定划分几个区域。比如select max(split_by),min(split-by) from得到的max(split-by)和min(split-by)分别为1000和1,而num-mappers(-m)为2的话,则会分成两个区域 (1,500)和(501-1000),同时也会分成2个sql给2个map去进行导入操作,分别为select XXX from table where split-by>=1 and split-by<500和select XXX from table where split-by>=501 and split-by<=1000.最后每个map各自获取各自SQL中的数据进行导入工作。 

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

    3.split-by即便是int型,若不是连续有规律递增的话,各个map分配的数据是不均衡的,可能会有些map很忙,有些map几乎没有数据处理的情况
  • 相关阅读:
    [TJOI2013]单词
    [AHOI2005]病毒检测
    [SCOI2016]围棋
    [SDOI2008]Sandy的卡片
    [POI2005]Sza-Template
    [Usaco2015 Feb]Censoring
    浅谈算法——KMP
    yii2邮件配置教程,报Expected response code 250 but got code "553"原因
    yii2设置发送邮件的一些配置
    js 的正则表达式 部分展示test()方法的验证功能
  • 原文地址:https://www.cnblogs.com/pejsidney/p/8962302.html
Copyright © 2011-2022 走看看