Skip to content

Instalación de Apache Zeppelin usando Docker

Daniel T edited this page Aug 3, 2020 · 3 revisions

Introducción

Apache provee 2 versiones de Zeppelin, la más completa que incluye todos los intérpretes, la segunda que tiene un tercio de su peso y solo incluye los esenciales, y como requerimiento pide Oracle JDK 1.7 tal como se especifica en su documentación entre otras librerías requeridas comúnmente por los programas.

Problemática

Ya que cada computadora es un mundo podemos experimentar problemas al ejecutar zeppelin en nuestro equipo, entre los cuales podemos ver comúnmente:

  • Problemas con la máquina virtual de java
  • Librerías incompletas

Docker, ventajas y desventajas

Una máquina virtual tradicional ejecuta todo un sistema operativo host conllevando con ellos un gran consumo de recursos, para solventar esto llega docker que solo ejecuta el software necesario para que nuestro zeppelin arranque y se ejecute correctamente con su JVM y demás librerías necesarias, usando para ello una versión en miniatura de Debian.

Contenido de la raíz de un contenedor docker Zeppelin basado en Debian

La independencia que proporciona docker con respecto al sistema operativo permite una serie de ventajas muy interesantes entre las que podemos destacar:

  1. Podemos ejecutar múltiples instancias aisladas para múltiples propósitos
  2. Provee de herramientas para manipular el contenedor
  3. Gestión de volúmenes avanzados

Instalación de docker y el contenedor Apache Zeppelin

Docker se encuentra disponible para su instalación desde la mayoría de repositorios oficiales de las distros GNU/Linux, quienes usemos sistemas basados en Debian lo instalamos mediente el comando:

sudo apt install docker docker.io

Persistencia de datos en los contenedores docker

Un contenedor por defecto no almacena datos persistentemente como lo haría un programa cualquiera, al detener el contenedor estos datos se eliminaran (son datos volátiles) por ello crearemos un volumen para almacenar nuestros datasets

Creando un volumen para nuestros datasets

Para ello creamos un nuevo volumen usando:

sudo docker volume create datasets

Solo nos devolverá el nombre del volumen creado, para comprobar si ha sido creado exitosamente listamos todos los volúmenes existentes con el comando:

sudo docker volume ls

Debemos obtener una salida igual

Moviendo nuestros datasets al nuevo volumen

En nuestro sistema Linux todavía no formamos parte del grupo de usuarios 'Docker' por lo que solo podemos acceder a sus carpetas y a los volúmenes acudiendo al usuario root.

En un terminal ejecutamos nuestro explorador de archivos como super usuario, como mi sistema usa Gnome 3 como entorno de escritorio ejecuto:

sudo nautilus

Proceda a copiar los datasets a la ruta volumes/datasets/_data y cierre el explorador.

Instalando e inicializando nuestro contenedor con Apache Zeppelin y el volumen 'datasets'

Docker por su parte no dispone de un comando propio para instalar contenedores, se debe ejecutar el comando 'docker run', así al no disponer de él en local procederá a descargarlo de la web.

Además debemos especificar el volumen a cargar agregando -v :/ruta/donde/montar , quedando de la siguiente manera:

sudo docker run -p 8080:8080 --rm --name zeppelin -v datasets:/datasets apache/zeppelin:0.9.0

Es asi como el contenido de "docker/volumes/datasets/_data" se cargará en la raíz del contenedor como la carpeta "datasets/".

Realizando modificaciones temporales a docker

Cuando requerimos modificar ciertos archivos de configuración temporalmente de nuestro contenedor podemos realizarlo accediendo a nuestra distribución GNU/Linux como "chroot" que en sí consiste en dejar de usar el usuario del sistema host a pasar a usar el del contenedor o su super usuario, recordemos que un contenedor es un mini sistema operativo ejecutando nuestro zeppelin en este caso.

Instalación de herramientas no incluidas como root

Al tratarse de una versión en miniatura de una distribución Debian podríamos esperar que programas como nano (un editor de texto de terminal) o htop (monitor de procesos también de consola) se encuentran instalados pero no es el caso, al no disponer de un simple editor ¿Cómo realizaremos la modificación de los archivos de configuración?

Por suerte disponemos del gestor de paquetes APT por lo que podemos acceder al sistema del contenedor como super usuario e instalar lo que necesitemos con el siguiente comando:

sudo docker exec -u 0 -it zeppelin bash

si nuestro usuario cambia a "root@xxxxxxxxxxx:/zeppelin" significa que ya estamos dentro, ahora ejecutamos:

apt install nano htop && exit

Con ello instalaremos el editor de texto nano y saldremos de la cuenta de usuario root.

editando los archivos en conf/ como usuario no-administrativo

Ahora accederemos otra vez al contenedor pero no como usuario root, ya que los ficheros de configuración son editables desde una cuenta no administrativa

sudo docker exec -it zeppelin bash

Permitiendo conexiones remotas desde un dominio específico

Creamos una copia del fichero zeppelin-site.xml.template asignándole el nombre de zeppelin-site.xml con el siguiente comando: cp conf/zeppelin-site.xml.template conf/zeppelin-site.xml

Para finalizar usaremos nano para editar el nuevo fichero:

nano conf/zeppelin-site.xml

La dirección desde la cual vamos a permitir conexiones debe remplazar al texto "SAMEORIGIN", la buscamos en nano con Ctrl + W, des comentamos esa sección del HTML y copiamos la dirección.

Para finalizar guardamos los cambios con Ctrl + X guardando los cambios y salimos del usuario con el comando exit.

reiniciando docker para reconocer los cambios

Para que los cambios aplique la nueva configuración lo reiniciamos usando

`sudo docker container restart zeppelin

Conclusiones

Es así como obtendremos un contenedor aislado al cual podremos compartir con nuestros amigos, gestionar con las múltiples herramientas ofrecidas por docker e incluso subir a nuestro hosting :) .