как перераспределить RDD в зависимости от размера данных - PullRequest
0 голосов
/ 01 июня 2018

Я работаю над проектом Stream Streaming, который берет данные из Kafka, применяет некоторые правила и сохраняет данные в Hive.Моя проблема - скорость приема данных не фиксирована.60 секунд может быть 1 миллионом пришедшего сообщения или может быть 1. Я хочу добавить перераспределение в Dstream.Потому что есть только 3 раздела Dstream, неспособных обработать миллионы записей в течение минуты.перераспределение дает проблемы во время менее 20 записей.Он создает несколько небольших файлов в Hive.

dataStream.map(_._2).repartition(20)

Мой вопрос заключается в том, как я могу разделить rdd на основе размера rdd.Так что он может обрабатывать одно сообщение или 1 миллион сообщений.

1 Ответ

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

Вы не можете сделать это любым полезным способом.Даже если вы решите использовать transform

 stream.transform { rdd => {
   val n = rdd.count
   rdd.repartition(getNumParttitions(n))
 }}

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

Вместо этого я бы рекомендовал правильную конфигурацию, основанную либо на spark.streaming.kafka.maxRatePerPartition (старый API), либо на настройке противодавления (spark.streaming.backpressure.enabled, spark.streaming.backpressure.initialRate, более новый API)

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