gpt4 book ai didi

hadoop - Apache Pig : java. lang.OutOfMemoryError:Java 堆空间

转载 作者:可可西里 更新时间:2023-11-01 16:24:27 25 4
gpt4 key购买 nike

所以我正在尝试连接两只 pig 的关系。

RELATION1 = LOAD '$path' USING AvroStorage();
RELATION2 = LOAD '$path' USING AvroStorage();
RELATION3 = JOIN RELATION1 BY field, JOIN RELATION2 BY field;
STORE RELATION3 INTO '$PATH' USING AvroStorage();

但是我收到以下错误:

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.lang.OutOfMemoryError: Java heap space

它似乎在提示堆空间不足。在我的例子中,relation1 相对较大,例如 ~1000GB,relation2 很小。只需在 pig 脚本中加载 relation1 并执行过滤器即可。有人可以建议我如何解决这个问题吗?谢谢!

最佳答案

既然您提到您的一个关系比另一个小得多,您可能想要优化您的 Pig 脚本。具体来说,如果您的一个关系比另一个小,则较小的关系应该先行,以便更有效地执行连接 (read more here):

RELATION3 = JOIN RELATION2 BY field, RELATION1 BY field;

如果您的某个关系非常小,可以放入内存,您可以执行复制连接 (read more here)。请注意,顺序与上述顺序相反:

RELATION3 = JOIN RELATION1 BY field, RELATION2 BY field USING 'replicated';

此外,您可以在连接之前使用 FOREACH 语句来仅选择您需要的变量,从而减少需要移动的数据。此外,在加入之前进行任何过滤。

如果这些修改后您仍然遇到 Java 内存错误,您可以更改 mapreduce 设置。例如,this other Stack Overflow answer推荐

SET mapreduce.map.memory.mb 4096;
SET mapreduce.reduce.memory.mb 6144;

(通过谷歌搜索您可以尝试的不同推荐设置的错误,还有许多其他问题/答案。)

关于hadoop - Apache Pig : java. lang.OutOfMemoryError:Java 堆空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51366518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com