参考
- Running Spark on Kubernetes
- Docker Images
- dockerhubのopenjdk
- DockerhubのAnacondaのDockerfile
- GitHub上のAlpine版のAnaconda公式Dockerfile
- GitHub上のDebianベースのOpenJDK Dockerfile
メモ
Spark公式のDockerfileを活用
Spark公式ドキュメントの Running Spark on Kubernetes 内にある Docker Images によると、 SparkにはDockerfileが含まれている。
以下のパッケージで確認。
1 | $ cat RELEASE |
Dockerfileは、パッケージ内の
kubernetes/dockerfiles/spark/Dockerfile
に存在する。
また、これを利用した bin/docker-image-tool.sh
というスクリプトが存在し、 Dockerイメージをビルドして、プッシュできる。
今回はこのスクリプトを使ってみる。
ヘルプを見ると以下の通り。
1 | $ ./bin/docker-image-tool.sh --help |
つづいて最新版Sparkのバージョンをタグ付けて試す。
1 | $ sudo ./bin/docker-image-tool.sh -r docker.io/dobachi -t v2.4.3 build |
これは成功。 早速起動して試してみる。 なお、Sparkのパッケージは、
/opt/spark
以下に含まれている。
1 | $ sudo docker run --rm -it dobachi/spark:v2.4.3 /bin/bash |
データを軽く読み込んでみる。
1 | scala> val path = "/opt/spark/data/mllib/kmeans_data.txt" |
なお、PySparkが含まれているのは、違うレポジトリであり、
dobachi/spark-py
を用いる必要がある。
1 | $ sudo docker run --rm -it dobachi/spark-py:v2.4.3 /bin/bash |
この状態だと、OS標準付帯のPythonのみ使える状態に見えた。 実用を考えると、もう少し分析用途のPythonライブラリを整えた方が良さそう。
Anaconda等も利用するとして?
上記の通り、Spark公式のDockerfileで作るDockerイメージには、Python関係の分析用のライブラリ、ツールが不足している。 そこでこれを補うために、Anaconda等を利用しようとするとして、パッと見でほんの少し議論なのは、 なにをベースにするかという点。
- 上記で紹介したSparkに含まれるDockerfileおよび dockerhubのopenjdk に記載の通り、当該DockerイメージはAlpine Linuxをベースとしている。 ただし、OpenJDKのDockerイメージ自体には、 GitHub上のDebianベースのOpenJDK Dockerfile がある。
- AnacondaのDockerイメージは、 DockerhubのAnacondaのDockerfile の通り、Debianをベースとしている。 しかし、 GitHub上のAlpine版のAnaconda公式Dockerfile によるとAlpine Linux版もありそう。
どっちに合わせるか悩むところだが、Debianベースに置き換えでも良いか、という気持ちではある。 Debianベースのほうが慣れているという気持ちもあり。
また、Anacondaを合わせて導入するようにしたら、環境変数
PYSPARK_PYTHON
も設定しておいたほうが良さそう。