где хранится эта информация о состоянии ....
О исполнителях.
По умолчанию существует 200 хранилищ состояний, поскольку имеются разделы.Вы можете изменить его, используя spark.sql.shuffle.partitions
свойство конфигурации.Это дает вам то, что количество разделов эквивалентно количеству государственных хранилищ.Это также говорит о том, что все, что вы используете в качестве ключей группировки, будет перетасовывать ваши данные между разделами, и (скорее всего) некоторые из доступных хранилищ состояний вообще не будут иметь состояния (будут пустыми).
Давайтескажем, у меня есть кластер 10, все 10 будут распределять нагрузку на хранилище, чтобы сохранить эту информацию о состоянии, или есть риск того, что один узел в кластере может быть перегружен?
Да, но это контролируется группировкой ключейи разделы - код, который пишет разработчик Spark.
Я где-то читал, что объект State должен быть Java Serialisable, учитывая, что сериализация Java крайне неэффективна
Не нужно думатьо сериализации, поскольку хранилища состояний являются локальными для задач (для исполнителей).
, есть ли способ настроить это для использования Protobuffer или Avro и т. д. *
Конечно.Вы должны написать свою собственную реализацию хранилища состояний.По умолчанию есть один-единственный HDFSBackedStateStoreProvider
, который настроен с использованием spark.sql.streaming.stateStore.providerClass
свойства внутренней конфигурации.