美文网首页Hive在简书@IT·互联网程序员
Hive插入多个分区时OOM故障解决记录

Hive插入多个分区时OOM故障解决记录

作者: FxData | 来源:发表于2017-05-08 23:24 被阅读363次

一、故障情景

基于Hive的数据仓库中需要做一张累积快照表,记录了客户发生各个行为的具体日期,比如激活日期、注册日期、申请日期、创建订单日期等等。

这张表需要以激活日期作为分区时间,便于业务查询。

激活日期将近500个日期,在一次性将所有数据全量插入目标分区的时候所有reduce报OOM。

二、解决过程

首先增加reduce端的内存,set mapreduce.reduce.java.opts = -Xmx3072m;set mapreduce.reduce.memory.mb = 3072;最后将内存设置到集群最高内存,仍然报OOM。

再分析源数据的分类,发现源数据存在以前的测试数据,这样会造成有的分区日期只有一条数据,有的分区天数有几十万数据,数据存在严重的倾斜。

解决方法有两种。

第一种在HQL末尾加上distribute by和sort by,或者cluster by。如下:
insert overwrite table loan_f_milestone partition(day)
select *,
to_date(atv_tim)
from loan_f_milestone_tmp12
distribute by to_date(atv_tim)
sort by to_date(atv_tim)
--cluster by to_date(atv_tim)

distribute by按照指定的字段将数据划分到不同的输出reduce中,可以保证每个reduce处理的数据范围不重叠,每个分区内的数据是没有排序的。

sort by保证一个reduce内的数据按照指定字段排序。

cluster by除了有distribute by的功能,还有sort by的功能,所以最终的结果是每个reduce处理的数据范围不重叠,而且每个reduce内的数据按照指定字段排序,而且可以做到全局排序。

所以第二种方式是设置set hive.optimize.sort.dynamic.partition=true;会将动态分区字段全局排序。

相关文章

  • Hive插入多个分区时OOM故障解决记录

    一、故障情景 基于Hive的数据仓库中需要做一张累积快照表,记录了客户发生各个行为的具体日期,比如激活日期、注册日...

  • 数仓--Hive-面试之Hive动态分区

    面试如果被问道,那么需要说出彩来,特别时参数 Hive动态分区参数配置 往hive分区表中插入数据时,如果需要创建...

  • Hive系列之分区表和桶

    为提升hive数据的查询和写入性能, hive提供了分区表机制。hive每个表格可以指定多个分区key, 这些分区...

  • PySpark写数到 Hive 动态分区

    首先,写入动态分区表,要设置一些严格模式的参数,将其设置为非严格模式 插入非分区 Hive 表 对于插入 Hive...

  • hive oom解决

    Hive中跑MapReduce Job出现OOM问题分析及解决 一、引子 今天在跑一段很复杂而且涉及数据量10多年...

  • hive 动态分区

    目的,往分区表中插入数据: 创建一个分区表:插入数据报错,原因是没有开启动态分区 执行命令: set hive.e...

  • Hive变量未替换导致分区存在特殊符号处理

    生成分区变量未替换,插入Hive表中显示如下: INSERT OVERWRITE TABLE tablename ...

  • hive多个分区插入同一个表

    多分区插入,方便实用,但是有时候会忘记语法,网上搜到很多坑(故意留坑的还挺多的),特此记录。 set hive.e...

  • 动态分区说明

    Hive分区 Hive的动态分区 概述 hive中支持两种类型的分区: 静态分区SP(static partiti...

  • 坑合集

    Flume flume细节 Hive 数据倾斜Hive优化 Hive分区表新增字段为null的bug及解决方法 S...

网友评论

    本文标题:Hive插入多个分区时OOM故障解决记录

    本文链接:https://www.haomeiwen.com/subject/tbivtxtx.html