DataStax Spark Java堆空间错误



im试图使用scala执行小计算。我正在使用DataStax-4.6。我有16GB RAM和8核的6节点。当我尝试删除Scala程序时,它会显示Follwing错误。

错误actorsystemympl:线程[sparkdriver-akka.actor.default-dispatcher-17]中的致命错误错误。java.lang.outofmemoryerror:java堆空间。我为每台计算机分配了2座,而执行器内存为4GB,驱动程序存储器为4GB。任何建议??。

直接引用Russ关于Common Spark故障排除的文章(您应该阅读它!):

火花执行人OOM:

如何在Spark上设置内存参数一旦应用程序 正在运行下一个最可能的错误,您将看到的是一个OOM 火花执行者。火花是一个非常强大的工具 内存计算,但功率具有一些锋利的边缘。这 遗嘱执行人OOM的最常见原因是该应用程序是 试图缓存或将过多的信息加载到内存中。根据 您的用例有多种解决方案:

1)增加工作的并行性。尝试增加数量 您的工作中的分区。通过将工作分成较小的一组 数据较少的信息必须居住在给定的记忆中 时间。对于火花Cassandra连接器作业,这意味着减少 拆分大小变量。变量, spark.cassandra.input.split.size,可以在命令上设置 如上或在SparkConf对象中的行。 对于其他RDD类型 进入他们的API,以确定他们如何确定分区 尺寸。

2)增加存储分数变量, spark.storage.memoryfraction。这可以在上面的 命令行或SparkConf对象。此变量设置准确 多少JVM将专门用于缓存和存储 RDD的。您可以将其设置为0到1之间的值,描述什么 执行器JVM内存的一部分将用于缓存RDD。如果 您的工作将需要很少的洗牌记忆,但会 利用大量缓存的RDD增加了此变量(例如:缓存 然后在其上执行聚集体。)

3)如果其他所有失败,您都可以 每个工人只需要其他RAM即可。对于DSE用户调整您的 spark-env.sh(或dse 4.6中的dse.yaml文件)以增加spark_mem 保留用于火花工作。您需要重新启动您的工人 这些新的内存限制将生效(DSE SparkWorker重新启动。)然后 通过设置增加申请请求的RAM数量 spark.executor.memory变量命令行或 SparkConf对象。

最新更新