我想在 Go(而不是 Streaming API!)中编写 Hadoop Map/Reduce 作业。
我试图掌握 hortonworks/gohadoop和 colinmarc/hdfs但我仍然不知道如何真正写作业。我已经搜索了导入这些模块的 github 代码,但显然没有任何相关内容。
在某处是否有任何 WordCount.go
?
最佳答案
这个github:https://github.com/vistarmedia/gossamr是开始在 Hadoop 上使用 golang 作业的一个很好的例子:
吉斯特:
package main
import (
"log"
"strings"
"github.com/vistarmedia/gossamr"
)
type WordCount struct{}
func (wc *WordCount) Map(p int64, line string, c gossamr.Collector) error {
for _, word := range strings.Fields(line) {
c.Collect(strings.ToLower(word), int64(1))
}
return nil
}
func (wc *WordCount) Reduce(word string, counts chan int64, c gossamr.Collector) error {
var sum int64
for v := range counts {
sum += v
}
c.Collect(sum, word)
return nil
}
func main() {
wordcount := gossamr.NewTask(&WordCount{})
err := gossamr.Run(wordcount)
if err != nil {
log.Fatal(err)
}
}
开始脚本:
./bin/hadoop jar ./contrib/streaming/hadoop-streaming-1.2.1.jar \
-input /mytext.txt \
-output /output.15 \
-mapper "gossamr -task 0 -phase map" \
-reducer "gossamr -task 0 -phase reduce" \
-io typedbytes \
-file ./wordcount
-numReduceTasks 6
关于hadoop - 如何在 Golang 中编写 Map/Reduce 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31832266/