0
0
HadoopHow-ToBeginner ยท 4 min read

How YARN Works in Hadoop: Architecture and Workflow Explained

In Hadoop, YARN (Yet Another Resource Negotiator) manages cluster resources and schedules tasks by splitting job management into a ResourceManager and NodeManagers. It allocates resources dynamically and tracks task progress, enabling efficient data processing across many machines.
๐Ÿ“

Syntax

YARN works through key components and their interactions:

  • ResourceManager: Central authority that manages resources and schedules applications.
  • NodeManager: Runs on each cluster node, manages containers and monitors resource usage.
  • ApplicationMaster: Manages the lifecycle of a single application, negotiates resources from ResourceManager.
  • Container: A unit of resource allocation (CPU, memory) where tasks run.

The basic workflow syntax is:

Client submits job โ†’ ResourceManager allocates containers โ†’ ApplicationMaster runs tasks in containers โ†’ NodeManagers monitor tasks โ†’ ResourceManager tracks progress
plaintext
Client submits job โ†’ ResourceManager allocates containers โ†’ ApplicationMaster runs tasks in containers โ†’ NodeManagers monitor tasks โ†’ ResourceManager tracks progress
๐Ÿ’ป

Example

This example shows how YARN manages a simple MapReduce job submission and execution:

python
from hadoop_yarn_simulation import ResourceManager, NodeManager, ApplicationMaster

# Initialize ResourceManager and NodeManagers
rm = ResourceManager()
nm1 = NodeManager(node_id='node1')
nm2 = NodeManager(node_id='node2')
rm.register_node_manager(nm1)
rm.register_node_manager(nm2)

# Client submits a job
app_master = ApplicationMaster(job_id='job_001', resource_manager=rm)

# ApplicationMaster requests containers
containers = app_master.request_containers(cpu=2, memory=2048, count=2)

# Run tasks in containers
for container in containers:
    nm = rm.get_node_manager(container.node_id)
    nm.launch_task(container, task='map')

# Monitor progress
progress = app_master.monitor_tasks()
print(f"Job progress: {progress}%")
Output
Job progress: 100%
โš ๏ธ

Common Pitfalls

Common mistakes when working with YARN include:

  • Not configuring enough resources in yarn-site.xml, causing job failures.
  • Ignoring container memory limits, leading to task crashes.
  • Misunderstanding the role of ApplicationMaster, which must be running for job progress.
  • Assuming ResourceManager schedules tasks directly instead of allocating containers.

Always monitor logs and resource usage to avoid these issues.

python
## Wrong: Requesting more containers than available nodes
app_master.request_containers(cpu=4, memory=4096, count=10)  # May fail if cluster is small

## Right: Request containers within cluster capacity
app_master.request_containers(cpu=2, memory=2048, count=2)
๐Ÿ“Š

Quick Reference

ComponentRole
ResourceManagerManages resources and schedules applications across the cluster
NodeManagerManages containers and monitors resource usage on each node
ApplicationMasterControls the lifecycle of a single application and requests resources
ContainerAllocated resource unit where tasks run
โœ…

Key Takeaways

YARN splits resource management and job scheduling into ResourceManager and NodeManagers for scalability.
ApplicationMaster negotiates resources and manages tasks within allocated containers.
Proper resource configuration is critical to avoid job failures and crashes.
YARN enables efficient use of cluster resources by dynamically allocating containers.
Monitoring task progress and resource usage helps prevent common YARN issues.