Pushing Pentaho from a single machine to production scale: comparing standalone and clustered architectures, scaling transformations with parallel execution, tuning the resources of Spoon, Carte, and the Pentaho Server, and planning load balancing and failover.

So far you've worked on a single machine. Episode 14 covers the time when data grows and production demands reliability: how to deploy Pentaho properly and scale ETL execution. You'll learn when to use a single server and when to build a cluster, how to execute transformations in parallel, and how to tune resources so they're neither wasteful nor starved.
This isn't an episode about buying big machines, but about the right architectural decisions and tuning for your workload.
Two poles of deployment architecture you need to understand:
| Aspect | Standalone | Clustered |
|---|---|---|
| Components | One server instance runs everything | Several Carte/Pentaho Servers work together |
| When it fits | Small-to-medium workloads, one team | Large workloads, high availability, many jobs |
| Scalability | Limited by one machine's resources | Horizontal: add nodes as the load grows |
| Complexity | Simple, easy to manage | Needs coordination, shared repository, careful configuration |
| Failover | Single point of failure | Can be designed with redundancy |
Rule of thumb: start standalone, go clustered only when truly needed. A cluster adds operational complexity that isn't worth it for a small team with a medium workload.
Info
Don't rush to build a cluster. Many "slow" pipelines actually have ETL design problems — lookups without cache, queries without indexes, or giant transformations — not a shortage of machines. Design optimization is always cheaper than adding servers.
The most effective way to increase throughput is often not adding machines, but using the parallelism that's already available:
Before thinking about a cluster, first check whether a transformation runs heavy steps serially when they could be parallel. For example, a Sort rows placed after a filter that removes 90% of the data is far lighter than sorting at the start.
All three components run on JVMs whose heap memory can be configured. This configuration lives in script files or environment variables.
PDI's default heap is often too small for large data. On Linux, set PENTAHO_JAVA_OPTIONS before running:
export PENTAHO_JAVA_OPTIONS="-Xmx4g -Xms512m"
./spoon.shAdjust the values to your machine's RAM. Before settling on a size, check available memory with free -m — and remember that Java also needs space outside the heap (metaspace and native).
The web server also needs heap tuning, set via variables in its startup script. For a Pentaho Server cluster, you must also pay attention to the shared repository database — it's a potential bottleneck point and needs separate optimization.
An example for the Pentaho Server on Linux, heap set via environment variables before running the startup script:
export PENTAHO_SERVER_JAVA_OPTIONS="-Xmx8g -XX:MaxMetaspaceSize=512m"
./start-pentaho.shNote that server heap tuning shouldn't be done carelessly: measure the baseline usage first (episode 13), then raise it gradually and observe whether it actually reduces GC pauses or OutOfMemoryErrors. An oversized heap actually slows things down because the garbage collector has to manage a vast area.
For high availability, two important concepts:
Using a Carte cluster as a concrete example: several Carte workers run transformations, one coordinator manages the work division. Start workers with Carte as follows:
carte.sh 10.0.0.10 8081Here, carte.sh starts a Carte server listening on IP 10.0.0.10 port 8081. From Spoon, a transformation can be configured to use a cluster referencing this set of Carte workers.
Danger
A cluster is only useful if the bottleneck is really CPU or memory, not the database or an external data source. Adding workers to wait on a slow query just wastes resources. Always identify the bottleneck before scaling.
Here are patterns teams often use in production:
.ktr/.kjb files from Git to the staging/production servers automatically.The important thing across all these patterns: configuration consistency between environments. The variable substitution from episode 9 ensures the same code runs in all environments with different parameters.
The most important principle of all the patterns above is reproducibility: a production machine must be reconstructable from source at any time. Store the .ktr/.kjb files in Git (episode 9), document per-environment parameters in kettle.properties or CI/CD variables, and treat server configuration as code. When a new server must be built — due to migration or recovery — the process is no longer guessing, but following the same steps every time.
In episode 14 you understood deployment and scalability: comparing standalone and clustered architectures, scaling transformations with parallel execution and clustering, tuning the resources of Spoon, Carte, and the Pentaho Server, and planning load balancing and failover.
The key takeaways:
In episode 15, we move to advanced ETL patterns: advanced ETL patterns — incremental load, change data capture, slowly changing dimensions with surrogate keys, parallel multi-step orchestration, and optimization for large data volumes.