Spark - постоянный RDD с памятью уровня хранения и дисковым сервером не сохраняет данные на диск
У меня есть машина с 4 кластерами (1 мастер и 3 рабочих), каждая машина с 4 ядрами и 16 ГБ памяти, и я использую 2 ядра и 8 ГБ памяти на рабочий узел.
Итого всего 6 ядер с 24 ГБ памяти.
У меня есть файл данных 5 ГБ в формате hdf с 41 блоком, каждый блок имеет 128 МБ.
Я запускаю искровое приложение через SparkLauncher()
,
Мое искровое приложение - алгоритм Байеса, написанный на Scala, и я запускаю его через Java.
Я устал сохраняющиеся org.apache.spark.mllib.regression.LabeledPoint
СДР в обоих Java (rddLabeledPoints.persist(StorageLevel.MEMORY_AND_DISK_SER())
) и Скала (rdd.persist(StorageLevel.MEMORY_AND_DISK_SER)
)
Каждый раз, когда я запускаю свое приложение, оно вычисляет до 12 задач и сохраняет разделы в памяти, но после этого оно начинает выбрасывать heap space and out of memory exceptions
и более того, он даже не хранит ни одного раздела на диске.
Версия Spark - 1.6.2, версия hadoop - 2.6.0, а кластерная ОС - Ubuntu.
Почему это поведение? Даже когда достаточно места доступно. (См. Второе изображение) И почему объем памяти на раздел примерно в 5 раз превышает размер блока, даже когда я использую сериализатор kryo.
Примечание. Когда я сделал снимок экрана с одним из исключений рабочего узла, он очистил все данные раздела этого узла, поэтому на втором изображении видны только два рабочих узла.