我有一台4台机器(1台主机和3台工人),每台机器有4个内核和16 GB内存,我每个工作节点使用2个内核和8 GB内存。
总共有6个核心,24 GB内存。
我在hdfs中有 5Gb数据文件, 41块,每个块为128 MB 。
我正在通过SparkLauncher()
启动spark应用程序。
我的spark应用程序是用Scala编写的bayes net算法,我将通过Java启动它。
我厌倦了在Java(org.apache.spark.mllib.regression.LabeledPoint
)和Scala(rddLabeledPoints.persist(StorageLevel.MEMORY_AND_DISK_SER())
)
rdd.persist(StorageLevel.MEMORY_AND_DISK_SER)
RDD
每次启动我的应用程序时,它最多可以计算12个任务并将分区保存到内存中,但之后会开始抛出heap space and out of memory exceptions
,而且它甚至不会在磁盘上存储单个分区。
Spark版本是1.6.2,hadoop版本是2.6.0,集群操作系统是ubuntu。
为什么会出现这种情况?即使有足够的空间。 (见第二张图) 为什么即使我使用kryo序列化器,每个分区的内存大约是块大小的5倍。
注意:当我拍摄屏幕截图时,其中一个工作节点抛出了异常并清除了该节点的所有分区数据,这就是为什么在第二张图像中只能看到两个工作节点的原因。