1 added
1 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: kubernetes, spark, персистентные тома</p>
1
<p>Теги: kubernetes, spark, персистентные тома</p>
2
<p>Уже начиная со Spark версии 2.4, в случае применения<strong>Spark on Kubernetes</strong>появилась возможность монтировать 3 типа томов. Рассмотрим их подробнее:</p>
2
<p>Уже начиная со Spark версии 2.4, в случае применения<strong>Spark on Kubernetes</strong>появилась возможность монтировать 3 типа томов. Рассмотрим их подробнее:</p>
3
<ul><li><strong><a>emptyDir</a></strong>. Эта директория изначально пуста и существует до тех пор, пока работает под. По сути, она полезна именно для временного хранения. Поддерживать ее можно посредством SSD, диска ноды либо сетевого хранилища;</li>
3
<ul><li><strong><a>emptyDir</a></strong>. Эта директория изначально пуста и существует до тех пор, пока работает под. По сути, она полезна именно для временного хранения. Поддерживать ее можно посредством SSD, диска ноды либо сетевого хранилища;</li>
4
<li><strong><a>hostpath</a></strong>. В данном случае в ваш под монтируется директория непосредственно из текущей ноды;</li>
4
<li><strong><a>hostpath</a></strong>. В данном случае в ваш под монтируется директория непосредственно из текущей ноды;</li>
5
<li>статически и заблаговременно создаваемый<strong><a>PersistentVolumeClaim</a></strong>. Не что иное, как Kubernetes-абстракция, предназначенная для различных типов персистентного хранилища. Как уже было упомянуто выше, пользователь должен создавать PersistentVolumeClaim заранее. Остается добавить, что существование тома к поду не привязано.</li>
5
<li>статически и заблаговременно создаваемый<strong><a>PersistentVolumeClaim</a></strong>. Не что иное, как Kubernetes-абстракция, предназначенная для различных типов персистентного хранилища. Как уже было упомянуто выше, пользователь должен создавать PersistentVolumeClaim заранее. Остается добавить, что существование тома к поду не привязано.</li>
6
</ul><p>Начиная со Spark версии 3.1, у пользователей появились 2 новых варианта:</p>
6
</ul><p>Начиная со Spark версии 3.1, у пользователей появились 2 новых варианта:</p>
7
<ul><li><strong>NFS</strong>;</li>
7
<ul><li><strong>NFS</strong>;</li>
8
<li>динамически создаваемый<strong>PersistentVolumeClaims</strong>.</li>
8
<li>динамически создаваемый<strong>PersistentVolumeClaims</strong>.</li>
9
</ul><p>Давайте рассмотрим их более детально.</p>
9
</ul><p>Давайте рассмотрим их более детально.</p>
10
<h2>NFS (Network File System)</h2>
10
<h2>NFS (Network File System)</h2>
11
-
<p><strong><a>NFS</a></strong>представляет собой том, который могут несколько подов использовать в о��но и то же время, причем этот том можно наполнить данными заранее. По сути, речь идет о способе обмена информацией, конфигурациями и кодом между Spark-приложениями или же между драйвером и исполнителем непосредственно внутри какого-либо Spark-приложения. Так как в Kubernetes отсутствует NFS-сервер, вы можете запускать его самостоятельно либо задействуя облачный сервис.</p>
11
+
<p><strong><a>NFS</a></strong>представляет собой том, который могут несколько подов использовать в одно и то же время, причем этот том можно наполнить данными заранее. По сути, речь идет о способе обмена информацией, конфигурациями и кодом между Spark-приложениями или же между драйвером и исполнителем непосредственно внутри какого-либо Spark-приложения. Так как в Kubernetes отсутствует NFS-сервер, вы можете запускать его самостоятельно либо задействуя облачный сервис.</p>
12
<p>После того, как NFS создан, этот том можно без труда монтировать в Spark-приложение посредством следующих настроек:</p>
12
<p>После того, как NFS создан, этот том можно без труда монтировать в Spark-приложение посредством следующих настроек:</p>
13
<p>Таким образом, NFS представляет собой популярный способ обмена данными, производимый между любыми Spark-приложениями. Ну и тот факт, что теперь он может работать поверх Kubernetes, разумеется, не может не радовать.</p>
13
<p>Таким образом, NFS представляет собой популярный способ обмена данными, производимый между любыми Spark-приложениями. Ну и тот факт, что теперь он может работать поверх Kubernetes, разумеется, не может не радовать.</p>
14
<h2>PVC</h2>
14
<h2>PVC</h2>
15
<p>Второй момент - динамический PVC. Считается, что PVC представляет собой более удобный способ применения<a>персистентных томов</a>. Раньше надо было сначала создавать PVC, ну а потом их монтировать. Это имело свои минусы, ведь в случае применения динамического выделения пользователь не знает, сколько можно создать исполнителей в процессе работы приложения, то есть можно констатировать, что старый способ был несколько неудобен. Кроме того, приходилось самому "чистить" ненужные<strong>PersistentVolumeClaims</strong>либо мириться с потерей места в хранилище.</p>
15
<p>Второй момент - динамический PVC. Считается, что PVC представляет собой более удобный способ применения<a>персистентных томов</a>. Раньше надо было сначала создавать PVC, ну а потом их монтировать. Это имело свои минусы, ведь в случае применения динамического выделения пользователь не знает, сколько можно создать исполнителей в процессе работы приложения, то есть можно констатировать, что старый способ был несколько неудобен. Кроме того, приходилось самому "чистить" ненужные<strong>PersistentVolumeClaims</strong>либо мириться с потерей места в хранилище.</p>
16
<p>Но вот, появился Spark версии 3.1, и все стало динамическим и автоматизированным. Теперь при инициализации Spark-приложения либо в ходе динамического выделения, когда пользователь запрашивает новых исполнителей, в Kubernetes динамически формируется и создается PersistentVolumeClaims, который в автоматическом режиме предоставляет новый PersistentVolumes запрошенного<a>класса хранилища</a>. При этом в случае удаления пода ассоциированные с этим подом ресурсы удаляются тоже автоматически.</p>
16
<p>Но вот, появился Spark версии 3.1, и все стало динамическим и автоматизированным. Теперь при инициализации Spark-приложения либо в ходе динамического выделения, когда пользователь запрашивает новых исполнителей, в Kubernetes динамически формируется и создается PersistentVolumeClaims, который в автоматическом режиме предоставляет новый PersistentVolumes запрошенного<a>класса хранилища</a>. При этом в случае удаления пода ассоциированные с этим подом ресурсы удаляются тоже автоматически.</p>
17
<p><em>По материалам https://towardsdatascience.com/apache-spark-3-1-release-spark-on-kubernetes-is-now-generally-available-65cccbf1436b.</em></p>
17
<p><em>По материалам https://towardsdatascience.com/apache-spark-3-1-release-spark-on-kubernetes-is-now-generally-available-65cccbf1436b.</em></p>
18
18