У меня есть вариант использования, когда мы транслируем события, и для каждого события мне нужно выполнить поиск. Поиски находятся в Redis, и мне интересно, как лучше всего создавать соединения. Искровая потоковая передача будет запускать 40 исполнителей, и у меня есть 5 таких заданий потоковой передачи, все из которых подключаются к одному и тому же кластеру Redis. Поэтому я смущен, какой подход я должен использовать для создания соединения Redis.
Создайте объект подключения в драйвере и передайте его исполнителям (не уверен, что это действительно работает, поскольку я должен сделать этот объект сериализуемым). Могу ли я сделать это с широковещательными переменными?
Создайте соединение Redis для каждого раздела, однако у меня есть код, написанный таким образом.
val update = xyz.transform(rdd => { // on driver if (xyz.isNewDay) { ..... } rdd }) update.foreachRDD(rdd => { rdd.foreachPartition(partition => { partition.foreach(Key_trans => { // perform some lookups logic here } } })
Итак, теперь, если я создам соединение внутри каждого раздела, это будет означать, что для каждого RDD и для каждого раздела в этом RDD я буду создавать новое соединение.
Есть ли способ поддерживать одно соединение для каждого раздела и кэшировать этот объект, чтобы мне не приходилось снова и снова создавать соединения?
Я могу добавить больше контекста/информации, если это необходимо.