Spark: master local[*] намного медленнее, чем master local

У меня есть EC2 настроить с r3.8xlarge (32 cores, 244G RAM),

В моем 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 ядрами?

1 ответ

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

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

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

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

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

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

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