Простой ввод textFileStream: все строки / записи отправляются одному исполнителю. - PullRequest
0 голосов
/ 03 марта 2019

Я использую python с потоковой передачей искры, и идея проста: сделать монитор потоковой передачи определенным каталогом, и как только появится новый txt-файл с несколькими существующими строками, он обрабатывается.

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

Код выглядит следующим образом:

lines = stream_context.textFileStream(monitor_dir).repartition(4)
lines.foreachRDD(process_stream)

def process_stream(time, rdd):
    print('rdd partitions: {}'.format(rdd.getNumPartitions()))
    rdd.map(lambda line: parse_each_line(line, other_params)).count()

Я получаю 4 исполнителя, поэтому я перераспределен как 4, и яя запускаю его в реальном кластере с режимом кластера, и когда он печатается в методе "process_stream", rdd.getNumPartitions () == 4.

Поэтому не уверен, в чем проблема, это вызвано "Размер входного сплита », который находится в файловой системе Hadoop под капотом?

1 Ответ

0 голосов
/ 04 марта 2019

С .repartition(4) каждый СДР будет обрабатываться 4 различными задачами.Но нет такого тонкого детального контроля со стороны пользователя, чтобы заставить каждую задачу выполняться на другом исполнителе.

Полагаю, для тестирования вы могли бы установить значение spark.task.cpus на spark.executor.cores (заставляя каждую задачу захватывать все ядра процессора, назначенные исполнителю).Но это не то, что вы хотите сделать в реальном проекте.

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