datastax spark java heap space error

时间:2015-05-13 10:51:20

标签: apache-spark datastax-enterprise

我尝试使用scala执行小计算。我正在使用datastax-4.6。 我有6个节点,每个16GB RAM和8个核心。当我尝试exexute scala程序时,它会显示以下错误。

错误的ActorSystemImpl:来自线程[sparkDriver-akka.actor.default-dispatcher-17]的未捕获的致命错误关闭了ActorSystem [sparkDriver] java.lang.OutOfMemoryError:Java堆空间。我为每台机器分配了2个核心,执行器内存为4GB,驱动程序内存为4GB。有什么建议??。

1 个答案:

答案 0 :(得分:1)

直接引用Russ's article on Common Spark Troubleshooting(你应该读它!):

  

Spark Executor OOM:

     

如何在Spark上设置内存参数一旦应用程序   正在运行下一个最可能出现的错误,你将会看到一个OOM   火花执行者。 Spark是一个非常强大的工具   内存计算,但它的功率带来一些尖锐的边缘。该   执行者OOM的最常见原因是应用程序是   试图缓存或加载太多信息到内存中。取决于   你的用例有几个解决方案:

     

1)增加工作的并行性。尝试增加数量   你工作中的分区。通过将工作分成更小的一组   数据较少的信息必须驻留在给定的内存中   时间。对于Spark Cassandra Connector作业,这意味着减少   分割大小变量。变量,   spark.cassandra.input.split.size,可以在命令中设置   如上所述或在SparkConf对象中。   对于其他RDD类型看   进入他们的api以确定他们如何确定分区   尺寸。

     

2)增加存储分数变量,   spark.storage.memoryFraction。这可以在上面的任何一个上设置   命令行或SparkConf对象。这个变量准确设置   JVM将用于缓存和存储多少   RDD的。您可以将其设置为0到1之间的值,描述什么   执行程序JVM内存的一部分将专用于缓存RDD。如果   你有一份工作需要很少的随机记忆,但会   利用大量缓存的RDD来增加这个变量(例如:缓存   然后RDD在其上执行聚合。)

     

3)如果一切都失败了,你可以   每个工人只需要额外的公羊。对于DSE用户,请调整您的   spark-env.sh(或DSE 4.6中的dse.yaml文件)文件以增加SPARK_MEM   保留给Spark工作。您需要重新启动工作人员   这些新的内存限制生效(dse sparkworker restart。)然后   通过设置增加应用程序请求的ram数量   spark.executor.memory变量,无论是在命令行还是在   SparkConf对象。