Асинхронное совместное использование объектов в Spark - PullRequest
0 голосов
/ 30 мая 2018

У меня есть базовое понимание искры, и я пытаюсь найти что-то, что может помочь мне достичь следующего:

Пул объектов совместно используется всеми узлами, асинхронно.

То, о чем я сейчас думаю, это, скажем, десять узлов, пронумерованных от 1 до 10.
Если у меня есть один объект, мне придется сделать мой объект синхронным, чтобы он был доступен любому узлу,Я не хочу этого.Второй вариант, я могу иметь пул, скажем, 10 объектов.Я хочу написать свой код таким образом, чтобы узел № 1 всегда использовал объект № 1, узел № 2 всегда использовал объект № 2 и т. Д.

Пример такого подхода был бы довыполняя задачу, получите идентификатор потока и используйте номер объекта (threadID% 10).Это приведет к большому количеству коллизий и не будет работать.

Есть ли способ, которым я могу каким-то образом получить nodeID или processID и заставить мой код извлекать объект в соответствии с этим идентификатором?Или каким-то другим способом создать асинхронный пул объектов в моем кластере?

Я извиняюсь, если это звучит тривиально, я только начинаю и не могу найти много ресурсов, относящихся к моим сомнениям, в Интернете.

PS: я использую настройку SparkStreaming + Kafka + YARN, если это имеет значение.

1 Ответ

0 голосов
/ 31 мая 2018

Spark автоматически распределяет данные по всем доступным узлам кластера;вам не нужно контролировать или отслеживать, где фактически хранятся разделы.Некоторые операции RDD также требуют перетасовки, которая полностью управляется Spark, поэтому вы не можете полагаться на расположение разделов.

Совместное использование объекта имеет смысл только в том случае, если он неизменен.Каждый рабочий узел получает копию исходного объекта, и любые локальные изменения в нем не будут отражаться на других узлах.Если это то, что вам нужно, вы можете использовать sc.broadcast() для эффективного распределения объекта по всем работникам до параллельной операции.

...