Что происходит во время «простоя», когда Spark читает большие наборы данных на S3? - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть набор данных JSON в AWS S3 - скажем, по 100 КБ файлов, каждый размером около 5 МБ - и я использую Spark 2.2 DataFrameReader для чтения и обработки их с помощью:

sparkSession.read.json(...)

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

Что Спарк делает в этот период и как я могу помочь ему ускориться?

У меня было две идеи, но обе они кажутся неправильными.

МойПервой идеей было то, что Spark пытается перечислить все файлы, которые ему понадобятся для вычисления.Я проверил это, фактически создав список файлов в автономном режиме и передав их в Spark напрямую, а не используя синтаксис glob:

val fileList = loadFiles() sparkSession.read.json(fileList:_*)

Это фактически заставляло период "зависания" длиться дольше!

Моя вторая идея заключалась в том, что Spark использует это время для создания схемы для всех данных.Но я исключил это, вручную указав схему:

val schema = createSchema() sparksession.read.schema(schema).json(...)

Здесь период "зависания" был таким же, как и раньше, хотя в целом вычисления были намного быстрее.

Так что я не совсем уверен, что происходит или как его диагностировать.Кто-нибудь еще сталкивался с этим?

1 Ответ

0 голосов
/ 21 ноября 2018

Стоимость перечисления деревьев каталогов в S3 очень высока, "разбиение".Это то, что вы испытываете.

Исправления

  • меньше, большие файлы
  • меньшее дерево каталогов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...