quiz Informatique · 10 questions

Fundamentals of MapReduce and Hadoop

help_outline 10 questions
timer ~5 min
auto_awesome AI-generated
0 / 10
Score : 0%
1

Which component in Hadoop 1.x is responsible for allocating tasks and scheduling them across the cluster?

2

In the WordCount example, what is the key emitted by the MAP function for each word occurrence?

3

What is the primary limitation of Hadoop MapReduce V1 that YARN addresses?

4

During the MapReduce process, which step groups intermediate key/value pairs by key before reduction?

5

Which Hadoop daemon is responsible for creating containers on each node in YARN?

6

In the MapReduce programming model, which class must extend org.apache.hadoop.mapreduce.Reducer?

7

What is the purpose of the ApplicationMaster in YARN architecture?

8

When configuring a MapReduce job, which object is used to specify input and output paths on HDFS?

9

Which of the following best describes the limitation on the number of nodes for Hadoop 1.x clusters?

10

In the MapReduce WordCount example, after the Reduce phase, which word has the highest occurrence count?

menu_book

Fundamentals of MapReduce and Hadoop

Review key concepts before taking the quiz

Introduction to Hadoop and MapReduce

Apache Hadoop is the de‑facto platform for processing massive data sets across clusters of commodity hardware. At its core lies the MapReduce programming model, which enables developers to write simple map and reduce functions that Hadoop automatically distributes, schedules, and executes. Understanding the fundamentals of MapReduce and the evolution from Hadoop 1.x to the YARN (Yet Another Resource Negotiator) architecture is essential for anyone aiming to build scalable data pipelines.

Hadoop 1.x Architecture: JobTracker and TaskTracker

In the original Hadoop 1.x release, the cluster was managed by two primary daemons:

  • JobTracker – the master service responsible for allocating tasks, tracking their progress, and handling fault tolerance.
  • TaskTracker – a slave daemon on each node that executes the map and reduce tasks assigned by the JobTracker.

The JobTracker’s role as the central scheduler made it a single point of failure and limited the cluster’s ability to scale beyond a few hundred nodes. This design also enforced a fixed number of map and reduce slots per node, leading to inefficient resource utilization when workloads varied.

Why Hadoop 1.x Needed an Upgrade: The Birth of YARN

The primary limitation of Hadoop MapReduce V1 was its fixed resource slots model. Because each node advertised a static number of map and reduce slots, the cluster could not dynamically re‑allocate CPU, memory, or disk resources based on the actual needs of a job. YARN was introduced to solve this problem by decoupling resource management from the MapReduce execution engine.

YARN adds a general‑purpose resource‑management layer that can serve multiple processing frameworks (MapReduce, Spark, Tez, etc.) simultaneously. This flexibility dramatically improves cluster utilization and simplifies the addition of new applications.

YARN Core Components

YARN’s architecture consists of three main daemons:

  • ResourceManager (RM) – the global scheduler that arbitrates resources across the entire cluster.
  • NodeManager (NM) – runs on each worker node and is responsible for launching and monitoring containers (the execution environment for tasks).
  • ApplicationMaster (AM) – a per‑application entity that negotiates resources with the RM and coordinates the execution of that specific job’s tasks.

When a user submits a MapReduce job, the following sequence occurs:

  1. The client contacts the ResourceManager, which allocates a container for the ApplicationMaster.
  2. The ApplicationMaster (often a MapReduceApplicationMaster) registers with the RM and requests additional containers for map and reduce tasks.
  3. Each NodeManager creates containers on its host, launching the map or reduce processes inside them.

This model eliminates the single point of failure inherent in Hadoop 1.x and enables fine‑grained resource allocation.

The MapReduce Programming Model Explained

Even though YARN abstracts resource management, the logical flow of a MapReduce job remains unchanged. A typical job consists of four logical phases:

  • Split – Input files on HDFS are divided into logical splits, each typically matching an HDFS block (default 128 MB). Splits determine the number of map tasks.
  • Map – The Mapper processes each input record and emits intermediate (key, value) pairs. In the classic WordCount example, the map function emits the word itself as the key and the integer 1 as the value.
  • Shuffle (and Sort) – Hadoop automatically groups all intermediate values by their key. This step is often called the shuffle because data moves from map containers to reduce containers across the network.
  • Reduce – The Reducer receives each unique key and an iterator over its associated values, aggregates them (e.g., summing the counts), and writes the final output back to HDFS.

The shuffle phase is the only stage that explicitly groups intermediate key/value pairs by key before reduction, ensuring that each reducer works on a distinct subset of the data.

Key Classes in a MapReduce Job

When writing a MapReduce program with the org.apache.hadoop.mapreduce API, developers typically define four classes:

  • Mapper – extends Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> and implements the map method.
  • Reducer – extends Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT> and implements the reduce method. This is the class that must extend org.apache.hadoop.mapreduce.Reducer.
  • Driver (or Main) – configures the job, sets the mapper, reducer, input and output formats, and submits the job to the cluster.
  • Configuration – provides Hadoop‑specific settings (e.g., fs.defaultFS, mapreduce.framework.name).

To specify where the job reads its input and writes its output on HDFS, the driver uses the Job object’s static methods FileInputFormat.setInputPaths(job, path) and FileOutputFormat.setOutputPath(job, path). The Job instance therefore acts as the central container for all job‑level configuration.

WordCount: A Concrete Example

The WordCount program is the canonical “Hello World” of Hadoop. Its map function receives a line of text, tokenizes it into words, and emits (word, 1) for each occurrence. The key emitted by the MAP function for each word occurrence is the word itself. The reducer then sums all the 1 values associated with each word, producing the final count.

Below is a simplified snippet illustrating the key parts:

public static class TokenizerMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        StringTokenizer itr = new StringTokenizer(value.toString());
        while (itr.hasMoreTokens()) {
            word.set(itr.nextToken());
            context.write(word, one); // key = the word itself
        }
    }
}

Understanding this flow helps learners grasp why the shuffle step is crucial: without grouping by the word key, reducers would receive a random mix of values and could not compute accurate totals.

Configuring and Submitting a MapReduce Job

When a developer prepares a job for execution, the driver typically performs the following steps:

  1. Create a Configuration object (often by loading core-site.xml and mapred-site.xml).
  2. Instantiate a Job with that configuration and a descriptive name.
  3. Set the mapper, reducer, and optionally a combiner class.
  4. Define the input and output formats (e.g., TextInputFormat, TextOutputFormat).
  5. Specify the HDFS paths for input and output using the Job object – this is the object that “is used to specify input and output paths on HDFS”.
  6. Call job.waitForCompletion(true) to submit the job to YARN and block until it finishes.

Because YARN handles container allocation, the driver does not need to interact directly with the NodeManager or ResourceManager; those details are abstracted away.

Best Practices for Efficient MapReduce Jobs

To get the most out of a Hadoop cluster, consider the following recommendations:

  • Combine locally – Use a combiner (often the same class as the reducer) to reduce the amount of data shuffled across the network.
  • Tune split size – Adjust mapreduce.input.fileinputformat.split.maxsize and minsize to balance the number of map tasks against overhead.
  • Leverage YARN queues – Organize jobs into queues with different resource guarantees to avoid starvation.
  • Monitor with the ResourceManager UI – The RM web UI provides real‑time insight into container allocation, helping you spot bottlenecks.
  • Prefer newer APIs – The org.apache.hadoop.mapreduce (new API) offers better type safety and clearer separation of concerns compared to the legacy mapred package.

Summary and Further Learning Paths

By mastering the concepts covered in this course—Hadoop’s original JobTracker/TaskTracker model, the resource‑flexible YARN architecture, the four logical phases of MapReduce, and the essential Java classes—you are equipped to design, implement, and troubleshoot scalable data‑processing pipelines. Next steps might include exploring MapReduce optimization techniques, integrating Apache Spark on YARN, or diving into Hadoop ecosystem tools such as Hive, Pig, and HBase.

Remember, the key to success with Hadoop is not just writing code, but also understanding how the underlying daemons (JobTracker, ResourceManager, NodeManager, and ApplicationMaster) collaborate to move data efficiently across a distributed environment.

Stop highlighting.
Start learning.

Join students who have already generated over 50,000 quizzes on Quizly. It's free to get started.