LoginSignup
2
0

More than 5 years have passed since last update.

Spark on KubernetesでPersistent Volumeを使う方法

Posted at

Kubernetesには、Podにアタッチして利用できるPersistent Volume(PV)というデータ領域があります。
PVによってPod削除後もデータを残すことが可能となり、また複数のPod間の共有ストレージとしても利用できます。

Apache Sparkはバージョン2.3からKubernetesネイティブサポートを開始しているものの、現バージョン(2018/09/11時点)のSpark2.3ではPersistent Volumeへのアタッチに対応していないのが現状です。
幸運なことに、次期バージョンのSpark2.4からはPersistent Volumeが利用できるようになるとのことですので、今回先取りしてSpark on KubernetesでPersistent Volumeを使ってみようかと思います。

0. 前提とか環境とか

  • Kubernetes実行環境 : Azure Kubernetes Service(AKS)
  • 一口にPVといっても、いろんな種類がありますが、AKSでクラスタを作成すると、次の2つのAzure Diskのストレージが自動で作成されるので、今回は"default"に対してアタッチを試みます。
    • default : HDD ※今回はこちらを利用する
    • managed-premium : SSD

1. Spark2.4の準備

GitHubから2.4のソースをクローン。

git clone -b branch-2.4 https://github.com/apache/spark.git

SBT(Scala Build Tool)を利用してビルドを実施。
mvnとかでも大丈夫なはず。

build/sbt -Pkubernetes -DskipTests clean package

Spark2.4を利用しSparkコンテナをビルドしてプッシュ。
Spark2.3と同じなので具体的方法は割愛します。

2. PVC(Persistent Volume Claim)の作成

PVC定義(どのストレージをどの程度利用するか)を作成します。
yaml形式で次のように書きます。
ここではPVC名「azure-managed-disk」で5Gの領域確保を行います。

azure-default.yaml


apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: azure-managed-disk
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: default
  resources:
    requests:
      storage: 5Gi

下記コマンドでAKS上にPVC作成。

kubectl create -f azure-default.yaml

Storage Classを使用したPVCを作成し問題なければ、PVCの内容に基づいて作成されたPVを確認できるようになります。次のコマンドで確認できます。

kubectl get pv

3. Spark-Submit実行

spark-submit時にコマンドオプションを指定することで、Spark Podと先程作成したPVをアタッチすることができます。

./bin/spark-submit \
--master k8s://http://127.0.0.1:8001 \
--deploy-mode cluster \
--name spark-pi \
--class org.apache.spark.examples.SparkPi \
--conf spark.executor.instances=1 \
--conf spark.kubernetes.container.image=$REGISTRY_NAME/spark:$REGISTRY_TAG \
--conf spark.kubernetes.driver.volumes.persistentVolumeClaim.volume.mount.path=/mnt/azure \
--conf spark.kubernetes.driver.volumes.persistentVolumeClaim.volume.mount.readOnly=false \
--conf spark.kubernetes.driver.volumes.persistentVolumeClaim.volume.options.claimName=azure-managed-disk \
local:///opt/spark/work-dir/SparkPi.jar

PVをアタッチするために利用したコマンドオプションは次の3つです。

# pod内のどのパスにマウントするか?(ここでは"/mnt/azure"にマウントしました)
--conf spark.kubernetes.driver.volumes.persistentVolumeClaim.volume.mount.path=/mnt/azure \
# 読み取り専用か?(ここでは読み書き両方可能)
--conf spark.kubernetes.driver.volumes.persistentVolumeClaim.volume.mount.readOnly=false \
# どのPVCを利用するか?(ここでは先に作成したPVC"azure-managed-disk"を利用)
--conf spark.kubernetes.driver.volumes.persistentVolumeClaim.volume.options.claimName=azure-managed-disk \

4. 参考文系

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0