Расположение HadoopPartition
У меня есть набор данных в CSV-файле, который занимает два блока в HDFS и реплицируется на двух узлах, A и B. У каждого узла есть копия набора данных.
Когда Spark начинает обрабатывать данные, я видел два способа, как Spark загружает набор данных в качестве входных данных. Он либо загружает весь набор данных в память на одном узле и выполняет большинство задач на нем, либо загружает набор данных на два узла и распределяет задачи на обоих узлах (основываясь на том, что я наблюдал на сервере истории). В обоих случаях имеется достаточная емкость для хранения целых наборов данных в памяти.
Я повторил один и тот же эксперимент несколько раз, и Спарк, казалось, чередовал эти два пути. Предположительно, Spark наследует входное разделенное местоположение, как в задании MapReduce. Насколько я понимаю, MapReduce должен иметь возможность использовать два узла. Я не понимаю, почему Spark или MapReduce будут чередоваться между этими двумя случаями.
Когда для обработки используется только один узел, производительность ухудшается.
1 ответ
При загрузке данных в Spark вы можете указать минимальное количество разделений, и это заставит Spark загружать данные на несколько машин (с помощью API textFile, который вы добавили бы. minPartitions=2
на ваш звонок.