Apache Superset v4 en Ubuntu (Parte No1 ) Instalacion para Ambiente Productivo en Servidor Standalone

Apache Superset es una plataforma de visualización de datos de código abierto que ofrece una forma intuitiva y poderosa de explorar y visualizar conjuntos de datos. Desarrollado inicialmente por Airbnb y ahora mantenido por la Apache Software Foundation, Superset permite a los usuarios conectar con diversas fuentes de datos y crear visualizaciones interactivas y paneles de control dinámicos.

¿Qué es Apache Superset?

Apache Superset se destaca por su capacidad para:

  • Conectividad Versátil: Integrarse con una amplia gama de fuentes de datos, incluyendo bases de datos SQL, sistemas NoSQL, archivos CSV, y más, facilitando la exploración y análisis de datos desde múltiples plataformas.
  • Visualizaciones Interactivas: Permitir la creación de gráficos, tablas y paneles de control interactivos con una interfaz intuitiva y fácil de usar, adecuada tanto para usuarios técnicos como para no técnicos.
  • Análisis Exploratorio: Facilitar el análisis exploratorio de datos a través de SQL Lab, donde los usuarios pueden ejecutar consultas SQL complejas y transformar datos en información útil.
  • Personalización y Extensibilidad: Ofrecer flexibilidad para personalizar y extender funcionalidades a través de complementos y visualizaciones personalizadas, adaptándose a necesidades específicas de visualización de datos.

¿Dónde se puede usar Apache Superset?

Apache Superset se utiliza ampliamente en diversas aplicaciones:

  • Empresas y Organizaciones: Para análisis de datos empresariales, creación de paneles de control ejecutivos, y seguimiento de KPIs.
  • Ciencia de Datos: En investigaciones científicas y análisis de datos para visualizar patrones y tendencias.
  • Sector Financiero: Para monitorear y analizar datos financieros y rendimiento de inversiones.
  • Sector Salud: En análisis de datos de salud para monitoreo de pacientes y tendencias epidemiológicas.
  • Educación: Para análisis de datos educativos y rendimiento estudiantil.

Apache Superset, con su comunidad activa y en constante evolución, continúa siendo una opción poderosa y flexible para la visualización y análisis de datos en diversos campos y aplicaciones.

1. Apache Superset v4 en Ubuntu (Parte No1 ) Instalacion para Ambiente Productivo en Servidor Standalone

Este tutorial detalla los pasos necesarios para instalar Apache Superset v4 en Ubuntu, configurándolo como un entorno productivo en un servidor standalone. A continuación, se presentan los pasos a seguir:

  1. Preparación del Sistema Operativo:
  • Actualización y configuración básica del sistema Ubuntu para asegurar que esté listo para la instalación de Apache Superset.
  1. Instalación de Requerimientos de Apache Superset:
  • Instalación de Python, pip, y otros paquetes necesarios para ejecutar Apache Superset de manera óptima.
  1. Configuración de la Base de Datos PostgreSQL para Apache Superset:
  • Creación y configuración de una base de datos PostgreSQL para almacenar los metadatos y configuraciones de Apache Superset.
  1. Instalación y Configuración de Apache Superset:
  • Guía paso a paso para la instalación de Apache Superset desde fuentes o utilizando paquetes precompilados, junto con la configuración inicial.
  1. Creación de Conexiones de Bases de Datos para Pruebas:
  • Configuración de conexiones a bases de datos externas para verificar la conectividad y funcionalidad de Apache Superset.
  1. Revisión de Seguridad de Apache Superset:
  • Configuración inicial de seguridad, incluyendo la configuración de autenticación y permisos para proteger el acceso a Apache Superset.
  1. Creación de Dataset de Pruebas:
  • Ejemplos de cómo cargar y configurar conjuntos de datos de prueba para utilizar con Apache Superset.
  1. Creación de Charts de Prueba:
  • Demonstración de cómo crear gráficos y visualizaciones utilizando los datos cargados en Apache Superset.
  1. Creación de Dashboard de Pruebas:
  • Pasos para construir paneles de control interactivos que consoliden múltiples visualizaciones en un único espacio.
  1. Revisión de Permisos:
  • Aseguramiento de que los usuarios y roles tengan los permisos adecuados para acceder y administrar Apache Superset y sus recursos.
  • Este tutorial proporciona una guía completa para implementar Apache Superset en un entorno de producción en Ubuntu, asegurando un despliegue eficiente y seguro para análisis de datos avanzados y visualizaciones interactivas.

2. Preparacion de Sistema Operativo y requisitos

2.1. Se realiza actualizacion de Sistema Operativo Ubuntu 24

Se debe de tener actualizado el SO a sus ultimas versiones

sudo apt update -y & sudo apt upgrade -y

En este caso la version con la que queda el SO Ubuntu es 

2.2. Version de Ubuntu despues de actualizacion

1sb_release -a

Esta es la version de Ubuntu que se uso para el laboratorio

2.3. Instalacion de componentes necesarios para Apache superset e instalcion de motos de bases de datos postgresql

sudo apt-get install build-essential libssl-dev libffi-dev python3-dev python3-pip libsasl2-dev libldap2-dev default-libmysqlclient-dev python3.10-venv postgresql postgresql-contrib

build-essential  es un paquete en Ubuntu que incluye las herramientas y bibliotecas necesarias para compilar software desde su código fuente. Este paquete agrupa elementos esenciales como el compilador GCC, el enlazador ld  , y make  , entre otros, que son fundamentales para la mayoría de las compilaciones en un entorno Linux. Instalar build-essential  es uno de los primeros pasos para desarrollar software en Ubuntu.

libssl-dev  es un paquete en Ubuntu que proporciona las bibliotecas y archivos de desarrollo necesarios para utilizar el protocolo SSL y TLS en aplicaciones. Es esencial para compilar programas que requieren funciones criptográficas y de seguridad proporcionadas por OpenSSL, incluyendo la creación de conexiones seguras a través de redes. Este paquete incluye los archivos de encabezado y las bibliotecas estáticas necesarias para desarrollar aplicaciones que usen OpenSSL.

libffi-dev  es un paquete en Ubuntu que proporciona archivos de desarrollo para la Biblioteca de Interfaces de Funciones Extranjeras (FFI, por sus siglas en inglés). Esta biblioteca es utilizada para permitir que código escrito en un lenguaje de programación pueda llamar o ser llamado por código escrito en otro lenguaje. libffi-dev  incluye los encabezados y las bibliotecas necesarias para desarrollar y compilar programas que necesitan interoperar con bibliotecas de código en otros lenguajes.

python3-dev  es un paquete en Ubuntu que proporciona los archivos de desarrollo necesarios para construir extensiones en C y C++ para Python 3. Esto incluye encabezados y bibliotecas específicas de Python 3, que son fundamentales para compilar módulos de Python que interactúan directamente con el código C o C++. Al instalar python3-dev  , los desarrolladores pueden crear y compilar módulos de extensión que amplían las capacidades de Python o que mejoran el rendimiento mediante la integración de código nativo.

python3-pip  es un paquete en Ubuntu que proporciona pip  , el gestor de paquetes para Python 3. pip  permite instalar, actualizar y gestionar paquetes de software escritos en Python, facilitando el acceso a una amplia gama de bibliotecas y herramientas disponibles en el Python Package Index (PyPI). Con python3-pip  , los usuarios pueden instalar rápidamente dependencias y módulos adicionales necesarios para sus proyectos de Python mediante simples comandos en la línea de comandos.

libsasl2-dev  es un paquete en Ubuntu que proporciona los archivos de desarrollo para la biblioteca de autenticación Simple Authentication and Security Layer (SASL). SASL es un marco utilizado por aplicaciones y servicios para añadir soporte de autenticación y seguridad. libsasl2-dev  incluye encabezados y bibliotecas necesarios para desarrollar y compilar aplicaciones que implementen o utilicen mecanismos de autenticación SASL, facilitando la integración de autenticación segura en aplicaciones de software.

default-libmysqlclient-dev  es un paquete en Ubuntu que proporciona los archivos de desarrollo necesarios para interactuar con bases de datos MySQL. Incluye encabezados y bibliotecas para compilar programas y extensiones que se conectan y utilizan MySQL. Este paquete permite a los desarrolladores escribir aplicaciones en C o C++ que pueden realizar operaciones en bases de datos MySQL, como consultas, inserciones y actualizaciones. Es especialmente útil para desarrollar software que necesita integrar funcionalidades de base de datos MySQL.

python3.10-venv  es un paquete en Ubuntu que proporciona las herramientas necesarias para crear entornos virtuales en Python 3.10. Un entorno virtual es una instalación auto-contenida de Python que permite a los desarrolladores gestionar dependencias específicas del proyecto sin afectar al sistema global de Python o a otros proyectos. Este paquete incluye el módulo venv  , que se utiliza para crear y gestionar estos entornos virtuales. Con python3.10-venv  , los desarrolladores pueden trabajar en proyectos aislados, evitando conflictos de dependencias y facilitando la gestión de diferentes versiones de bibliotecas y paquetes.

postgresql-contrib  es un paquete en Ubuntu que proporciona una colección de módulos adicionales para PostgreSQL, un sistema de gestión de bases de datos relacional. Estos módulos incluyen herramientas, utilidades y extensiones que no están incluidas en la instalación principal de PostgreSQL, pero que añaden funcionalidades útiles. Ejemplos de estas funcionalidades son tipos de datos adicionales, funciones de procesamiento de texto y matemáticas avanzadas, así como herramientas para la administración de bases de datos. postgresql-contrib  amplía las capacidades de PostgreSQL, ofreciendo a los usuarios más opciones y flexibilidad para manejar sus datos y optimizar sus bases de datos.

.

2.4. Creacion y configuracion de motor de base de datos

A continuacion 

2.4.1. Creacion de base de datos Paso1

sudo -u postgres psql

2.4.2. Creacion de base de datos Paso2

CREATE DATABASE superset;

2.4.3. Creacion de base de datos Paso2

CREATE USER superset WITH PASSWORD 'your_secure_password';

2.4.4. Creacion de base de datos Paso3

GRANT ALL PRIVILEGES ON DATABASE superset TO superset;
      \q

2.4.5. Cambiar el password de postgres

ALTER USER postgres WITH PASSWORD 'nueva_contraseña';

2.4.6. Acceso de usuario postgres

Se debe de adicionar la linea en el archivo:

sudo vim /etc/postgresql/14/main/pg_hba.conf

Con esta modificacion se permite utilizar acceso a un cloente de postgres desde otro equipo con este usuario

2.4.7. Modificar el listener de postgres

Se debe de validar que la linea exista en el archivo:

sudo vim /etc/postgresql/14/main/postgresql.conf

Con esta modificacion en listener estara disponible a todas las direccciones 

2.4.8. Se crea un registro de un server en pgadmin

2.4.9. Se asigna un nombre al registro

2.4.10. Se definen los parametros del registro

Se debe de definir la ip o el nombre del servidor, puerto, usuario y clave

2.4.11. Aqui se muestran las bases de datos existentes en el motor

2.5. Creacion de directorio para proyecto apache superset

Se crea un directorio en el cual se encontrara contenido el environment y los archivos adicionales de la instalacion de Apache superset

sudo mkdir /app
      sudo chown user /app
      cd /app

2.6. Creacion de environment de apache superset

mkdir superset
      cd superset
      python3.10 -m venv superset_env
      . superset_env/bin/activate
      python -- version

Se crea environment de superset. Debe de tomarse en cuenta de que la version 4 de apache super se esta soportada con python 3.1 a la fecha

2.7. Actualizacion de componentes de instalacion

pip install --upgrade setuptools pip

setuptools y pip son dos herramientas esenciales en el ecosistema de Python para la gestión de paquetes y entornos de desarrollo.

  1. setuptools:
  • Descripciónsetuptools es una biblioteca de Python diseñada para facilitar la instalación y distribución de paquetes de Python. Extiende las capacidades del módulo distutils de la biblioteca estándar de Python.
  • Funcionalidades: Proporciona herramientas para definir y construir proyectos de Python, especificar dependencias, y manejar scripts de instalación. También soporta la instalación de paquetes desde repositorios remotos y el empaquetado de bibliotecas para su distribución.
  1. pip:
  • Descripciónpip es el gestor de paquetes de Python, utilizado para instalar y gestionar bibliotecas y paquetes de software escritos en Python.
  • Funcionalidades: Permite a los usuarios buscar, descargar e instalar paquetes desde el Python Package Index (PyPI) y otros índices de paquetes. También puede manejar dependencias automáticamente, actualizar paquetes y desinstalarlos cuando ya no son necesarios.

Ambas herramientas trabajan juntas para simplificar el desarrollo y la gestión de proyectos en Python, facilitando la instalación y actualización de paquetes y la configuración de entornos de desarrollo.

2.8. Instalacion de pillow

Esta libreria sera usada en su momento en apache superset

pip install pillow

Pillow es una biblioteca de procesamiento de imágenes en Python que proporciona herramientas poderosas para abrir, manipular y guardar imágenes en varios formatos. Es una bifurcación amigable y mantenida activamente de la biblioteca PIL (Python Imaging Library), con soporte mejorado para Python 3.x y una API más moderna y flexible. Pillow permite realizar operaciones como redimensionar, rotar, recortar, ajustar el color y aplicar filtros a imágenes de manera eficiente y sencilla, lo que la convierte en una opción popular para aplicaciones que requieren manipulación de imágenes, procesamiento de fotografías y generación de gráficos.

3. Instalacion de superset y configuracion

pip install apache-superset

Este es el primer paso para la instalacion y configuracion de Apache superset

3.1. Se crea archivo inicial de apache superset

Se crea inicialmente el archivo:

vim /app/superset_config.py

El archivo debe de tener el contenido inicial:

# Superset specific config
      ROW_LIMIT = 5000
      
      
      # Flask App Builder configuration
      # Your App secret key will be used for securely signing the session cookie
      # and encrypting sensitive information on the database
      # Make sure you are changing this key for your deployment with a strong key.
      # Alternatively you can set it with `SUPERSET_SECRET_KEY` environment variable.
      # You MUST set this for production environments or the server will not refuse
      # to start and you will see an error in the logs accordingly.
      SECRET_KEY = 'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY'
      
      
      # The SQLAlchemy connection string to your database backend
      # This connection defines the path to the database that stores your
      # superset metadata (slices, connections, tables, dashboards, ...).
      # Note that the connection information to connect to the datasources
      # you want to explore are managed directly in the web UI
      # The check_same_thread=false property ensures the sqlite client does not attempt
      # to enforce single-threaded access, which may be problematic in some edge cases
      SQLALCHEMY_DATABASE_URI = 'sqlite:////app/superset/superset.db?check_same_thread=false'
      
      
      TALISMAN_ENABLED = False
      WTF_CSRF_ENABLED = False
      
      
      # Set this API key to enable Mapbox visualizations
      MAPBOX_API_KEY = ''

3.2. Generacion de cadena aleatorea

El comando openssl rand -base64 42 se utiliza para generar una cadena aleatoria de bytes codificados en base64.

El resultado de este momento debe de ser adicionado en el archivo de configuracion de apache superset

3.3. Se adiciona el secret generado en el archivo apache superset

3.4. Generar variable de ambiente para el archivo de configuracion

export SUPERSET_CONFIG_PATH=/app/superset/superset_config.py

3.5. Se cambia el string de conexion de apache superset

Se realiza un string de conexion de apache superset para que utilice la base de datos postgresql

SQLALCHEMY_DATABASE_URI = 'postgresql://superset:<password>@localhost:5432/superset’

3.6. Se crea variable de ambiente

3.7. Se debe de realizar actualizaciones para conexion de postgres

sudo apt-get update
      sudo apt-get install -y libpg-dev python3-dev

3.8. Instalacion de libreria de postgres

pip install psycopg2

permite a las aplicaciones Python conectarse a una base de datos PostgreSQL para ejecutar consultas SQL, recuperar datos y realizar operaciones de manipulación de datos.

3.9. Creacion de estuctura de base de datos

superset db upgrade

Se crea estructura de base de datos 

3.10. Creacion de usuario administrativo de apache superset

superset fab create-admin

3.11. Carga de ejemplos (opcional)

superset load_examples

Carga de ejemplo de superset. Esto es opcional y para fines educativos solamente

3.12. Creacion de roles y permisos default

superset init

3.13. Creacion de script de arranque de apache superset

Se crea el archivo:

vim /app/superset/run_superset.sh

con el siguiente contenido:

#!/bin/bash
      export SUPERSET_CONFIG_PATH=/app/superset/superset_config.py
       . /app/superset/superset_env/bin/activate
      gunicorn \
            -w 10 \
            -k gevent \
            --timeout 120 \
            -b  0.0.0.0:8088 \
            --limit-request-line 0 \
            --limit-request-field_size 0 \
            --statsd-host localhost:8125 \
            "superset.app:create_app()"

Para la iniciacion y pruebas de funcionamiento de apache superset

Desglose del Script

bash
      Copy code
      #!/bin/bash
  1. Esto indica que el script debe ser interpretado por el shell de bash.
  2. Exportar la variable de entorno SUPERSET_CONFIG_PATH:
bash
      Copy code
      export SUPERSET_CONFIG_PATH=/app/superset/superset_config.py
  1. Esta línea establece la variable de entorno SUPERSET_CONFIG_PATH que Apache Superset utilizará para localizar su archivo de configuración personalizado. Este archivo contiene configuraciones específicas de Superset.
  2. Activar el entorno virtual:
bash
      Copy code
      . /app/superset/superset_env/bin/activate
  1. Esta línea activa el entorno virtual de Python que contiene todas las dependencias necesarias para ejecutar Superset. El punto (.) es un sinónimo de source, que se utiliza para ejecutar el script de activación en el contexto de la sesión de shell actual.
  2. Ejecutar gunicorn:
bash
      Copy code
      gunicorn \
            -w 10 \
            -k gevent \
            --timeout 120 \
            -b  0.0.0.0:8088 \
            --limit-request-line 0 \
            --limit-request-field_size 0 \
            --statsd-host localhost:8125 \
            "superset.app:create_app()"
  1. Estas líneas configuran y ejecutan gunicorn para servir la aplicación Superset. Aquí se explica cada opción:
  • gunicorn: Inicia el servidor WSGI gunicorn.
  • -w 10: Especifica el número de workers (trabajadores) a iniciar. En este caso, se iniciarán 10 workers, permitiendo manejar múltiples solicitudes concurrentes.
  • -k gevent: Usa el worker gevent, que permite manejar un gran número de conexiones concurrentes utilizando corrutinas ligeras.
  • --timeout 120: Establece un tiempo de espera (timeout) de 120 segundos para las solicitudes. Si una solicitud tarda más de este tiempo, será terminada.
  • -b 0.0.0.0:8088: Especifica la dirección IP y el puerto en el que el servidor debe escuchar. 0.0.0.0 indica que debe escuchar en todas las interfaces de red disponibles, y 8088 es el puerto.
  • --limit-request-line 0: Establece el límite en la longitud de la línea de solicitud HTTP. Un valor de 0indica que no hay límite.
  • --limit-request-field_size 0: Establece el límite en el tamaño de los campos de cabecera de la solicitud HTTP. Un valor de 0 indica que no hay límite.
  • --statsd-host localhost:8125: Configura gunicorn para enviar métricas de rendimiento a un servidor StatsD ejecutándose en localhost en el puerto 8125.
  • "superset.app:create_app()": Especifica la aplicación WSGI a ejecutar. superset.app:create_app() es una llamada a la función create_app en el módulo superset.app, que devuelve una instancia de la aplicación Superset.

3.14. Se dan permisos de ejecucion al script

chmod +x run_superset.sh

3.15. instalacion de libreria gevent

pip install gevent

gevent es una biblioteca que facilita la programación asincrónica en Python. Utiliza corrutinas ligeras (llamadas «greenlets») para manejar múltiples tareas de forma concurrente dentro de un solo hilo, aprovechando la capacidad de Python para cambiar de contexto rápidamente entre tareas.

3.16. Se inicia apache superset

Se inicia apache superset para validar su funcionamiento

3.17. Validacion de funcionamineot inicial de apache superser

http://10.211.55.9:8088/login/

3.18. Creacion de servicio para iniciar apache superset

Se crea el archivo:

sudo vim /etc/systemd/system/superset.service

Que tiene que tener el siguiente contenido:

[Unit]
      Description = Apache Superset Webserver Daemon
      After = network.target
      
      [Service]
      PIDFile = /app/superset/superset-webserver.PIDFile
      Environment=SUPERSET_HOME=/app/superset
      Environment=PYTHONPATH=/app/superset
      WorkingDirectory = /app/superset
      limit-re>
      ExecStart = /app/superset/run_superset.sh
      ExecStop = /bin/kill -s TERM $MAINPID
      
      [Install]
      WantedBy=multi-user.target

Sección [Unit]

  1. Description:
ini
      Copy code
      Description = Apache Superset Webserver Daemon
  1. Proporciona una breve descripción del servicio. En este caso, indica que es el demonio del servidor web de Apache Superset.
  2. After:
ini
      Copy code
      After = network.target
      
  1. Especifica que este servicio debe iniciarse después de que se haya iniciado el objetivo network.target, asegurando que la red esté disponible antes de que se inicie Superset.

Sección [Service]

  1. PIDFile:
ini
      Copy code
      PIDFile = /app/superset/superset-webserver.PIDFile
      
  1. Especifica la ubicación del archivo que contendrá el ID del proceso (PID) del servidor web de Superset. Este archivo se utiliza para rastrear y gestionar el proceso del servidor.
  2. Environment:
ini
      Copy code
      Environment=SUPERSET_HOME=/app/superset
      Environment=PYTHONPATH=/app/superset
      
  1. Define variables de entorno específicas para el servicio. SUPERSET_HOME y PYTHONPATH se configuran para que Apaches Superset pueda encontrar sus configuraciones y dependencias.
  2. WorkingDirectory:
ini
      Copy code
      WorkingDirectory = /app/superset
      
  1. Establece el directorio de trabajo en el que se ejecutará el servicio. En este caso, es el directorio donde reside Superset.
  2. ExecStart:
ini
      Copy code
      ExecStart = /app/superset/run_superset.sh
      
  1. Especifica el comando que se debe ejecutar para iniciar el servicio. Aquí, se ejecuta un script llamado run_superset.sh, que presumiblemente contiene los comandos necesarios para iniciar el servidor web de Superset.
  2. ExecStop:
ini
      Copy code
      ExecStop = /bin/kill -s TERM $MAINPID
  1. Define el comando que se debe ejecutar para detener el servicio. Este comando envía una señal TERM (terminar) al proceso principal del servicio ($MAINPID), indicándole que debe apagarse de forma ordenada.

Sección [Install]

  1. WantedBy:
ini
      Copy code
      WantedBy=multi-user.target
  1. Especifica el objetivo (target) bajo el cual se debe instalar este servicio. multi-user.target es un objetivo estándar de systemd que representa un entorno multiusuario no gráfico (modo multiusuario).

3.19. Activacion del servicio

systemctl daemon-reload
      sudo systemctl enable superset.service
      sudo systemctl start superset.service

3.20. Prueba de funcionamiento de de apache superset

Deja una respuesta

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