Кеш Spark Dataset использует только одного исполнителя - PullRequest
0 голосов
/ 28 октября 2018

У меня есть процесс, который читает таблицу кустов (parquet-snappy) и создает набор данных объемом 2 ГБ.Это итеративный (~ 7 КБ) процесс, и этот набор данных будет одинаковым для всех итераций, поэтому я решил кэшировать набор данных.

Каким-то образом задача кеширования выполняется только для одного исполнителя, и кажется, что кеш находится только для этого одного исполнителя.что приводит к задержке, OOM и т. д.

Это из-за паркета?Как сделать так, чтобы кеш распределялся по нескольким исполнителям?

Вот конфиг искры:

  1. Исполнители: 3
  2. Ядро: 4
  3. Память: 4 ГБ
  4. Раздел:200

попробовал перераспределить и настроить конфиг, но не повезло.

1 Ответ

0 голосов
/ 30 октября 2018

Я отвечаю на свой вопрос, но это интересная находка, и ее стоит поделиться, как предложил @thebluephantom.

Итак, здесь была ситуация с искровым кодом: я читал данные из 3 паркетных таблиц улья и строил набор данных,Сейчас в моем случае я читаю почти все столбцы из каждой таблицы (около 502 столбцов), и паркет не подходит для этой ситуации.Но интересным было то, что spark не создавал блоки (разделы) для моих данных и не кэшировал весь набор данных (~ 2 ГБ) всего за одного исполнителя.

Более того, во время моих итераций только один исполнитель выполнял все задачи.

Кроме того, spark.default.parallelism и spark.sql.shuffle.partitions не были под моим контролем.После изменения его в формат Avro я мог настроить разделы, перемешивание, задачи каждого исполнителя и т. Д. В соответствии со своими потребностями.

Надеюсь, это поможет!Спасибо.

...