首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hive联接:内存不足异常

Hive联接:内存不足异常
EN

Stack Overflow用户
提问于 2013-09-20 09:58:54
回答 5查看 17.4K关注 0票数 9

我试图用一个大表(10G)和小表(230 MB)来执行地图端。对于小列,我将在键列上加入之后,使用所有列生成输出记录。

我使用了下面的设置

集hive.auto.convert.join=true;

hive.mapjoin.smalltable.filesize=262144000;

日志:

代码语言:javascript
复制
**2013-09-20 02:43:50     Starting to launch local task to process map join;      maximum       memory = 1065484288

2013-09-20 02:44:05     Processing rows:        200000  Hashtable size: 199999  Memory usage:   430269904       rate:0.404

2013-09-20 02:44:14     Processing rows:        300000  Hashtable size: 299999  Memory usage:   643070664       rate:0.604

Exception in thread "Thread-0" java.lang.OutOfMemoryError: Java heap space
        at java.util.jar.Manifest$FastInputStream.<init>(Manifest.java:313)
        at java.util.jar.Manifest$FastInputStream.<init>(Manifest.java:308)
        at java.util.jar.Manifest.read(Manifest.java:176)
        at java.util.jar.Manifest.<init>(Manifest.java:50)
        at java.util.jar.JarFile.getManifestFromReference(JarFile.java:168)
        at java.util.jar.JarFile.getManifest(JarFile.java:149)
        at sun.misc.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:696)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:228)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at org.apache.hadoop.util.RunJar$1.run(RunJar.java:126)
Execution failed with exit status: 3
Obtaining error information
Task failed!
Task ID:
  Stage-7
Logs:
FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.MapredLocalTask
ATTEMPT: Execute BackupTask: org.apache.hadoop.hive.ql.exec.MapRedTask**

但是我仍然面临着OOM异常,集群中设置的堆大小是1GB。请协助我需要考虑哪些属性并进行调优,以使此地图侧加入工作。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-09-20 10:19:38

处理行: 300000哈希表大小: 299999内存使用率: 643070664速率:0.604

在300 K行时,HT已经使用了堆的60%。首先要问的问题是:您确定您的表顺序是正确的吗?连接中的小表真的是数据中较小的表吗?在编写查询时,大表应该是联接子句中的最后一个表。你在0.9版还是0.11版?

如果您在Hive 0.11上,并且正确地指定了连接,那么首先要尝试的是增加堆大小。从上面的数据(300 k行~> 650 much堆)中,您可以计算出您需要多少堆。

票数 10
EN

Stack Overflow用户

发布于 2016-04-06 12:36:25

我面临着这个问题,只有使用set hive.auto.convert.join=false才能克服它。

票数 3
EN

Stack Overflow用户

发布于 2016-11-17 07:16:44

set hive.auto.convert.join = false;它不会给你内存异常。

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

https://stackoverflow.com/questions/18913928

复制
相关文章

相似问题

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