0

У меня есть EC2 с r3.8xlarge (32 cores, 244G RAM).Spark: master local [*] намного медленнее, чем мастер локальный

В моем Spark приложения, я читаю два CSV-файлы из S3 с помощью Spark-CSV из DataBrick, каждый из CSV имеет около 5 миллионов строк. Я представляю unionAll два DataFrames и запускаю dropDuplicates на комбинированном DataFrame.

Но когда у меня есть,

val conf = new SparkConf() 
      .setMaster("local[32]") 
      .setAppName("Raw Ingestion On Apache Spark") 
      .set("spark.sql.shuffle.partitions", "32") 

Спарк медленнее, чем .setMaster("local")

Не было бы быстрее, с 32 ядрами?

ответ

0

Well spark - это не операционная система Windows, которая с самого начала могла работать с максимальной возможной мощностью, вам нужно настроить ее для вашего использования.

Прямо сейчас вы прямо сказали, чтобы начать зажигание и обработать мои вещи на одном узле с 32 ядрами. Это не то, на что способен Спарк. Предполагается, что распределенная система запускается на многоузловом кластере, где лучше всего работает.

Причина проста, даже если вы используете 32 ядра, что же касается проблемы ввода-вывода? Поскольку теперь вы используете let's, если он запустил 30 исполнителей, то это 32 процесса чтения с того же диска.

Вы указали 32 ядра, что относительно памяти исполнителя? У обеих машин был тот же баран, где вы тестировали.

Вы конкретно указали, что хотите 32 раздела, если данные очень маленькие, что является большим количеством накладных расходов. В идеале вы не должны указывать раздел до тех пор, пока не узнаете конкретно, что делаете, или выполняете повторяющуюся задачу, и знаете, что данные будут одинаковыми все время.

Если вы правильно настроили искру с 32-ядерным ядром, работа будет работать быстрее, чем «локальная», которая в основном работает на одном ядре.