MapReduce helps process big data by breaking tasks into small parts and running them on many computers at once.
MapReduce job execution flow in Hadoop
MapReduce job runs in three main steps: 1. Map phase: Processes input data and creates key-value pairs. 2. Shuffle and Sort phase: Groups data by keys. 3. Reduce phase: Processes grouped data to produce final results.
The Map phase runs many tasks in parallel on chunks of data.
The Shuffle phase moves data between machines to group keys together.
Map phase: Read lines from a file and output (word, 1) for each word. Shuffle phase: Group all (word, 1) pairs by word. Reduce phase: Sum all counts for each word to get total occurrences.
Map phase: Extract user IDs and actions from logs. Shuffle phase: Group actions by user ID. Reduce phase: Summarize actions per user.
This Python program uses the MRJob library to count words in input data. The mapper splits lines into words and outputs each word with count 1. The reducer sums counts for each word.
from mrjob.job import MRJob class MRWordCount(MRJob): def mapper(self, _, line): for word in line.split(): yield word.lower(), 1 def reducer(self, word, counts): yield word, sum(counts) if __name__ == '__main__': MRWordCount.run()
The MapReduce framework handles splitting data and running tasks in parallel.
Shuffle and sort happen automatically between map and reduce phases.
Reducers receive all values for a key together to process them.
MapReduce breaks big data jobs into map and reduce tasks.
Map tasks process input and create key-value pairs.
Reduce tasks aggregate results by key to produce final output.
Practice
Map task in a MapReduce job?Solution
Step 1: Understand the Map task function
The Map task reads input data and transforms it into intermediate key-value pairs.Step 2: Differentiate from Reduce task
The Reduce task aggregates these key-value pairs, so it is not responsible for initial processing.Final Answer:
Process input data and create key-value pairs -> Option AQuick Check:
Map task = create key-value pairs [OK]
- Confusing Map with Reduce task role
- Thinking Map stores final output
- Assuming Map schedules tasks
Solution
Step 1: Recall MapReduce execution order
The job starts with Map tasks processing input, then Shuffle sorts and transfers data, followed by Reduce tasks aggregating results.Step 2: Match sequence to options
Only Map -> Shuffle -> Reduce correctly shows Map first, then Shuffle, then Reduce.Final Answer:
Map -> Shuffle -> Reduce -> Option AQuick Check:
Execution order = Map, Shuffle, Reduce [OK]
- Mixing up Shuffle and Map order
- Placing Reduce before Map
- Ignoring Shuffle step
map(String key, String value) {
emit(value, 1);
}
reduce(String key, Iterator values) {
int sum = 0;
while (values.hasNext()) {
sum += values.next();
}
emit(key, sum);
}What will be the output for input:
["a", "apple"], ["b", "apple"], ["c", "banana"]?Solution
Step 1: Analyze Map output
Map emits (value, 1) pairs: ('apple',1), ('apple',1), ('banana',1).Step 2: Analyze Reduce aggregation
Reduce sums counts for each key: 'apple' = 1+1=2, 'banana' = 1.Final Answer:
[('apple', 2), ('banana', 1)] -> Option CQuick Check:
Count of 'apple' = 2, 'banana' = 1 [OK]
- Counting keys instead of values
- Confusing input keys with values
- Adding counts incorrectly
Map task reads input and emits key-value pairs.
Reduce task tries to read input directly from HDFS instead of shuffle output.
Reduce task aggregates values by key.
Solution
Step 1: Understand Reduce input source
Reduce tasks receive data from the shuffle phase, not directly from HDFS input files.Step 2: Identify incorrect flow
Reading directly from HDFS in Reduce breaks the flow and causes errors.Final Answer:
Reduce task should read from shuffle output, not directly from HDFS -> Option DQuick Check:
Reduce reads shuffle output [OK]
- Thinking Reduce reads input files
- Swapping Map and Reduce roles
- Ignoring shuffle phase
Solution
Step 1: Understand filtering impact
Filtering early reduces data volume, saving network and processing time.Step 2: Apply filter in Map task
Filtering in Map avoids sending unnecessary data to shuffle and Reduce phases.Final Answer:
In the Map task before emitting key-value pairs -> Option BQuick Check:
Filter early in Map for best performance [OK]
- Filtering only in Reduce wastes resources
- Trying to filter during shuffle (not possible)
- Filtering after job completion is too late
Ready to prove it?
Pass the test and this pattern moves unknown
