问题描述
我有一个 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 内存的机器无法做太多事情,因此可能会遇到性能问题。干杯!