KMeans имеет несколько параметров для обучение, при этом режим инициализации по умолчанию равен kmeans ||. Проблема заключается в том, что он марширует быстро (менее 10 минут) до первых 13 этапов, но затем полностью зависает, не давая ошибки!
Минимальный пример, который воспроизводит проблему (она будет успешной, если я использую 1000 точек или случайную инициализацию):
from pyspark.context import SparkContext
from pyspark.mllib.clustering import KMeans
from pyspark.mllib.random import RandomRDDs
if __name__ == "__main__":
sc = SparkContext(appName='kmeansMinimalExample')
# same with 10000 points
data = RandomRDDs.uniformVectorRDD(sc, 10000000, 64)
C = KMeans.train(data, 8192, maxIterations=10)
sc.stop()
Задача ничего не делает (это не удается, не удается или не прогрессирует..), как показано ниже. На вкладке "Исполнители" нет активных/неудачных задач. В журналах Stdout и Stderr нет ничего особенно интересного:
Если я использую k=81
вместо 8192, это будет успешным:
Обратите внимание, что два вызова takeSample()
, не должны быть проблемой, поскольку в случайном случае инициализации дважды вызывались.
Итак, что происходит? Является ли Spark Kmeans неспособным масштабировать? Кто-нибудь знает? Можете ли вы воспроизвести?
Если это была проблема с памятью, Я бы получил предупреждения и ошибки, как и раньше.
Примечание: комментарии placeybordeaux основаны на выполнении задания в режиме клиента, где конфигурации драйвера недействительны, вызывая код выхода 143 и т.д. (см. историю изменений), а не в режиме кластера, где не сообщается об ошибке вообще-то, приложение просто зависает.
От нуля323: Почему алгоритм Spark Mllib KMeans очень медленный? связан, но я думаю, что он демонстрирует некоторый прогресс, в то время как моя зависает, я оставил комментарий...