My Spark在Java1.7上运行,但我的cassandra在java 1.8上运行。当Spark从Cassandra读取数据时,一开始很多工作都会退出,并显示以下错误消息:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f338d000000, 21474836480, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 21474836480 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /tmp/jvm-18047/hs_error.log
但剩下的工人仍然运转良好,最后工作可以顺利完成。所以我想知道我应该为它们使用相同的JDK版本,但它们通过套接字进行通信,它不应该是JDK版本问题。
答案 0 :(得分:1)
这看起来更像是导致Spark Executor JVM过载。它试图获得21 GB,但操作系统说没有多少内存。你总是可以尝试减少执行者允许的堆?