Если этап Spark завершен, вычисление выполнено? - PullRequest
0 голосов
/ 01 июня 2018

Я просматриваю свою работу в консоли Spark Application Master и в режиме реального времени вижу различные этапы, завершающиеся по мере прохождения Spark через DAG моего приложения.Все идет довольно быстро.Некоторые этапы занимают меньше секунды, другие - минуту или две.

enter image description here

Финальный этап в верхней части списка - rdd.saveAsTextFile(path, classOf[GzipCodec]).Этот этап занимает очень много времени.

Я понимаю, что преобразования выполняются ноль, один или много раз в зависимости от плана выполнения, созданного в результате действий , какsaveAsTextFile или count.

По мере выполнения задания я вижу план выполнения в диспетчере приложений.Некоторые этапы нет.Некоторые присутствуют более одного раза.Это ожидается.Я могу видеть прогресс каждого этапа в режиме реального времени (пока я продолжаю нажимать F5, чтобы обновить страницу).Время выполнения примерно соразмерно с размером ввода данных для каждого этапа.Из-за этого я уверен, что диспетчер приложений показывает мне ход реальных преобразований, а не некоторую мета-активность в DAG.

Так что, если преобразования происходят в каждом из этихэтапы, почему последний этап - простая запись в S3 из EMR - настолько медленный?

Если, как предполагает мой коллега, этапы преобразования, показанные в диспетчере приложений, , а не , действительновычисления, что они делают, что потребляет так много памяти, процессора и времени?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

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

Этапы, которые вы видите для слишком быстрого выполнения, не делают каких-либо значительных вычислений.

If they are not doing actual computation, what are they doing?

Они обновляют DAG.

Когда запускается действие, Spark имеет возможность обратиться к DAG для оптимизации вычислений (что было бы невозможно без ленивого).оптимизация).

Подробнее читайте Преобразование искры - почему оно лениво и в чем преимущество?

Более того, я думаю, что ваш коллега поспешил дать вам ответ,и ошибочно сказал:

transformation are cheap

Истина заключается в операциях СДР ref :

Все преобразования в Spark являются ленивыми, поскольку они не вычисляют своирезультаты сразу.Вместо этого они просто запоминают преобразования, примененные к некоторому базовому набору данных (например, к файлу).Преобразования вычисляются только тогда, когда действие требует, чтобы результат был возвращен в программу драйвера.

Дешевое - это не то слово.

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

Я имею в виду, что каждый упомянутый вами этап, похоже, не вызывает какого-либо действия.В результате на последнем этапе необходимо учитывать все предыдущие этапы и выполнять всю необходимую работу, но помните, с оптимизированной точки зрения Spark.

0 голосов
/ 01 июня 2018

Я предполагаю, что настоящая путаница здесь:

преобразования дешевы

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

В общем, преобразования - это места, где происходит настоящая работа.Выходные действия, исключая IO хранилища / сети, обычно обходятся дешевле, чем логика, выполняемая в преобразованиях.

...