// Can be run in 3 ways: // 1) Sequential (e.g., go run wc.go master x.txt sequential) // 2) Master (e.g., go run wc.go master x.txt localhost:7777) // 3) Worker (e.g., go run wc.go worker localhost:7777 localhost:7778 &) func main() { if len(os.Args) != 4 { fmt.Printf("%s: see usage comments in file\n", os.Args[0]) } else if os.Args[1] == "master" { if os.Args[3] == "sequential" { mapreduce.RunSingle(5, 3, os.Args[2], Map, Reduce) } else { mr := mapreduce.MakeMapReduce(5, 3, os.Args[2], os.Args[3]) // Wait until MR is done <-mr.DoneChannel } } else { mapreduce.RunWorker(os.Args[2], os.Args[3], Map, Reduce, 100) } }
// Can be run in 3 ways: // 1) Sequential (e.g., go run wc.go master sequential x1.txt .. xN.txt) // 2) Master (e.g., go run wc.go master localhost:7777 x1.txt .. xN.txt) // 3) Worker (e.g., go run wc.go worker localhost:7777 localhost:7778 &) func main() { if len(os.Args) < 4 { fmt.Printf("%s: see usage comments in file\n", os.Args[0]) } else if os.Args[1] == "master" { var mr *mapreduce.Master if os.Args[2] == "sequential" { mr = mapreduce.Sequential("wcseq", os.Args[3:], 3, mapF, reduceF) } else { mr = mapreduce.Distributed("wcseq", os.Args[3:], 3, os.Args[2]) } mr.Wait() } else { mapreduce.RunWorker(os.Args[2], os.Args[3], mapF, reduceF, 100) } }