SparkSQL Количество задач - PullRequest
       21

SparkSQL Количество задач

0 голосов
/ 27 сентября 2018

У меня есть отдельный Spark кластер (который состоит из двух рабочих с 2 ядрами в каждом).Я запускаю SQLQuery, который объединяет 2 кадра данных и показывает результат.У меня есть несколько вопросов, касающихся приведенного выше примера.

val df1 = sc.read.text(fn1).toDF()
val df2 = sc.read.text(fn2).toDF()

df1.createOrReplaceTempView("v1")
df2.createOrReplaceTempView("v2")

val df_join = sc.sql("SELECT * FROM v1,v2 WHERE v1.value=v2.value AND v2.value<1500").show()

Планировщик DAG - Количество задач

Из того, что я понял до сих пор, когда я отправляю искруприложение SparkContext является порождением для обработки задания (где задание - это печать строк результатов).SparkContext создает экземпляр планировщика задач, который затем создает DAGScheduler.С помощью простого механизма событий DAGScheduler обрабатывает задание на выполнение (функция handleJobSubmitted из кода).Запрос SparkSQL был преобразован в физический план выполнения (через Catalyst Optimizer), а затем в RDD-график (с функцией toRdd ).DagScheduler получает RDD-график и рекурсивно создает все этапы.

Я не понимаю, как он находит Число задач (до выполнения любого этапа) на последнем этапе, имея в виду, что этап результатаэто тот, который выполняет объединение (и печатает результаты).Количество данных (и количество и число их разделов, которые определяют количество задач) у нас неизвестно до тех пор, пока родительские этапы не завершат свое выполнение.

Параллельное выполнение этапов

Каждый из двух первых этапов не зависит от другого, так как загружает данные из разных файлов.Я читал много постов, в которых говорится, что этапы, между которыми нет зависимостей , МОГУТ * выполняться 1021 * параллельно с кластером.Какое условие подразумевает, что задачи независимых этапов выполняются параллельно?

Зависимости задач

Наконец, я прочитал, что планировщик задач не знаето сценических зависимостях .Если я имею в виду, что каждая стадия в Spark представляет собой TakSet (то есть набор независимых задач, каждая задача с одинаковой функциональностью упакована с различным разделом данных), то TaskScheduler также не знает о зависимостях между задачами разных стадий.,В результате, как и когда задача знает данные, для которых она будет выполнять функцию?Если, например, задача знает априори, где искать свои входные данные, то они могут быть запущены, как только они станут доступны.

...