HTML Diff
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