Case Study · Systems Performance
Distributed MapReduce Framework
A distributed MapReduce framework in C/C++ that runs across EC2 instances with gRPC control, Protobuf-based shuffle records, and HDFS-backed output.
This is the clearest example of how I debug systems: measure first, find the actual bottleneck, and then change the design instead of guessing.
Throughput
7x improvement after isolating reducer lock contention
Deployment
Distributed across EC2 mapper, reducer, and master nodes
Key insight
More mapper concurrency slowed the job once the reducer became the bottleneck
What I built
Designed and implemented the framework end to end as part of graduate systems work, including evaluation across multiple cluster and buffer configurations.
Results
Hard problems
Reducer lock contention in non-barrier mode
The reducer held the same mutex used by producer RPC handlers while parsing batches and calling reduce logic. That serialized the entire pipeline and made non-barrier mode dramatically slower on large runs.
Scaling mapper count without overloading the reducer
Increasing mapper units from 1 to 4 increased shuffle pressure, socket activity, and reducer-side contention. The evaluation showed the reducer, not the mappers, was the real throughput limit.
Buffer sizing and burst behavior
Larger buffers reduced flush frequency but also made the system burstier. Moderate buffer sizes delivered steadier flow once reducer lock scope and backpressure behavior were accounted for.