2016-06-18 2 views
1

Я использую кластеры искры 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+ размера кластера ?, или я что-то отсутствует ?.

+0

Benchmark a ** нераспределенный инструмент **, такой как ELKI в сравнении. Обычно он будет работать на удивление хорошо, пока данные вписываются в основную память. Объекты 200k не так много, что должно работать на одном хосте. По моему опыту, распределенный «материал» на удивление медленный. –

ответ

1
org.apache.spark.mllib.clustering.VectorWithNorm.toDense(KMeans.scala:612) 

В этом проблема. Центры кластера преобразуются в плотное представление, а затем передаются всем исполнителям. Это не будет масштабироваться с тысячами функций, что в вашем случае. Оформить заказ SparseML.

+0

Хорошая ссылка на 'SparseML'. Вы использовали его? – javadba

+0

Спасибо за ссылку. Я буду использовать его и посмотреть, будет ли это работать для меня. – Rkz