Spark 3.1 - Java失败,并出现IllegalArgumentException:Cannot grow BufferHolder错误

7rfyedvj  于 7个月前  发布在  Apache
关注(0)|答案(1)|浏览(99)

我试图在Google的dataproc集群中运行spark作业,数据量很大。集群专用于一个spark作业,并期望YARN为该作业分配所有集群资源。
Spark命令配置为每个节点运行2个执行器,每个执行器运行3个内核。当触发spark作业时,YARN ResourceManager显示每个节点只有25%的工作内核用于容器。
在某个时间点,由于列大小限制,Spark作业会间歇性地因重负载而失败。
错误为java.lang.IllegalArgumentException: Cannot grow BufferHolder by size 24 because the size after growing exceeds size limitation 2147483632
参考https://kb.databricks.com/sql/cannot-grow-bufferholder-exceeds-size.html
有没有人能帮上忙,如何在Spark中解决这个问题?

2nbm6dog

2nbm6dog1#

正如最初的发帖者所写的,问题是有些列超过了最大限制。如果你真的需要列更大,那么我没有任何建议,但如果没有,以下两个策略之一可能会有所帮助。
1.在问题中的Databricks链接中,他们建议使用 collect_set(如果您以前使用过 collect_list),以防重复项增加您的集合/列大小。
1.您可以使用 substrsubstring 来任意限制列的大小。如果您的列是字符串,但有一个字符串,那么在您想要的最后一个条目之后找到字符串的索引并删除它之后的所有内容可能会更安全。

相关问题