Возможно ли, чтобы работник был координатором и отправлял других работников в Спарк? - PullRequest
0 голосов
/ 03 сентября 2018

Я новичок в Spark, и у меня есть проект, в котором cluster есть *1003*, который собирает данные из других nodes, выполняет некоторые вычисления и отправляет global data array обратно до nodes.

Я пытаюсь реализовать это Spark, и я создал его с driver и broadcast variables, но я не уверен насчет collect() в больших данных.

Возможно ли сделать это только между workers? Что-то вроде repartition для одного worker и отправка вычисления обратно в качестве ввода в workers?

1 Ответ

0 голосов
/ 03 сентября 2018

Краткий ответ - Нет, Spark не предоставляет API для рабочего узла (исполнителя) для взаимодействия с другими работниками. Я могу придумать несколько обходных путей (mapPartitions + некоторая координация ZK внутри), но это не то, для чего предназначен Spark, и не то, что вы просили.

Вы можете , очевидно, перераспределить ваши данные только на один раздел (repartition(1)), то есть только на одного исполнителя, но вы должны убедиться, что данные достаточно малы, чтобы поместиться в один узел. Затем вы можете отправить результат обратно драйверу (collect) и отправить его обратно в кластер. collect() столь же «опасен», как и repartition(1) - вы должны убедиться, что данные вписываются в ваш драйвер. В этом случае вы можете в первую очередь подумать о централизованном вычислении драйвера, если ваш процесс драйвера имеет достаточные ресурсы.

...