Юваль уже дал правильный ответ в комментариях, но я хотел бы его расширить:
Да, любая предоставляемая вами функция может выполняться распределенным образом. Прежде всего, как указал Юваль, весь ваш код распределяется в вычислительном кластере при отправке задания.
Недостающая часть заключается в том, что распределяется и сама ваша работа. Если вы проверите API, вы увидите его в интерфейсах:
public Pattern<T, F> where(IterativeCondition<F> condition) { ...
Паттерн ожидает некоторого условия. Если вы посмотрите на его определение, то увидите следующее.
public abstract class IterativeCondition<T> implements Function, Serializable { ... }
Таким образом, то, что вы передаете where
, должно быть Serializable
. Ваш клиент может сериализовать всю вашу работу, включая все определения функций, и отправить ее диспетчеру заданий, который распределяет ее по различным диспетчерам задач. Поскольку каждая часть инфраструктуры также имеет банку заданий, она может десериализовать задание, включая вашу функцию. Десериализация также означает создание копий функции, необходимой для распределенного выполнения.
person
Arvid Heise
schedule
21.04.2020