Batch vs real-time ingestion in Hadoop - Performance Comparison
We want to understand how the time to process data changes when using batch or real-time ingestion in Hadoop.
How does the way data is handled affect the work done as data size grows?
Analyze the time complexity of the following Hadoop batch ingestion job.
// Batch ingestion example
Job job = Job.getInstance(conf, "BatchIngestion");
job.setInputFormatClass(TextInputFormat.class);
TextInputFormat.addInputPath(job, new Path(inputPath));
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
job.setOutputFormatClass(TextOutputFormat.class);
TextOutputFormat.setOutputPath(job, new Path(outputPath));
job.waitForCompletion(true);
This code runs a batch job that reads all input data at once, processes it, and writes output.
Look at what repeats during the batch job.
- Primary operation: Reading and processing each data record once in the mapper and reducer.
- How many times: Once for every record in the input data set.
As the input data grows, the job processes more records one by one.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 processing steps |
| 100 | 100 processing steps |
| 1000 | 1000 processing steps |
Pattern observation: The work grows directly with the number of records; doubling data doubles work.
Time Complexity: O(n)
This means the time to finish the batch job grows in a straight line with the amount of data.
[X] Wrong: "Real-time ingestion always takes less time than batch ingestion."
[OK] Correct: Real-time ingestion handles data in small pieces continuously, but the total work over time can be similar or more depending on data volume and processing steps.
Understanding how batch and real-time ingestion scale helps you explain trade-offs clearly and shows you know how data size affects processing time in Hadoop jobs.
"What if we changed the batch job to process data in smaller chunks repeatedly instead of all at once? How would the time complexity change?"
Practice
Solution
Step 1: Understand batch ingestion concept
Batch ingestion collects data in chunks or groups rather than continuously.Step 2: Compare with real-time ingestion
Real-time ingestion processes data immediately, unlike batch which waits for scheduled times.Final Answer:
It collects and processes data in groups at scheduled times. -> Option DQuick Check:
Batch ingestion = scheduled group processing [OK]
- Confusing batch with real-time ingestion
- Thinking batch requires instant processing
- Assuming batch needs user interaction
Solution
Step 1: Identify real-time ingestion tool syntax
Apache Flume uses the commandflume-ng agentto start an agent for real-time ingestion.Step 2: Check other options for correctness
Options B and C relate to batch or file operations, and D is not a valid Flume command.Final Answer:
flume-ng agent -n agent1 -c conf -f conf/flume.conf -> Option BQuick Check:
Flume agent command = real-time start [OK]
- Using batch job commands for real-time ingestion
- Confusing file upload with ingestion start
- Incorrect Flume command syntax
hadoop jar batchjob.jar input_dir output_dir
What will happen when this command runs?
Solution
Step 1: Analyze the batch job command
The command runs a MapReduce job on all data present in input_dir at the time of execution.Step 2: Understand batch vs real-time behavior
Batch jobs process data in bulk, not continuously or in real-time.Final Answer:
It processes all files in input_dir at once and writes results to output_dir. -> Option AQuick Check:
Batch job = bulk processing [OK]
- Thinking batch jobs run continuously
- Assuming input directory is deleted
- Confusing batch with streaming
agent1.sources = source1 agent1.sinks = sink1 agent1.channels = channel1 agent1.sources.source1.type = exec agent1.sources.source1.command = tail -F /var/log/syslog agent1.channels.channel1.type = memory agent1.sinks.sink1.type = hdfs agent1.sinks.sink1.hdfs.path = /data/logs/
But no data appears in HDFS. What is the likely error?
Solution
Step 1: Check Flume configuration connections
Flume requires explicit binding of sources, channels, and sinks. Missing bindings cause no data flow.Step 2: Verify bindings in config
The config lacks lines likeagent1.sources.source1.channels = channel1andagent1.sinks.sink1.channel = channel1.Final Answer:
The channel is not connected to the sink and source. -> Option CQuick Check:
Flume needs source-channel-sink bindings [OK]
- Ignoring missing bindings in Flume config
- Assuming wrong tail command causes failure
- Thinking sink path must pre-exist
Solution
Step 1: Analyze data arrival and processing needs
Large daily data fits batch ingestion since it processes data in groups periodically.Step 2: Consider immediacy of user activity monitoring
User activity requires instant processing, so real-time ingestion is suitable.Final Answer:
Use batch ingestion for daily data and real-time ingestion for user activity. -> Option AQuick Check:
Batch = large periodic, Real-time = instant [OK]
- Mixing batch and real-time roles
- Using real-time for large daily data unnecessarily
- Ignoring immediacy of user activity data
Ready to prove it?
Pass the test and this pattern moves unknown
