• hadoop动态分区插入数据


    今天操作了张老表的所有数据插入到新表,但老表分区太多,一个个分区插入不太现实,网上搜了一下,大部分是:

    set hive.exec.dynamic.partition.mode=nonstrict;
    INSERT OVERWRITE TABLE fdm_abc_new PARTITION (dp,dt,end_date)
    select
    字段信息,
    dp,
    dt,
    end_date;
    from fdm_abc

    这样的,但结果是新表分区会比老表少;结果发现新表未出现的分区数据是空,大小是42,这样的分区就不会出现在新表里;

    网上http://blog.csdn.net/iquicksandi/article/details/8535956讲的很详细

    动态分区与静态分区还有一个细微的差别是,静态分区一 定会创建分区,不管SELECT语句的结果有没有数据。而动态分区,只有在SELECT结果的记录数>0的时候,才会创建分区。因此在不同的业务场景下,可能会选择不同的方案。

    另外使用动态分区时需要注意的比较重要的一点是,动态分区会为每一个分区分配reduce数。比如说你在脚本上面写了:set mapred.reduce.tasks=100;

    并且有两个分区:pt, if_online。如果结果集中pt=20121023,if_online=0/1,那么它就会为pt=20121023/if_online=0,pt=20121023/if_online=1各分配100个reduce。也就是说,namenode会同时处理200个文件的写操作。这在分区值很多的情况下,会成为一个灾难,容易直接把namenode给搞挂掉,是非常危险的。因此使用动态分区时,一定要清楚地知道产生的动态分区值,并且合理地设置reduce数量。

  • 相关阅读:
    YAOI Summer Round #4 (Div.2) 题解
    2021 暑假集训(福建师大附中)
    YAOI Round #7 题解
    YAOI Round #5 题解
    插头DP
    四边形不等式
    YAOI Round #3 题解
    关于 2020 年
    图论相关性质和结论(基础)
    斜率优化 DP :Luogu P2365 P5785「SDOI2012」任务安排 & 弱化版
  • 原文地址:https://www.cnblogs.com/judylucky/p/3673137.html
Copyright © 2020-2023  润新知