Где выполняется искровое задание преобразования и действия?

#apache-spark #action #transformation #worker #master

#apache-spark #Экшен #преобразование

Вопрос:

Я использую Spark Python для завершения некоторых работ, это здорово, но у меня есть вопрос:

Где выполняется искровое задание преобразования и действия?

Выполняется ли задание преобразования в Spark Master (или драйвере), в то время как задание действия выполняется в Workers (исполнителях), или оба они выполняются в Workers (исполнителях)

Ответ №1:

Рабочие (или ведомые) запускают экземпляры Spark, в которых исполнители живут для выполнения задач.

Преобразования выполняются на рабочем сервере, при вызове метода действия вычисленные данные возвращаются драйверу.

введите описание изображения здесь

Приложение в Spark выполняется в три этапа:

1. Создайте график RDD, то DAG (directed acyclic graph) есть RDD для представления всего вычисления.

2. Создайте график этапов, DAG of stages т. Е. логический план выполнения, основанный на графике RDD. Этапы создаются путем разрыва графика RDD на границах перемешивания.

3. На основе плана, schedule and execute задачи для работников.

Ответ №2:

Преобразования выполняются у исполнителей.

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

Комментарии:

1. Привет, Илиас, спасибо за ответ! Мне все еще интересно, почему преобразование должно выполняться у исполнителей, поскольку это ленивая оценка?

2. Привет, Олаф, отложенная оценка означает, что преобразования не выполняются, если за ними не следует действие. Они будут выполняться только после вызова действия. например, my_rdd = sc.parallelize([1,2,3,4]), my_rdd = my_rdd.map(лямбда x: x 1) . Преобразование не будет выполнено, потому что нет действия.

Ответ №3:

Когда в RDD вызывается какое-либо действие, Spark создает DAG и отправляет планировщику DAG.

Планировщик DAG делит операторы на этапы задач. Этап состоит из задач, основанных на разделах входных данных. Планировщик базы данных объединяет операторы вместе.

Этапы передаются планировщику задач.Планировщик задач запускает задачи через диспетчер кластеров.(Spark Standalone / Yarn / Mesos). Планировщик задач не знает о зависимостях этапов.

Задачи (преобразование) выполняются на рабочих (исполнителях), и когда вызывается действие (take / collect), оно возвращает данные в драйвер.

Комментарии:

1. Привет, Габбер, спасибо за ответ. итак, искровые действия выполняются в Executor? но планировщик задач возвращает результаты драйверу?

2. @Olafapple преобразования выполняются на рабочих станциях, и когда вызывается метод действия, вычисленные данные возвращаются драйверу