Distributed data processing is what you reach for when one machine can't hold the data or finish the work in time. The core idea is to split a dataset across many machines, run computation where each slice already lives, and combine the partial results - turning a job that would take days on a single server into one that finishes in minutes across a cluster. The engines in this category differ mostly in how they schedule that work, whether they process data in batches or as a continuous stream, and how much of the hard part (fault tolerance, shuffling, state) they hide from you.
Batch versus stream
The oldest split in the field is between batch and stream. Apache Hadoop and its MapReduce model defined the batch era: read a large bounded dataset from disk, process it in stages, write the result back. Stream processors like Apache Flink, Apache Storm, and Spark Streaming handle unbounded data that never stops arriving, producing results within seconds of an event. Apache Beam tries to erase the distinction with one programming model that runs on either kind of engine.
SQL on big data
Not every job needs hand-written code. Apache Hive put a SQL layer over Hadoop so analysts could query files in HDFS without writing MapReduce. Presto and Trino took that further with a fast, interactive query engine that federates across many sources at once. Apache Pig offered a middle path - a scripting language for data flows that compiled down to MapReduce.
Messaging and specialized engines
Apache Pulsar is a messaging and streaming platform that separates serving from storage, and Apache Samza is a stream processor built tightly around Kafka's log model. For workloads that don't fit a general engine, specialized ones exist: Apache Sedona adds geospatial types and spatial joins on top of Spark.
Choosing one
- Large bounded batch jobs over files? Spark (the de-facto successor to Hadoop MapReduce) or Hive for SQL.
- Low-latency stream processing with rich state and exactly-once? Apache Flink.
- Interactive, federated SQL across many sources? Presto or Trino.
- One pipeline that must run on multiple engines? Apache Beam.
- Geospatial analytics at scale? Apache Sedona.
The practical decisions are latency (batch minutes vs. stream milliseconds), how much state your logic carries, what delivery guarantee you need, and which engine your team already operates. Most data platforms end up running more than one.