This guide gives you a production operations checklist for Apache Hop with practical examples you can adapt today. It focuses on the parts that matter in real environments: configuration, deployment, monitoring, maintenance, backups, upgrades, and the traps that catch busy teams. Use it to standardize how you run pipelines and workflows, reduce surprises, and enable faster, safer changes.
Workflow Overview
A clear, repeatable flow reduces rework and outages.
- Define outcomes
- SLAs and SLOs for latency, freshness, and success rate
- Acceptable failure modes and retry policies
- On-call expectations and escalation paths
- Inventory
- List pipelines and workflows with owners and dependencies
- Inputs, outputs, data contracts, and retention requirements
- Standardize
- Projects, environments, parameters, run configurations
- Secrets handling via environment variables or secret mounts
- Package
- Build a runnable artifact (container or tarball) with explicit versions
- Include a manifest: Hop version, Java version, OS image, and plugin versions
- Pre-flight
- Validate parameters and required environment variables
- Check connectivity for databases, object stores, and APIs
- Verify permissions and storage paths
- Deploy
- Roll out to staging first
- Promote to production with the same artifact and parameters
- Run control
- Scheduling, concurrency limits, retries, and backoff
- Idempotency strategy for safe reruns
- Observe
- Structured logs, key metrics, run history
- Central log shipping and searchable fields
- Respond
- Playbooks for timeouts, partial failures, schema drift, and zero-row anomalies
- Clear exit codes and failure signals to the scheduler
- Maintain
- Backups, dependency patches, temp directory cleanup
- Cost and resource usage reviews
- Improve
- Small, frequent changes with post-incident reviews
Configuration and Packaging
Standardize early so every pipeline runs the same way everywhere.
Projects and environments
- Keep a single project per domain with clear environments (dev, staging, prod).
- Externalize all environment-specific values as variables and parameters.
- Keep configuration in version control with a simple, documented layout.
Example layout:
/projects/my_project/
pipelines/
workflows/
config/
scripts/
plugins/
Variables and parameters
- Define required parameters with sane defaults where possible.
- Keep secrets out of source: pass via environment variables or secret mounts.
Example parameter catalog (YAML excerpt):
params:
RUN_DATE: ISO date, required at schedule time
SRC_JDBC_URL: secret, from environment or secret store
BATCH_SIZE: int, default 1000
Run wrappers
Use a small shell wrapper to set environment and pass parameters consistently.
Example wrapper script:
#!/bin/sh
set -euo pipefail
export HOP_PROJECT=my_project
export HOP_ENV=prod
export HOP_LOG_LEVEL=Basic
RUN_DATE="${RUN_DATE:-$(date +%F)}"
/opt/hop/bin/hop-run.sh \
-file "/projects/my_project/pipelines/load_customers.hpl" \
-param: RUN_DATE="${RUN_DATE}" \
-level "${HOP_LOG_LEVEL}"
Packaging
- Containers: pin a base image tag, copy only what you need, and run as non-root.
- Tarball: include a run script, configs, checksums, and a manifest with versions.
- Always record: Hop version, Java version, OS image, plugin versions.
Deployment and Run Control
Choose a scheduler you already operate well (cron, systemd timers, Kubernetes CronJob, or an orchestrator). Keep run control simple and explicit.
Scheduling examples
Cron (single VM):
0 2 * * * RUN_DATE=$(date +\%F) /srv/hop/run_load_customers.sh >>/var/log/hop/load_customers.log 2>&1
Kubernetes CronJob (excerpt):
apiVersion: batch/v1
kind: CronJob
metadata:
name: hop-load-customers
spec:
schedule: "0 2 * * *"
jobTemplate:
spec:
backoffLimit: 1
template:
spec:
restartPolicy: Never
containers:
- name: runner
image: myrepo/hop:2.8.x
env:
- name: HOP_PROJECT
value: my_project
- name: HOP_ENV
value: prod
args: ["/scripts/run_load_customers.sh"]
Run safety
- Concurrency guards: use a lock file or scheduler-native concurrencyPolicy to avoid overlapping runs.
- Retries: prefer short, bounded retries with exponential backoff for transient errors.
- Exit codes: ensure the wrapper exits non-zero on failure so the scheduler can alert and retry.
Monitoring and Alerting
You cannot fix what you cannot see. Capture logs, metrics, and run history.
Logging
- Use structured log lines with consistent keys. Example:
printf "pipeline=load_customers run_date=%s rows_in=%s rows_out=%s ms=%s status=%s\n" \
"$RUN_DATE" "$ROWS_IN" "$ROWS_OUT" "$DURATION_MS" "$STATUS"
- Keep log level at Basic or Info in production; use Debug only for short bursts.
- Ship stdout and stderr to your central log system with a clear source label.
Metrics
- Emit at least: outcome (success or failure), duration, rows processed, and key error codes.
- Example Prometheus Pushgateway on job completion:
cat <<EOF | curl --data-binary @- http://pushgw:9091/metrics/job/load_customers/instance/$(hostname)
load_customers_duration_ms $DURATION_MS
load_customers_rows_out $ROWS_OUT
load_customers_success{status="$STATUS"} 1
EOF
Alerting
- Page on: consecutive failures, duration p95 above SLO, and zero-rows anomalies.
- Ticket on: degraded but successful runs, growing retry counts, and near-capacity signals.
Run history
Store run metadata (start, end, status, counts, version, parameters) in a small table or log index for trend analysis and audits.
Maintenance and Backups
Protect what you need to rebuild quickly.
Back up
- Project repository (pipelines, workflows, configs, scripts).
- Environment definitions and parameter catalogs.
- Custom plugins and utility libraries.
- Scheduler configs and run scripts.
- Run history or operational metadata if not recreated elsewhere.
Retention and rotation
- Rotate logs by size or age; keep at least the last N successful and failed runs.
- Prune temp and staging directories on a schedule to control disk usage.
Verification
- Quarterly restore drill: bootstrap a clean environment from backups and re-run a small pipeline.
- Hash and verify artifacts at backup and restore time.
Upgrades and Rollback
Change safely, one step at a time.
Versioning
- Pin exact versions of Hop, Java, OS image, and plugins in your manifests.
- Document known incompatibilities and required flags per version.
Pre-production validation
- Run a representative sample in staging with production-like data volume.
- Compare key metrics (duration, rows, memory) against baseline.
- Keep the previous image or tarball available for immediate rollback.
Rollout
- Canary: route a subset of schedules to the new version first.
- Blue/green: stand up the new stack in parallel and switch schedules.
Rollback
- Make rollback a one-command change (previous image tag, previous artifact path).
- After rollback, capture diffs in output and logs to inform a fix-forward.
Common Production Pitfalls
Avoid these frequent issues.
- Hard-coded paths, dates, and credentials. Fix by parameterizing all run-time values.
- Missing defaults for optional parameters. Define explicit defaults and validate early.
- Unbounded retries that flood dependencies. Use capped retries with backoff.
- Overlapping runs that corrupt outputs. Enforce single-instance concurrency.
- No row-count or schema assertions. Add simple checks to catch silent data loss or drift.
- Locale and timezone mismatches. Set TZ and locale explicitly in the runtime.
- Non-idempotent loads causing duplicates. Use upserts, staging tables, or checkpoints.
- Under or over parallelization. Size threads to downstream capacity and monitor back-pressure.
- Logging too noisy or too sparse. Tune levels and standardize structured logs.
- Skipping restore drills. Test that backups actually rebuild a runnable system.
Local Pilot Plan
Prove the approach on one useful, low-risk target.
Scope
- Choose a single pipeline with clear inputs and outputs, and a daily schedule.
- Define success metrics: success rate, 95th percentile duration, and rows processed.
Local validation
- Run with a small, representative dataset on a developer machine or a sandbox VM.
- Add a wrapper script, parameters, structured logs, and basic metrics.
- Simulate failures (bad credentials, network blip) to validate retries and alerts.
Staged rollout
- Schedule in staging with production-like parameters.
- Observe for one week. Tune log level, retries, and resource limits.
- Promote to production with the same artifact and parameter set.
This narrow, measurable, locally inspectable pilot builds confidence and reduces rework when you expand to more pipelines.
Conclusion
A disciplined, checklist-driven approach makes Apache Hop predictable in production. Standardize configuration, package the same way for every environment, schedule with clear run control, instrument runs with logs and metrics, and practice backups and rollbacks. Start small with a focused pilot, then scale the pattern across your pipelines. Your next steps: pick one pipeline, create the wrapper script and parameter catalog, add structured logs and a few metrics, schedule it in staging, and iterate for one week before promoting.