Online MapReduce framework for Go, which is capable for jobs in sub-second.
- Sacrificing resilience for fast performance
- Easily scalable onto distributed clusters
- Easily embeddable to existing applications
- Uses etcd for cluster management / coordination
package main import ( "context" "fmt" "github.com/ab180/lrmr" . "github.com/ab180/lrmr/test" ) func main() { cluster, err := lrmr.ConnectToCluster() if err != nil { panic(err) } defer cluster.Close() result, err := lrmr.FromLocalFile("./test/testdata/unpacked/"). FlatMap(DecodeCSV()). GroupByKey(). Reduce(Count()). RunAndCollect(context.Background(), cluster) if err != nil { panic(err) } fmt.Println("Outputs:", result.Ouptuts) fmt.Println("Metrics:", result.Metrics.String()) }
Executor is a worker in a distributed cluster which runs jobs submitted from the driver.
package main import ( "context" "fmt" "github.com/ab180/lrmr" . "github.com/ab180/lrmr/test" ) func main() { c, err := lrmr.ConnectToCluster() if err != nil { log.Fatalf("failed to join cluster: %v", err) } exec, err := lrmr.NewExecutor(c, opt) if err != nil { log.Fatalf("failed to initiate executor: %v", err) } defer exec.Close() if err := exec.Start(); err != nil { log.Fatalf("failed to start executor: %v", err) } }
- Go 1.20 or above