Spark делает дорогие вызовы S3 API - PullRequest
1 голос
/ 08 марта 2020

У меня есть искровое задание, которое получает список ~ 100k файлов и вызывается каждые 10 минут. Эти файлы есть в с3. Пути выглядят следующим образом:

s3://<bucket>/<folder>/<file_name>

Файлы загружаются следующим образом:

df = spark.read.option("mergeSchema", "true").schema(schema).parquet(*files)

За кулисами кажется, что spark делает вызов API LIST и HEAD API для каждого файла. Это довольно расточительно, так как это файлы , а не каталоги и гарантированно существует из-за характера задания. Я посмотрел на кодовую базу искры и, похоже, это поведение является частью InMemoryFileIndex . Есть ли способ настроить спарк для непосредственного совершения вызовов GET и пропуска вызовов списка / заголовка?

1 Ответ

1 голос
/ 24 марта 2020

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

Проблема здесь в том, что уровень файловой системы не знает, что такое «природа задания», поэтому время от времени выполняет свои собственные проверки

Похоже также на InMemoryFileIndex. scala довольно неэффективно; он выполняет свои собственные действия, за исключением некоторых жестко закодированных битов для HDFS, и, похоже, снова сканирует все файлы, которые он только что перечислил.

Да, возможности для совершенствования, как говорят проекты с открытым исходным кодом. Но, как правило, они говорят: «Пожалуйста, отправьте патч»

...