项目需求,有一个spark-streaming的程序,读kafka的数据,需要构建一个不使用hadoop的spark
以下建立的镜像参考网络,可以稍加修改就可以使用不同的版本。
可单独启动master,worker来构建一个standaline的集群。
也可以默认启动,启动后,构建的是一个master,两个worker的集群。
使用的文件如下:
start-spark spark-2.2.1-bin-hadoop2.7.tgz Dockerfile
#start-spark
#!/bin/bash if [[ "${1}" = 'master' ]]; then # Start Spark Master spark-class org.apache.spark.deploy.master.Master -h $(hostname) 2>&1 >/data/sparklog-server.log elif [[ "${1}" = 'worker' ]]; then # Start Spark Worker spark-class org.apache.spark.deploy.worker.Worker spark://$2:7077 2>&1 >/data/sparklog.log else #start master and two workers nohup spark-class org.apache.spark.deploy.master.Master -h $(hostname) 2>&1 >>/data/sparklog-server.log & #sleep 5 to wait spark-server start sleep 3 nohup spark-class org.apache.spark.deploy.worker.Worker $(cat /etc/hosts|grep spark_master|cut -f 1):7077 2>&1 >/data/sparkwlog1.log & nohup spark-class org.apache.spark.deploy.worker.Worker $(cat /etc/hosts|grep spark_master|cut -f 1):7077 2>&1 >/data/sparkwlog2.log exit 1 fi
Dockerfile
FROM openjdk:8-jre MAINTAINER [email protected] WORKDIR spark COPY spark*.tgz ./ RUN tar zxf spark*.tgz && mv spark-2.2.1-bin-hadoop2.7/* ./ \ && rm -fr spark-2.2.1-bin-hadoop2.7 && rm spark*.tgz EXPOSE 6066 7077 8080 8081 # Copy start script COPY start-spark /usr/bin/start-spark RUN chmod +x /usr/bin/start-spark ENV SPARK_HOME /spark ENV PATH /spark/bin:$PATH ENV PATH /spark/sbin:$PATH #volume /data VOLUME /data #entrypoint CMD ["start-spark","all"]
使用方法:
构建 docker build -t spark .
1.启动master
#start spark master
注意:--net 是我自己已经创建的一个桥接网络
docker run --rm -it --name spark_master -p 7077:7077 -p 8080:8080 --net loginsight -h spark_master spark start-spark master
2.启动worker
docker run --rm -it --net loginsight --name spark_worker1 spark start-spark worker $(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' spark_master)
3.默认启动
docker run --rm -it --name spark_master -p 7077:7077 -p 8080:8080 --net loginsight -h spark_master spark