Apache Spark 2.1.0(4)

SparkはCluster環境でこそ本領を発揮するのですが、そういった環境はなかなか用意するのが手間なので、試しにDocker化してみました。

雰囲気ぐらいは確認出来るかと…

Dockerfileはsingularities/sparkを手本にしています。

FROM ubuntu:16.04
MAINTAINER MizunagiKB

RUN apt-get update && ¥
apt-get install -yq --no-install-recommends wget && ¥
apt-get install -yq --no-install-recommends nfs-common && ¥
apt-get install -yq --no-install-recommends python2.7 && ¥
apt-get install -yq --no-install-recommends openjdk-8-jre && ¥
apt-get clean && ¥
rm -rf /tmp/* && rm -rf /var/tmp/*

RUN mkdir /opt/spark
ADD spark-2.1.0-bin-hadoop2.7.tgz /opt/spark

COPY spark-run.sh /

ENV PATH=$PATH:/opt/spark/spark-2.1.0-bin-hadoop2.7/bin
EXPOSE 4040 6066 7077 8080 8081

VOLUME ["/tmp", "/opt/spark/spark-2.1.0/logs"]

CMD ["/bin/bash"]

.

#!/bin/bash

SPARK_HOME=/opt/spark/spark-2.1.0-bin-hadoop2.7
CLASS_MASTER="org.apache.spark.deploy.master.Master"
CLASS_WORKER="org.apache.spark.deploy.worker.Worker"

. "$SPARK_HOME/sbin/spark-config.sh"
. "$SPARK_HOME/bin/load-spark-env.sh"

case "$1" in
  master)
    spark-class $CLASS_MASTER --webui-port 8080 --host `hostname` --port 7077
  ;;
  worker)
    spark-class $CLASS_WORKER --webui-port 8081 spark://$MASTER_PORT_7077_TCP_ADDR:7077
  ;;
esac

masterとworkerをそれぞれの実行はこんな感じで。

# master
$ docker run -h spark-master ¥
--name spark-master -i -t --rm ¥
mizunagi/spark spark-run.sh master

# worker
$ docker run -h spark-worker ¥
--name spark-worker -i -t --rm ¥
--link spark-master:master ¥
mizunagi/spark spark-run.sh worker