Безопасность потоков Spark Accumulator и производительность .value () - PullRequest
1 голос
/ 14 марта 2020

Аккумуляторы не являются поточно-ориентированными. Однако, когда вызывается .value(), в документации говорится, что значения возвращаются в основной поток драйвера. Получает ли программа драйвера последние значения?

Кроме того, стоит ли операция .value() дорого, поскольку она заставляет все рабочие потоки отвечать и отправлять значения в основную программу драйвера? Если так, то каковы альтернативы?

У меня есть свой пользовательский потокобезопасный аккумулятор. Однако я чувствую, что это может быть излишним.

1 Ответ

0 голосов
/ 14 марта 2020

Re: «Аккумуляторы не являются поточно-ориентированными по конструкции.».

Я не нашел этого в документации Spark. Вы можете иметь в виду Java аккумуляторы, я полагаю. Потоковая безопасность аккумулятора в вашем приложении драйвера будет зависеть от того, как вы реализовали программу драйвера.

Однако следует отметить, что аккумуляторы могут быть ненадежными. Ненадежность происходит из-за того, что неудавшаяся задача Spark может быть повторена. В таких случаях аккумуляторы не будут давать вам точных значений.

Re: «Более того, операция .value () является дорогой, поскольку она заставляет все рабочие потоки отвечать и отправлять значения обратно в основную программу драйвера ? "

Я не уверен, так ли это, поскольку независимо от того, используете вы аккумуляторы или нет, исполнителям необходимо отправлять сообщения пульса обратно водителю. Более того, данных может быть немного, если сравнивать с такими действиями, как сбор. (Если вы работаете с большими данными). IMO, вызов .value () не должен быть большой проблемой производительности. Кроме того, в пакетной обработке - приложение драйвера, которое вы обычно хотите вызывать .value (), как только ваши исполнители закончили свои задачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...