Как проверить, что ReduceByKey эффективно выполняется при потоковой передаче - PullRequest
0 голосов
/ 29 мая 2019

Я использую автономный кластер Spark 2.3.1.Моя работа сводится к потреблению мини-пакетов Kafka каждые 2 минуты и записи агрегации в некоторый магазинРабота выглядит следующим образом:

val stream = KafkaUtils.createDirectStream(...)
stream.map(x=> Row(...))
   .flatMap(r=> ... List[Row] )
   .map(r=> (k,r))
   .reduceByKey((r1, r2) => r)
   .map { case (_, v) => v} 
   .foreachRDD { (rdd, time) => // write data}

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

enter image description here Мой вопрос - насколько я понимаю, искраследует использовать комбинатор для операции reduByKey, который должен значительно уменьшить размер перемешивания.Почему DAG не показывает это, и как я могу это проверить?

Дополнительный вопрос - если размер shuffle равен 2.5G, он попадает на диск?Какие свойства конфигурации / метрики я должен изучить, чтобы проверить, что задание настроено и работает оптимально.Для этой работы исполнители бегут с 10G памяти

1 Ответ

1 голос
/ 29 мая 2019

Первый вопрос: Внутренние вызовы ReduceByKey вызывает функцию combBykey.В результате вы не увидите различий в выполнении DAG, то есть задачи будут одинаковыми.

2-й вопрос, пожалуйста, сделайте новую публикацию.Поскольку у вас нет сведений о рабочей области, диск случайного разлива должен дать вам указание.

...