Я использую кластеры искры k-уровня под модулем Ml, и я программирую PySpark. Модуль работает до 200 кластеров, но он дает OutOfMemoryError
после того, как я пройду 300 кластеров и более. Мои данные содержат 200 тыс. Объектов и 25 тыс. Функций для каждого объекта. Я следую рекомендациям, указанным в разделе class pyspark.ml.clustering.KMeans
по ссылке pyspark ML mocumentation. Единственное различие между кодом, упомянутым в этой документации и моей, заключается в том, что я использую разреженные векторы вместо плотного.Spark k-означает OutOfMemoryError
У меня нет аппаратного ограничения, так как у меня есть многозадачная настройка кластера с более чем 700 ядрами и 2 ТБ памяти. Я искал эту проблему, и большинство ссылок заставляют меня делать одну или все из следующих конфигураций. Ниже приведено множество вещей, которые я пытался:/увеличить память водителя
- устанавливается с помощью
conf.set("spark.driver.memory", "64g")
- набора параллельности
conf.set("spark.default.parallelism","1000")
- набора/увеличить долю памяти
conf.set("spark.storage.memoryFraction", "1")
В дополнении к выше конфигурации я установил операционную память как 16g и жил как 150 .Unfortuna ничего не получилось, и я продолжаю получать следующую ошибку (ошибка усечена).
Py4JJavaError: An error occurred while calling o98.fit. : java.lang.OutOfMemoryError: Java heap space at org.apache.spark.mllib.linalg.SparseVector.toArray(Vectors.scala:678) at org.apache.spark.mllib.clustering.VectorWithNorm.toDense(KMeans.scala:612)
Означает ли эта искра не может справиться даже 200k*25K
набор данных для 300+ размера кластера ?, или я что-то отсутствует ?.
Benchmark a ** нераспределенный инструмент **, такой как ELKI в сравнении. Обычно он будет работать на удивление хорошо, пока данные вписываются в основную память. Объекты 200k не так много, что должно работать на одном хосте. По моему опыту, распределенный «материал» на удивление медленный. –