Nota: (creación de una images-docker-master usare como base-jupyter:latest 04d1d2b17e54 para usarla en proyectos de “Apache-Spark-Docker-Compose” ).
Spark-Master
Nota: (Lo primero crear la carpeta my-dockerfile donde guardamos nuestros Dockerfile, con nano creamos Spark-Master.Dockerfile y pegamos el testo correspondiente“siempre con mayúscula .Dockerfile” ).
- In: root@juan-SATELLITE-C55-C-1JM:/# mkdir my-dockerfile
- In: root@juan-SATELLITE-C55-C-1JM:/# cd my-dockerfile
Creamos un archivo dockerfile con nano :
- In: root@juan-SATELLITE-C55-C-1JM:/my-dockerfile# nano Spark-Master.Dockerfile
Spark-Master.Dockerfile
# Cargamos la imagen base-jupyter:latest y Nombre del autor
FROM base-jupyter:latest
MAINTAINER Juan-Ma
# Deshabilitar el modo interactivo
ENV DEBIAN_FRONTEND=noninteractive
# Actualizamos repositorio
RUN apt update && apt install -y curl
CMD /bin/bash
# Lo descargamos
RUN curl -O https://archive.apache.org/dist/spark/spark-3.1.1/spark-3.1.1-bin-hadoop3.2.tgz && \
tar -xzvf spark-3.1.1-bin-hadoop3.2.tgz && \
mv spark-3.1.1-bin-hadoop3.2/ /opt/spark && \
rm spark-3.1.1-bin-hadoop3.2.tgz
# Establecer entorno de Spark
ENV SPARK_HOME=/opt/spark
ENV PATH=$SPARK_HOME/bin:$PATH
EXPOSE 4040 6066 7077 7078 8080 8081 8888
Nota: en la images que utilizo base-jupyter:latest 04d1d2b17e54 tenemos :
- Python versión – 30.10.6
- pip versión – 20-0-6
- nano versión – 6.2
- java versión – OpenJDK
- Jupyterlab versión
- Jupyter-Notebook versión
Nota: A continuación generamos una imagen (spark-master:latest) del Dockerfile creado con nano anteriormente “ Spark-Master.Dockerfile” .
Nota: Opciones ( –file , -f Nombre del Dockerfile) , ( –tag , -t Nombre y, opcionalmente, una etiqueta en formato ‘nombre:etiqueta’) .
Creamos la images spark-master:latest :
- In root@juan-SATELLITE-C55-C-1JM:/my-dockerfile# docker build -f Spark-Master.Dockerfile . -t spark-master:latest
Listar las images :
- In: root@juan-SATELLITE-C55-C-1JM:/my-dockerfile# docker images
- Out: spark-master latest 2d41a537a8ec 8 minutes ago 1.08GB
Nota: (con la images spark-master:latest se cumple el objetivo de crear la images que nos ocupa y a continuación comprobare la funcionalidad creando un contenedor y probaremos el “Master de Apache-Spark” lo veremos a continuación).
Arrancamos el contenedor efimero con puertos:
- In: root@juan-SATELLITE-C55-C-1JM:/#docker run -it –rm \
-p 0.0.0.0:4040:4040 \
-p 0.0.0.0:6066:6066 \
-p 0.0.0.0:7077:7077 \
-p 0.0.0.0:7078:7078 \
-p 0.0.0.0:8080:8080 \
-p 0.0.0.0:8888:8888 \
spark-master:latest
Con esto estamos dentro del contenedor:
- In: root@b7699dc8ce75:/opt#
Listamos los contenedor en ejecución :
- In: root@juan-SATELLITE-C55-C-1JM:/# docker ps
- Out: b7699dc8ce75 spark-master:latest «/bin/sh -c /bin/bash» 6 minutes ago Up 6 minutes 0.0.0.0:4040->4040/tcp, 0.0.0.0:6066->6066/tcp, 0.0.0.0:7077-7078->7077-7078/tcp, 0.0.0.0:8080->8080/tcp, 0.0.0.0:8888->8888/tcp, 8081/tcp infallible_colden
Inspeccionar el contenedor :
- In: root@juan-SATELLITE-C55-C-1JM:/#docker inspect b7699dc8ce75
Out: «Networks»: {
«bridge»: {
«Gateway»: «172.17.0.1»,
«IPAddress»: «172.17.0.2«,
Nota: Generamos el Master con la ip del host -h 172.17.0.2 generamos un Worker URL spark://172.17.0.2:7077 -interface-Wed-Spar-Master arrancamos interface-Wed-Spar-Master http://127.0.0.1:8080/ .
Arrancamos Master:
- In: root@b7699dc8ce75:/opt# ./spark/sbin/start-master.sh -h 172.17.0.2
- Out: starting org.apache.spark.deploy.master.Master, logging to /opt/spark/logs/spark–org.apache.spark.deploy.master.Master-1-b7699dc8ce75.out
Paramos el Master:
- In: root@b7699dc8ce75:/opt# ./spark/sbin/stop-master.sh -h 172.17.0.2
- Out: stopping org.apache.spark.deploy.master.Master
Ejecutamos el pyspark para visualizar PySparkShell:
- In: root@b7699dc8ce75:/opt# pyspark
- In: root@b7699dc8ce75:/opt# jupyter lab –allow-root –ip=0.0.0.0 –no-browser
Juyper-Notebook con http://127.0.0.1:8888/tree
Recopilando:
Puesta en escena de la images spark-master:latest, su funcionalidad y verificar Jupyter Notebook que es un entorno computacional interactivo basado en web.
Referencias: (Entorno-Moreluz)