当前hive社区已到3.1.2版本,较多hive用户还不太清楚在0.14版本之后开始已支持事务,对于批处理任务中要用到update/delete/merge into的场景,非常受用。当前较多hive用户在做数据更新时还在用insert overwrite的用法,可以想象一下,如果是高并发的情况下,可能会出现什么情况? 

    在数仓/集市设计的过程中,表结构的设计尤为重要。对于hive来说,分区、分桶设计的好坏,可以直接影响批处理任务的执行效率,分桶如使用不当,则可能出现数据异常的情况,后果不堪设想。如:某开发人员为了图省事,将bucket字段选择了一个随机函数,看似挺“机灵”,数据分布挺均匀,实在存在较大隐患,大家都知道,数据写入过程为MapReduce任务,一旦在执行过程中出现任务失败、重试,随机值势必重新生成,数据也必然重新分布,对于已完成的reduce任务节点,是不是可能就出现了丢数据的情况。

    因此,在bucket字段的选择上,一定要选择有实际业务意义、离散度高的字段。严禁使用随机函数。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐