This guide captures the fastest way to demonstrate the 10-node RainStorm/HyDFS cluster locally.
- Docker and Docker Compose
- Go 1.26 or newer for local binary builds
tmuxfor the optional monitoring layout
make build-docker
make up
make test
make demo
make downmake up starts one leader/introducer node and nine worker nodes. Each node runs SWIM membership, HyDFS storage, and RainStorm stream processing services.
make demo uploads a dataset to HyDFS, submits a 2-stage filter+count pipeline with exactly-once semantics, waits for completion, and checks the aggregated results against ground truth (pattern STOP: 34 rows, 14 unique sign messages).
To re-run the demo, reset first — exactly-once dedup state persists in the HyDFS volumes and a stale-state re-run would (correctly) suppress all output:
make reset && make demo./scripts/mp4/run_test.sh 1 # filter & count, verified against ground truth
./scripts/mp4/run_test.sh 2 # exactly-once under a mid-run task kill
./scripts/mp4/run_test.sh 3 # autoscaling under loadEach run resets the cluster, uploads data, submits the job, collects per-task outputs from all containers, and runs the matching verify_test*.sh script.
make logs # stream all container logs
make status # show container state and exposed ports
make tmux # open node1 CLI, logs, and shell panes
make node1 # attach to the node1 interactive CLIDetach from docker attach node1 without stopping the container with ctrl+a, then ctrl+d.
With the cluster running:
docker stop node5
make logsThe leader should detect the failed worker through SWIM, reassign stream tasks, and continue processing with surviving nodes. HyDFS data is replicated across successors in the ring.
Runtime logs, built binaries, and local Docker storage are intentionally ignored. Benchmark CSVs and plots may stay in the repository when they are small enough to explain system behavior, but new large raw datasets should be kept outside Git.