Este repositorio contiene un archivo docker-compose.yml
que despliega un clúster Hadoop completo utilizando contenedores Docker. A continuación, se explican los servicios incluidos, sus propósitos y configuraciones.
-
Clona el repositorio y navega al directorio donde se encuentra el archivo
docker-compose.yml
. -
Asegúrate de que los archivos de configuración mencionados (
.env
) estén correctamente configurados en el directorio./conf
. -
Inicia los contenedores:
docker-compose up -d
-
Verifica el estado de los servicios accediendo a los puertos expuestos a través de tu navegador:
- Namenode: http://localhost:9870
- Datanode-1: http://localhost:9864
- Datanode-2: http://localhost:9865
- ResourceManager: http://localhost:8088
- NodeManager: http://localhost:8042
- HistoryServer: http://localhost:8188
- HiveServer: http://localhost:10000 (y también en http://localhost:10002)
También puedes ejecutar:
docker-compose ps
para ver algo como ésto:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
datanode-1 timveil/docker-hadoop-datanode:3.2.x "/entrypoint.sh /run…" datanode-1 13 minutes ago Up 13 minutes (healthy) 0.0.0.0:9864->9864/tcp
datanode-2 timveil/docker-hadoop-datanode:3.2.x "/entrypoint.sh /run…" datanode-2 13 minutes ago Up 13 minutes (healthy) 0.0.0.0:9865->9864/tcp
historyserver timveil/docker-hadoop-historyserver:3.2.x "/entrypoint.sh /run…" historyserver 13 minutes ago Up 13 minutes (healthy) 0.0.0.0:8188->8188/tcp
hiveserver timveil/docker-hadoop-hive-hs2:3.1.x "/entrypoint.sh /run…" hiveserver 13 minutes ago Up 13 minutes 0.0.0.0:10000->10000/tcp, 0.0.0.0:10002->10002/tcp
metastore timveil/docker-hadoop-hive-metastore:3.1.x "/entrypoint.sh /run…" metastore 13 minutes ago Up 13 minutes 10000/tcp, 10002/tcp
metastore-db timveil/docker-hadoop-hive-metastore-db:3.1.x "docker-entrypoint.s…" metastore-db 13 minutes ago Up 13 minutes 0.0.0.0:5432->5432/tcp
namenode timveil/docker-hadoop-namenode:3.2.x "/entrypoint.sh /run…" namenode 13 minutes ago Up 13 minutes (healthy) 0.0.0.0:9870->9870/tcp
nodemanager timveil/docker-hadoop-nodemanager:3.2.x "/entrypoint.sh /run…" nodemanager 13 minutes ago Up 13 minutes (healthy) 0.0.0.0:8042->8042/tcp
resourcemanager timveil/docker-hadoop-resourcemanager:3.2.x "/entrypoint.sh /run…" resourcemanager 13 minutes ago Up 13 minutes (healthy) 0.0.0.0:8088->8088/tcp
Es importante que los servicios namenode
, datanode
, y resourcemanager
estén funcionando correctamente antes de ejecutar tareas en el clúster.
- Imagen:
timveil/docker-hadoop-namenode:3.2.x
- Descripción:
- El NameNode es el maestro del clúster Hadoop. Administra el sistema de archivos distribuido (HDFS) y mantiene el directorio jerárquico de archivos.
- Puertos expuestos:
9870
: Interfaz web para monitoreo del HDFS.
- Volúmenes:
./shared:/shared
: Carpeta compartida entre los servicios.
- Variables de entorno:
CLUSTER_NAME
: Nombre del clúster.- Archivos de configuración:
core.env
,yarn-remote.env
.
- URL:
- Imagen:
timveil/docker-hadoop-datanode:3.2.x
- Descripción:
- El DataNode almacena los bloques de datos del sistema de archivos HDFS y realiza la lectura y escritura de datos.
- Puertos expuestos:
9864
: Puerto para la comunicación con el NameNode.
- Volúmenes:
- No tiene volúmenes expuestos.
- Variables de entorno:
SERVICE_PRECONDITION
: Indica que el NameNode debe estar disponible.- Archivos de configuración:
core.env
,yarn-remote.env
.
- URL:
- Imagen:
timveil/docker-hadoop-datanode:3.2.x
- Descripción:
- Similar al DataNode-1, este nodo almacena bloques de datos y realiza operaciones de lectura y escritura en HDFS.
- Puertos expuestos:
9865
: Puerto para la comunicación con el NameNode.
- Volúmenes:
- No tiene volúmenes expuestos.
- Variables de entorno:
SERVICE_PRECONDITION
: Indica que el NameNode debe estar disponible.- Archivos de configuración:
core.env
,yarn-remote.env
.
- URL:
- Imagen:
timveil/docker-hadoop-resourcemanager:3.2.x
- Descripción:
- El ResourceManager gestiona los recursos de cómputo en el clúster Hadoop y coordina la ejecución de aplicaciones en el clúster.
- Puertos expuestos:
8088
: Interfaz web para monitoreo y gestión de trabajos en YARN.
- Volúmenes:
- No tiene volúmenes expuestos.
- Variables de entorno:
SERVICE_PRECONDITION
: Indica que el NameNode y los DataNodes deben estar disponibles.- Archivos de configuración:
core.env
,yarn-resource-manager.env
.
- URL:
- Imagen:
timveil/docker-hadoop-nodemanager:3.2.x
- Descripción:
- El NodeManager se ejecuta en cada nodo de trabajo y gestiona los recursos locales y la ejecución de aplicaciones en ese nodo.
- Puertos expuestos:
8042
: Interfaz web para monitoreo del estado de los contenedores en YARN.
- Volúmenes:
- No tiene volúmenes expuestos.
- Variables de entorno:
SERVICE_PRECONDITION
: Indica que el NameNode, DataNodes y ResourceManager deben estar disponibles.- Archivos de configuración:
core.env
,yarn-node-manager.env
.
- URL:
- Imagen:
timveil/docker-hadoop-historyserver:3.2.x
- Descripción:
- El HistoryServer permite la visualización de la información de trabajos anteriores en el clúster Hadoop.
- Puertos expuestos:
8188
: Interfaz web para visualizar el historial de trabajos en YARN.
- Volúmenes:
- No tiene volúmenes expuestos.
- Variables de entorno:
SERVICE_PRECONDITION
: Indica que el NameNode, DataNodes y ResourceManager deben estar disponibles.- Archivos de configuración:
core.env
,yarn-timeline.env
.
- URL:
- Imagen:
timveil/docker-hadoop-hive-hs2:3.1.x
- Descripción:
- El HiveServer2 permite la interacción con Apache Hive para ejecutar consultas SQL en Hadoop.
- Puertos expuestos:
10000
: Puerto para la interfaz HiveServer2.10002
: Puerto para la interfaz HiveServer2 (puede ser utilizado por clientes de diferentes aplicaciones).
- Volúmenes:
./shared:/shared
: Carpeta compartida entre los servicios.
- Variables de entorno:
SERVICE_PRECONDITION
: Indica que el metastore debe estar disponible.- Archivos de configuración:
core.env
,yarn-remote.env
,hive.env
.
- URL:
- Imagen:
timveil/docker-hadoop-hive-metastore:3.1.x
- Descripción:
- El Metastore de Hive almacena los metadatos de las tablas y bases de datos de Hive.
- Puertos expuestos:
- No tiene puertos HTTP expuestos directamente.
- Volúmenes:
./shared:/shared
: Carpeta compartida entre los servicios.
- Variables de entorno:
SERVICE_PRECONDITION
: Indica que el NameNode, DataNodes y Metastore DB deben estar disponibles.- Archivos de configuración:
core.env
,yarn-remote.env
,hive.env
,metastore.env
.
- URL:
- No tiene un enlace web expuesto directamente.
- Imagen:
timveil/docker-hadoop-hive-metastore-db:3.1.x
- Descripción:
- La base de datos de Metastore almacena los metadatos de Hive.
- Puertos expuestos:
5432
: Puerto para la base de datos PostgreSQL.
- Volúmenes:
./shared:/shared
: Carpeta compartida entre los servicios.
- Variables de entorno:
- No tiene variables de entorno específicas de la interfaz web.
- URL:
- No tiene un enlace web expuesto directamente.
Conectados al resourcemanager:
# Vamos al directorio compartido
cd /shared
# Damos permisos de ejecución al archivo
chmod +x test-mapreduce.sh
# Ejecutamos el archivo
./test-mapreduce.sh
Conectados al hiveserver:
# Vamos al directorio compartido
cd /shared
# Damos permisos de ejecución al archivo
chmod +x test-mapreduce.sh
# Ejecutamos el archivo
./test-mapreduce.sh
El anterior stack tiene puntos de mejora pendientes:
- Actualizar versiones de Hadoop, Java, Hive.
- Añadir Spark
- Persistir datos
Este clúster utiliza imágenes Docker mantenidas por Tim Veil.