如何在Golang中编写Map/Reduce任务?

11
我想用Go语言编写Hadoop Map/Reduce作业(而不是使用Streaming API!)。
我尝试了解hortonworks/gohadoopcolinmarc/hdfs,但我仍然不知道如何编写真正的作业。我在GitHub上搜索导入这些模块的代码,但显然没有相关的内容。
有没有任何WordCount.go的示例?
2个回答

2
这个github链接:https://github.com/vistarmedia/gossamr 是一个很好的例子,可以开始使用golang在Hadoop上进行工作。
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

1
感谢Eric的贡献!但是你的代码使用了Hadoop Streaming API,而我已经声明我对它不感兴趣。 - frigo americain

0

Hadoop的链接在哪里? - frigo americain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接