Где хранятся переменные вещания в Spark? - PullRequest
0 голосов
/ 19 апреля 2020

Согласно официальным документам, «переменные широковещания позволяют программисту хранить переменную, доступную только для чтения, на каждой машине, а не отправлять ее копию с задачами»

Допустим, в моей команде spark-submit i дать -num-исполнителей как 10. Мой кластер представляет собой кластер из 2 узлов, и пока предположим, что 5 исполнителей запущены на узле 1, а следующие 5 исполнителей запущены на узле 2.

scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)

Согласно do c, будет ли доступен этот broadcastVar в памяти каждого исполнителя, то есть широковещательный интервал доступен в виде 10 копий?

или

Будет ли этот широковещательный доступ доступен в дисковой памяти каждого узла. Таким образом, каждый из двух узлов получает копию broadcastVar, и, следовательно, все исполнители, работающие с каждого узла, могут получить этот broadcastVar?

1 Ответ

1 голос
/ 19 апреля 2020

Рассмотрим, как вещание реализовано в TorrentBroadcast class:

The driver divides the serialized object into small chunks and
stores those chunks in the BlockManager of the driver.

On each executor, the executor first attempts to fetch the object from its BlockManager. If
it does not exist, it then uses remote fetches to fetch the small chunks from the driver and/or
other executors if available. Once it gets the chunks, it puts the chunks in its own
BlockManager, ready for other executors to fetch from. we can see that broadcast variables are stored in executor's BlockManager

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

То же самое означает аккумуляторные переменные.

...