2015-01-23 2 views
3

Я пытаюсь понять основы Спарк внутренностей и Спарк документации для подачи заявок в локальном режиме, говорит для spark-submit --master настройки:Apache режим Спарк автономный: количество ядер

местного [K] Run Спарк локально K рабочих потоков (в идеале установите это значение количество ядер на вашем компьютере).

local [*] Запустить Spark локально с столько рабочих потоков, сколько логических ядер на вашей машине.

Поскольку все данные хранятся на одном локальном компьютере, он не использует распределенные операции на RDD с.

Как это работает и что происходит внутри, когда Spark использует несколько логических ядер?

ответ

7

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

Если у вас есть набор данных разумного размера, скажите что-то с десятком разделов, вы можете измерить время, необходимое для использования локального [1] vs local [n] (где n - количество ядер на вашем компьютере) , Вы также можете увидеть разницу в использовании вашей машины. Если у вас есть только одно ядро, предназначенное для использования, оно будет использовать только 100% одного ядра (плюс некоторые дополнительные для сбора мусора). Если у вас есть 4 ядра и укажите местный [4], он будет использовать 400% ядра (4 ядра). И время выполнения может быть значительно сокращено (хотя обычно не 4x).

+2

Два комментария. Во-первых, для потоковой передачи вам необходимо выделить выделенный поток для каждого источника ввода, а также по крайней мере один для основной обработки, поэтому, если вы слушаете один сокет, вам понадобится хотя бы «local [2]». Во-вторых, иногда один поток будет быстрее, чем несколько потоков, если накладные расходы перевешивают преимущества. –

+1

Это интересно - я экспериментировал, увидев ускорение, а не линейное. Предположим, я создаю задание с одиночным RDD, которое подходит для машинной памяти. Правильно ли, что RDD не будут разделены? Затем, как операции распараллеливаются с несколькими ядрами? –

+0

вы можете разделить RDD на любое количество разделов, которые вы хотите. По умолчанию, если вы загружаете RDD из HDFS, у него будет несколько разделов, равное количеству блоков, которые он использовал в HDFS. Если вы загружаете файл из локальной файловой системы, вы можете указать номера разделов, в которые вы хотите разбить. Экспериментируя, вы можете сопоставить это число с тем, что наиболее эффективно; Я бы предложил попробовать 1x, 2x или 4x количество ядер вашего компьютера. – David

Смежные вопросы