Introducción
En el antiguo Egipto, el palacio del faraón era una magnífica muestra del poder y la prosperidad del reino. Sin embargo, tras su superficie dorada se gestaba una crisis. Los inmensos almacenes del faraón, repletos de los frutos del Nilo, estaban desorganizados. Los sacerdotes, responsables de distribuir los recursos, no lograban satisfacer las necesidades del pueblo.
Entonces apareció Amenhotep, un joven sacerdote brillante encargado de restablecer el orden en la gestión de los recursos del reino. Su misión consistía en desarrollar un sistema que garantizara una asignación justa y eficiente de los valiosos bienes, para que cada ciudadano recibiera la parte que le correspondía.
Impresionado por su inteligencia y dedicación, el faraón permitió a Amenhotep acceder a una de las últimas maravillas tecnológicas: Hadoop YARN (Yet Another Resource Negotiator). Con esta potente herramienta a su disposición, Amenhotep se propuso aprender a utilizar Applying Scheduler, un componente clave de YARN que le ayudaría a alcanzar su objetivo.
Conozca los schedulers de Hadoop YARN
En este paso, conocerá las distintas políticas de planificación disponibles en Hadoop YARN e inspeccionará el scheduler que está en ejecución.
Primero, cambie al usuario hadoop. Ejecute todos los comandos de este laboratorio en este terminal:
su - hadoop
Establezca explícitamente el directorio de configuración. En esta imagen, Hadoop está instalado en /home/hadoop/hadoop; no se utiliza /etc/hadoop/conf.
export HADOOP_CONF_DIR=/home/hadoop/hadoop/etc/hadoop
Hadoop YARN admite Fair Scheduler y Capacity Scheduler. Fair Scheduler comparte los recursos entre las aplicaciones a lo largo del tiempo; los pesos de las colas influyen en la proporción de recursos que recibe cada una. Capacity Scheduler asigna capacidades garantizadas a las colas organizadas jerárquicamente y permite compartir los recursos que no se utilicen.
Hadoop 3.3.6 no incluye el subcomando yarn scheduler. Consulte la API REST de ResourceManager para inspeccionar el scheduler que está realmente en ejecución, en lugar de dar por hecho que se ha aplicado un archivo de configuración. Guarde la respuesta:
curl -fsS --retry 15 --retry-connrefused --retry-delay 1 http://localhost:8088/ws/v1/cluster/scheduler -o /home/hadoop/scheduler-initial.json
Muestre el tipo de scheduler activo:
python3 - <<'PY'
import json
with open('/home/hadoop/scheduler-initial.json') as stream:
info = json.load(stream)['scheduler']['schedulerInfo']
print(info['type'])
PY
Resultado esperado en un entorno de laboratorio recién iniciado:
capacityScheduler
Deje abierto este terminal para los siguientes pasos. Configurará cada scheduler mediante los archivos de configuración de Hadoop y reiniciará ResourceManager para cargar la clase del scheduler seleccionado.
Configure Fair Scheduler
En este paso, configurará Fair Scheduler para compartir los recursos entre las colas citizens y priests.
Como usuario hadoop, cree el archivo de asignaciones ejecutando este bloque completo:
cat > /home/hadoop/fair-scheduler.xml <<'XML'
<?xml version="1.0"?>
<allocations>
<defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
<queue name="root">
<weight>1.0</weight>
<queue name="citizens">
<weight>1.0</weight>
<minResources>1024 mb, 1 vcores</minResources>
</queue>
<queue name="priests">
<weight>2.0</weight>
<minResources>2048 mb, 2 vcores</minResources>
</queue>
</queue>
</allocations>
XML
La cola citizens tiene un peso de 1 y un mínimo de 1024 MB de memoria y 1 vcore. La cola priests tiene un peso de 2 y un mínimo de 2048 MB de memoria y 2 vcores. Los recursos mínimos son objetivos sujetos a los recursos disponibles en el clúster; los pesos influyen en cómo se distribuyen los recursos restantes.
Seleccione Fair Scheduler e indique en yarn-site.xml la ruta al archivo de asignaciones. El siguiente comando conserva la configuración existente de NodeManager:
python3 - <<'PY'
import os
import xml.etree.ElementTree as ET
path = os.path.join(os.environ['HADOOP_CONF_DIR'], 'yarn-site.xml')
tree = ET.parse(path)
root = tree.getroot()
settings = {
'yarn.resourcemanager.scheduler.class':
'org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler',
'yarn.scheduler.fair.allocation.file': '/home/hadoop/fair-scheduler.xml',
}
for name, value in settings.items():
prop = next((p for p in root.findall('property') if p.findtext('name') == name), None)
if prop is None:
prop = ET.SubElement(root, 'property')
ET.SubElement(prop, 'name').text = name
ET.SubElement(prop, 'value')
prop.find('value').text = value
tree.write(path, encoding='UTF-8', xml_declaration=True)
PY
Para cambiar la clase del scheduler, debe reiniciar ResourceManager. En este clúster de prácticas no hay aplicaciones en ejecución. Detenga y vuelva a iniciar únicamente ResourceManager:
yarn --daemon stop resourcemanager
yarn --daemon start resourcemanager
Vuelva a consultar el scheduler en ejecución. Las opciones de reintento dan tiempo a ResourceManager para iniciarse; durante el inicio pueden producirse breves errores de conexión.
curl -fsS --retry 15 --retry-connrefused --retry-delay 1 http://localhost:8088/ws/v1/cluster/scheduler -o /home/hadoop/scheduler-fair.json
python3 - <<'PY'
import json
with open('/home/hadoop/scheduler-fair.json') as stream:
info = json.load(stream)['scheduler']['schedulerInfo']
print(info['type'])
for queue in info['rootQueue']['childQueues']['queue']:
if queue['queueName'] in ('root.citizens', 'root.priests'):
resources = queue['minResources']
print(queue['queueName'], resources['memory'], resources['vCores'])
PY
Resultado esperado (el orden de las colas puede variar):
fairScheduler
root.citizens 1024 1
root.priests 2048 2
Complete la comprobación de este paso antes de cambiar de scheduler en el paso 3.
Configure Capacity Scheduler
En este paso, cambiará a Capacity Scheduler y asignará a cada cola el 50 % de la capacidad del clúster.
Como usuario hadoop, escriba capacity-scheduler.xml directamente en el directorio de configuración de Hadoop. Capacity Scheduler no cargará un archivo que solo esté en /home/hadoop:
cat > /home/hadoop/hadoop/etc/hadoop/capacity-scheduler.xml <<'XML'
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>citizens,priests</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.citizens.capacity</name>
<value>50</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.priests.capacity</name>
<value>50</value>
</property>
</configuration>
XML
Las capacidades de las colas secundarias suman el 100 %. Seleccione Capacity Scheduler en yarn-site.xml:
sed -i 's/org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler/org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler/' /home/hadoop/hadoop/etc/hadoop/yarn-site.xml
Reinicie ResourceManager para cargar la nueva clase de scheduler y la configuración de las colas:
yarn --daemon stop resourcemanager
yarn --daemon start resourcemanager
Inspeccione el scheduler activo y sus colas:
curl -fsS --retry 15 --retry-connrefused --retry-delay 1 http://localhost:8088/ws/v1/cluster/scheduler -o /home/hadoop/scheduler-capacity.json
python3 - <<'PY'
import json
with open('/home/hadoop/scheduler-capacity.json') as stream:
info = json.load(stream)['scheduler']['schedulerInfo']
print(info['type'])
for queue in info['queues']['queue']:
print(queue['queueName'], queue['capacity'])
PY
Resultado esperado (el orden de las colas puede variar):
capacityScheduler
citizens 50.0
priests 50.0
Cada cola tiene una capacidad garantizada del 50 % cuando ambas necesitan recursos. La capacidad que no se utilice puede compartirse; estos valores no obligan a dejar ociosos los recursos disponibles.
Resumen
En este laboratorio, aprendió a configurar y aplicar distintas políticas de planificación en Hadoop YARN para gestionar la asignación de recursos de forma eficaz. Al dominar Fair Scheduler y Capacity Scheduler, Amenhotep puede garantizar una distribución justa de los recursos entre los ciudadanos del reino y dar prioridad a las tareas esenciales que realizan los sacerdotes.
Esta experiencia práctica le permitió comprender mejor las potentes capacidades de Hadoop YARN y cómo puede gestionar recursos en entornos complejos. Al aplicar los conocimientos adquiridos en este laboratorio, podrá crear sistemas de gestión de recursos eficientes y justos, adaptados a las necesidades específicas de su organización.



