我想在Go中编写Hadoop Map / Reduce作业(而不是Streaming API!)。
我试图掌握hortonworks/gohadoop和colinmarc/hdfs,但我仍然没有看到如何写真实的工作。我搜索了导入这些模块的github代码,但显然没有任何相关性。
某处有WordCount.go
吗?
答案 0 :(得分:-1)
这是一个用Golang编写的Map / Reduce的简单实现(可在github上获得):
答案 1 :(得分:-1)
这个github:https://github.com/vistarmedia/gossamr是开始在Hadoop上使用golang作业的一个很好的例子:
JIST:
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