Infraestructura minima para levantar Apache Ozone como storage compartido para Spark.
- Local: Docker Compose para pruebas manuales.
- Produccion: Apache Ozone instalado en Linux y administrado por
systemd. - Topologia v1: una VM con SCM, OM, Datanode, Recon y S3 Gateway.
- Seguridad v1: protegida por red privada/firewall y GitHub Environment secrets.
cp .env.example .env
make config
make up
make bootstrap-bucket
make healthcheckServicios locales:
- S3 Gateway:
http://localhost:9878 - Recon:
http://localhost:9888 - SCM UI:
http://localhost:9876 - OM UI:
http://localhost:9874
Para apagar:
make downProduccion usa systemd, no Docker. Los defaults son:
- Instalacion:
/opt/ozone/current - Configuracion:
/etc/ozone - Datos:
/data/ozone - Logs:
/var/log/ozone - Pids/runtime:
/run/ozone - Usuario/grupo:
ozone:ozone
En v1 las units de systemd asumen /opt/ozone/current, /etc/ozone y ozone:ozone; no cambies esos valores sin actualizar tambien los archivos en production/systemd/.
Limites de recursos en produccion:
- Todos los servicios corren dentro de
ozone.slice, con limite agregado de CPU, memoria y tasks/pids, mas I/O accounting. - Las quotas se configuran desde
.envcon variablesOZONE_SLICE_*,OZONE_SCM_*,OZONE_OM_*,OZONE_DATANODE_*,OZONE_RECON_*,OZONE_S3G_*yOZONE_SYSTEMD_*. - El deploy renderiza
production/systemd/*.serviceyproduction/systemd/*.sliceantes de instalarlos en/etc/systemd/system. - El heap JVM se configura con
OZONE_HEAPSIZE_MAXyOZONE_HEAPSIZE_MINen.env; mantenerMemoryMaxpor encima deOZONE_HEAPSIZE_MAX. - El espacio maximo de disco se controla con el volumen o particion montada en
/data/ozone; las units habilitanIOAccountingpara observar I/O desdesystemd.
Primera ejecucion manual en la VM:
cp .env.example .env
bash production/scripts/deploy-production.sh --env-file .envEl deploy hace:
- crea usuario y directorios si faltan;
- instala Java si falta y
OZONE_INSTALL_JAVA=true; - descarga Apache Ozone
OZONE_VERSION; - renderiza
ozone-site.xml,ozone-env.shyworkers; - instala units de
systemd; - inicializa SCM y OM solo si falta metadata;
- reinicia servicios en orden;
- crea/verifica el bucket
OZONE_BUCKET.
Servicios:
systemctl status ozone-scm
systemctl status ozone-om
systemctl status ozone-datanode
systemctl status ozone-recon
systemctl status ozone-s3gCuando esta carpeta sea repo raiz, configurar:
- Environment:
production - Secret:
PRODUCTION_ENV_FILEcon el contenido completo de.env - Variable opcional:
OZONE_REPO_DIR; default/srv/infra-ozone - Runner labels:
self-hosted,Linux,X64,ozone-production,production-deploy
El workflow de produccion actualiza el repo en la VM, escribe .env.next, valida scripts y render de config, respalda .env, ejecuta bash production/scripts/deploy-production.sh y verifica las units instaladas con systemd-analyze.
Despues de desplegar Ozone, el repo ETL debe apuntar al S3 Gateway:
OZONE_S3_ENDPOINT=http://<ozone-vm-private-host>:9878
OZONE_S3_REGION=us-east-1
OZONE_S3_ACCESS_KEY=<secret>
OZONE_S3_SECRET_KEY=<secret>
OZONE_S3_PATH_STYLE_ACCESS=true
OZONE_S3_BUCKET_PROBE=0
OZONE_S3_CHANGE_DETECTION_MODE=none
MCDONALDS_SPARK_DF_IO_BASE_PATH=s3a://mcdonalds-etl/dagster_io/spark_dfs/mcdonalds
SMARTFIT_SPARK_DF_IO_BASE_PATH=s3a://mcdonalds-etl/dagster_io/spark_dfs/smartfit
CDP_SPARK_DF_IO_BASE_PATH=s3a://mcdonalds-etl/dagster_io/spark_dfs/mcdonalds_cdp
GABINETE_SPARK_DF_IO_BASE_PATH=s3a://mcdonalds-etl/dagster_io/spark_dfs/bafar_poc_gabineteEn modo no seguro, Ozone acepta credenciales estilo AWS para S3G; guardarlas de todos modos como secrets y no commitear .env.