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:
- 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.
- Instalación de Requerimientos de Apache Superset:
- Instalación de Python, pip, y otros paquetes necesarios para ejecutar Apache Superset de manera óptima.
- 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.
- 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.
- 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.
- 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.
- Creación de Dataset de Pruebas:
- Ejemplos de cómo cargar y configurar conjuntos de datos de prueba para utilizar con Apache Superset.
- Creación de Charts de Prueba:
- Demonstración de cómo crear gráficos y visualizaciones utilizando los datos cargados en Apache Superset.
- Creación de Dashboard de Pruebas:
- Pasos para construir paneles de control interactivos que consoliden múltiples visualizaciones en un único espacio.
- 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.
setuptools
:
- Descripción:
setuptools
es una biblioteca de Python diseñada para facilitar la instalación y distribución de paquetes de Python. Extiende las capacidades del módulodistutils
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.
pip
:
- Descripción:
pip
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
- Esto indica que el script debe ser interpretado por el shell de bash.
- Exportar la variable de entorno
SUPERSET_CONFIG_PATH
:
bash
Copy code
export SUPERSET_CONFIG_PATH=/app/superset/superset_config.py
- 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. - Activar el entorno virtual:
bash
Copy code
. /app/superset/superset_env/bin/activate
- Esta línea activa el entorno virtual de Python que contiene todas las dependencias necesarias para ejecutar Superset. El punto (
.
) es un sinónimo desource
, que se utiliza para ejecutar el script de activación en el contexto de la sesión de shell actual. - 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()"
- Estas líneas configuran y ejecutan
gunicorn
para servir la aplicación Superset. Aquí se explica cada opción:
gunicorn
: Inicia el servidor WSGIgunicorn
.-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 workergevent
, 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, y8088
es el puerto.--limit-request-line 0
: Establece el límite en la longitud de la línea de solicitud HTTP. Un valor de0
indica 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 de0
indica que no hay límite.--statsd-host localhost:8125
: Configuragunicorn
para enviar métricas de rendimiento a un servidor StatsD ejecutándose enlocalhost
en el puerto8125
."superset.app:create_app()"
: Especifica la aplicación WSGI a ejecutar.superset.app:create_app()
es una llamada a la funcióncreate_app
en el módulosuperset.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]
Description
:
ini
Copy code
Description = Apache Superset Webserver Daemon
- Proporciona una breve descripción del servicio. En este caso, indica que es el demonio del servidor web de Apache Superset.
After
:
ini
Copy code
After = network.target
- 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]
PIDFile
:
ini Copy code PIDFile = /app/superset/superset-webserver.PIDFile
- 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.
Environment
:
ini Copy code Environment=SUPERSET_HOME=/app/superset Environment=PYTHONPATH=/app/superset
- Define variables de entorno específicas para el servicio.
SUPERSET_HOME
yPYTHONPATH
se configuran para que Apaches Superset pueda encontrar sus configuraciones y dependencias. WorkingDirectory
:
ini Copy code WorkingDirectory = /app/superset
- Establece el directorio de trabajo en el que se ejecutará el servicio. En este caso, es el directorio donde reside Superset.
ExecStart
:
ini
Copy code
ExecStart = /app/superset/run_superset.sh
- 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. ExecStop
:
ini
Copy code
ExecStop = /bin/kill -s TERM $MAINPID
- 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]
WantedBy
:
ini
Copy code
WantedBy=multi-user.target
- 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