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几乎没有数据处理的情况
  • 相关阅读:
    ios修改了coredata数据结构后,更新安装会闪退
    iOS开发系列--UITableView全面解析
    iOS七种手势
    iOS 手势操作:拖动、捏合、旋转、点按、长按、轻扫、自定义
    iOS学习必须了解的七大手势
    iOS中respondsToSelector与conformsToProtocol的相关理解和使用
    iOS-MBProgressHUD使用
    ios学习--第三方框架-MBProgressHUD以及扩展
    Problem 2169 shadow
    測试加入多级文件夹篇
  • 原文地址:https://www.cnblogs.com/pejsidney/p/8962302.html
Copyright © 2011-2022 走看看