首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化蜂巢查询。java.lang.OutOfMemoryError:超过Java堆空间/GC开销限制

优化蜂巢查询。java.lang.OutOfMemoryError:超过Java堆空间/GC开销限制
EN

Stack Overflow用户
提问于 2020-07-08 22:13:01
回答 2查看 757关注 0票数 3

如何优化这个表单的查询,因为我一直遇到这个OOM错误?还是想出一个更好的执行计划?如果删除子字符串子句,查询将正常工作,这意味着这需要大量内存。

当作业失败时,直线输出将显示OOM Java堆空间。在线阅读表明我增加了export HADOOP_HEAPSIZE,但这仍然会导致错误。我尝试的另一件事是增加hive.tez.container.sizehive.tez.java.opts (tez堆),但是仍然存在这个错误。在纱线日志中,会超过GC开销限制,这意味着内存不足和/或查询计划的组合效率极低,因为它无法收集足够的内存。

我正在使用Azure HDInsight交互式查询4.0。20个工作节点、D13v2 8核心和56 worker。

源表

代码语言:javascript
复制
create external table database.sourcetable(
  a,
  b,
  c,
  ...
  (183 total columns)
  ...
)
PARTITIONED BY ( 
  W string, 
  X int, 
  Y string, 
  Z int
)

目标表

代码语言:javascript
复制
create external table database.NEWTABLE(
  a,
  b,
  c,
  ...
  (187 total columns)
  ...
  W,
  X,
  Y,
  Z
)
PARTITIONED BY (
  aAAA,
  bBBB
)

查询

代码语言:javascript
复制
insert overwrite table database.NEWTABLE partition(aAAA, bBBB, cCCC)
select
a,
b,
c,
...
(187 total columns)
...
W,
X,
Y,
Z,
cast(a as string) as aAAA, 
from_unixtime(unix_timestamp(b,'yyMMdd'),'yyyyMMdd') as bBBB,
substring(upper(c),1,2) as cCCC
from database.sourcetable
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-09 11:10:40

如果其他一切正常,请尝试在查询结束时按分区键添加:

代码语言:javascript
复制
  from database.sourcetable 
  distribute by aAAA, bBBB, cCCC

因此,每个还原器只创建一个分区文件,占用的内存更少。

票数 1
EN

Stack Overflow用户

发布于 2020-07-10 13:58:49

尝试对分区列进行排序:

代码语言:javascript
复制
SET hive.optimize.sort.dynamic.partition=true;

启用

后,将对动态分区列进行全局排序。这样,我们只能为还原器中的每个分区值保留一个记录编写器,从而减少减速器的内存压力。

https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62804436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档