Docker-Cluster-Spark-Jupyter

Laboratorios

-. Estos Apuntes se basan un laboratorio de Apache-Spark y Docker y controlando por PySpark , Jupyter-Notebook . Probando diferentes configuraciones de Pytho-Venv , Docker ,en Cluster. En esta ocasión usare un portátil Host el cual ejecuta sus nodo Master, Jupter, SparkSession y un Server-Ubuntu:20.04 en el cual irán alojados los Worker1 , Worker2 , Worker3.Tenemos un entorno virtual Python3.6-Venv , ya creado anteriormente como un ecosistema con Apache-Spark , PySpark , Jupyter .

-. Necesitamos una Imagen de Docker ya creada para tal fin, las tenemos el el repositorio de Docker o la generamos nosotros , que es lo que aremos : empezamos por crear un contenedor Docker a partir de una imagen de Docker              ( Ubuntu:18.04 ) la usaremos como base de nuestro contenedor la cual modificaremos para crear nuestro contenedor y apartir de este crear nuestra imagen de la cual crearemos los Workers que necesitemos . Tenemos diferentes formas de abordar el tema , usar una imagen del repositorio oficial de Docker , usar o crear un Dockerfile o hacerlo manualmente , nosotros usaremos esta ultima.

Creación de una Imagen Docker a partir de un Contenedor

Crear un contenedor docker:

  1. In: root@serve–hp8100:/# docker run -it –name spark_docker -m 1024M –cpus 1 ubuntu
  2. In: root@c59e3ef5557f:/#

Deshabilitar el modo interactivo: ¿para que no pregunte?

  1. In: root@c59e3ef5557f:/# export DEBIAN_FRONTEND=noninteractive

Instalar las dependencias(Java, Python y Nano)

  1. In: root@c59e3ef5557f:/# apt update && apt install -y openjdk-8-jdk python nano

Descarga Spark:(descomprimir el fichero.tgz)-(crear)Mover a la carpeta /spark

  1. In: root@serve–hp8100:/# curl -O https://archive.apache.org/dist/spark/spark-3.1.1/spark-3.1.1-bin-hadoop3.2.tgz
  2. In: root@serve–hp8100:/# tar xvf spark-3.1.1-bin-hadoop3.2.tgz

Copiar el paquete entero de Apache Spark <ID_CONTENEDOR> /opt del cotenedor

  1. In: root@serve–hp8100:/# docker cp spark-3.1.1-bin-hadoop3.2 c59e3ef5557f:/opt

Renombra Carpeta :

  1. In: root@c59e3ef5557f:/opt# mv spark-3.1.1-bin-hadoop3.2 spark

Crea un enlace simbólico:

  1. In: root@c59e3ef5557f:/opt# ln -s /opt/spark/sbin

Establecer entorno de Spark:(Abra su archivo de configuración de bashrc)Activa los cambios

  • In: root@1bf0b87d3b85:/# nano ~/.bashrc
  • export SPARK_HOME=/opt/spark
  • export PATH=$SPARK_HOME/bin:$PATH
  • In: root@1bf0b87d3b85:/# source ~/.bashrc

Crear una Imagen a partir de un Contenedor:

  1. In: root@serve–hp8100:/# docker commit 40c9653c010c spark_docker:21.07
  2. Out: sha256:5bb39b6744e6d287621bdd42bb3c8cb2d9f65f73c98b3d0b5d47b1e791529d36
  3. In: root@serve–hp8100:/# docker images
  4. Out: spark_docker 21.07 5bb39b6744e6 About a minute ago 783MB

Arracamos Paython-Venv – Spark-Master

-. Disponemos de un entorno virtual Python3.6-Venv , ya creado anteriormente como un ecosistema con Apache-Spark , PySpark , Jupyter .en el portátil Host

Levantamos entorno virtual venv (Activate)-(Deactivate)

  1. In: root@juan-Aspire-ES1-512:/# source my_pyspark/bin/activate
  2. In: (my_pypark) root@juan-Aspire-ES1-512:/# deactivate

Arrancamos Spark ejecuta sus nodos Master my-portatil-Host 192.168.1.36

  1. In: (my_pyspark) root@juan-Aspire-ES1-512:/# ./spark/sbin/start-master.sh -h 192.168.1.36

Arranca interface-Wed-Spar-Master http://127.0.0.1:8080/

Continuamos con la creación del (Cluster de tres Worker)

Creamos el Contenedor Worker-1

  1. In: root@serve–hp8100:/# docker run -it –name worker-1 -m 1024M –cpus 1 spark_docker:21.07
  2. In: root@ef00c9ebbb14:/#

Arrancamos Worker-1

  1. In: root@ef00c9ebbb14:/opt# ./spark/sbin/start-worker.sh spark://192.168.1.36:7077
  2. Out: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark/logs/spark org.apache.spark.deploy.worker.Worker-1-ef00c9ebbb14.out
  3. In: root@ef00c9ebbb14:/opt#

Creamos el Contenedor Worker-2

  1. In: root@serve–hp8100:/# docker run -it –name worker-2 -m 1024M –cpus 1 spark_docker:21.07
  2. In: root@5cfbc7c97119:/#

Arrancamos Worker-2

  1. In: root@5cfbc7c97119:/opt# ./spark/sbin/start-worker.sh spark://192.168.1.36:7077
  2. Out: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark/logs/spark–
  3. org.apache.spark.deploy.worker.Worker-1-5cfbc7c97119.out
  4. In: root@5cfbc7c97119:/opt#

Creamos el Contenedor Worker-3

  1. In: root@serve–hp8100:/# docker run -it –name worker-3 -m 1024M –cpus 1 spark_docker:21.07
  2. In: root@eb42b6da656f:/#

Arrancamos Worker-3

  1. In: root@eb42b6da656f:/opt# ./spark/sbin/start-worker.sh spark://192.168.1.36:7077
  2. Out: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark/logs/spark–
  3. org.apache.spark.deploy.worker.Worker-1-eb42b6da656f.out
  4. In: root@eb42b6da656f:/opt#

Arrancamos un Jupyter-Notebook

  1. In: (my_pyspark) root@juan-Aspire-ES1-512:/# jupyter notebook –allow-root

http:// 127.0.0.1 :8888/?token=17cafcaaad4e02e72275b1332a26fed7334588b6df7e3c92

Crear una aplicación Spark y comenzar: pegando el siguiente script en una celda de Jupyter

  • In: import findspark
  • findspark.init()
  • In: import pyspark
  • sc = pyspark.SparkContext(master=’spark://192.168.1.36:7077′,appName=’myspark’)
  • In: sc

Consola PySpark , Web UI available at http://192.168.1.36:4040

Nota:En esta captura tenemos los Status , IP , memoria etc en Executurs .

Recapitulando :

  1. -. Activamos el entorno virtual Python3.6-Venv , activamos el ( start-master.sh ) en el Host . En nuestro Servidor-Ubuntu con tres contenedor Docker activamos los tres Worker situado cada contenedor ( start-worker.sh )
  2. -. En nuestro navegador Wed http://127.0.0.1:8080/ el cual nos dara la URL: spark://192.168.1.36:7077 y información de nuestros workers sintuados en los tres contenedores y los recurso de nuestro entorno . Arrancaremos nuestra IDE favorita en mi caso Jupyter-Notebook , import findspark y pyspark y ejetutamos un pequeño script para confirmar la interacciona con Spark a traves de API-PySpark lo cual podemos comprobar en Spark context Web UI available at http://192.168.1.36:4040
  3. -. Usar Docker y Python-Venv se trata de aislar todos estos procesos de la maquinas Host o Server con un entorno mas seguro y relativamente (fácil de usar) esto es el motivo de estos apuntes espero cumplan su objetivos .

Origen de este laboratorios (Entorno-Moreluz).

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *