Расположение HadoopPartition

У меня есть набор данных в CSV-файле, который занимает два блока в HDFS и реплицируется на двух узлах, A и B. У каждого узла есть копия набора данных.

Когда Spark начинает обрабатывать данные, я видел два способа, как Spark загружает набор данных в качестве входных данных. Он либо загружает весь набор данных в память на одном узле и выполняет большинство задач на нем, либо загружает набор данных на два узла и распределяет задачи на обоих узлах (основываясь на том, что я наблюдал на сервере истории). В обоих случаях имеется достаточная емкость для хранения целых наборов данных в памяти.

Я повторил один и тот же эксперимент несколько раз, и Спарк, казалось, чередовал эти два пути. Предположительно, Spark наследует входное разделенное местоположение, как в задании MapReduce. Насколько я понимаю, MapReduce должен иметь возможность использовать два узла. Я не понимаю, почему Spark или MapReduce будут чередоваться между этими двумя случаями.

Когда для обработки используется только один узел, производительность ухудшается.

1 ответ

При загрузке данных в Spark вы можете указать минимальное количество разделений, и это заставит Spark загружать данные на несколько машин (с помощью API textFile, который вы добавили бы. minPartitions=2 на ваш звонок.

Другие вопросы по тегам