如何启动为每个程序分配一半 RAM 内存的 Cassandra 和 Spark 服务?

问题描述

我有一个 4 节点集群,每个节点上都安装了 Spark 和 Cassandra。 Spark 版本 3.1.2 和 Cassandra v3.11 让我说每个节点都有 4GB 的 RAM,我想在整个集群中运行我的“spark+cassandra”程序。 如何为 Cassandra 执行分配 2GB 内存,为 Spark 执行分配 2GB 内存?

我注意到了。

如果我的 Cassandra 集群已启动并且我在工作节点上运行 start-worker.sh 命令以启动我的 Spark 集群,Cassandra 服务会突然停止,但 Spark 仍然有效。基本上,Spark 将 RAM 资源窃取给 Cassandra。我怎样才能避免这种情况?

在崩溃节点的 Cassandra 日志中,我阅读了以下消息:

 There is insufficient memory for the Java Runtime Environment to continue.

实际上输入 top -c 然后输入 shift+M 我可以在列顶部看到 Spark 服务

感谢您的任何建议。

解决方法

默认情况下,Spark worker 占用的总内存少于 1GB。在 4GB 机器上,工作 JVM 消耗 3GB 内存。这就是机器内存不足的原因。

您需要将 SPARK_WORKER_MEMORY 配置为 1GB,以便为操作系统留出足够的内存。有关详情,请参阅Starting a Spark cluster manually

正如亚历克斯·奥特 (Alex Ott) 已经指出的那样,需要注意的是,只有 4GB 内存的机器无法做太多事情,因此可能会遇到性能问题。干杯!