如何在golang中编写map/reduce任务?

guz6ccqo  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(507)

我想在go中编写hadoop map/reduce作业(而不是流式api!)。
我试图掌握hortonworks/gohadoop和colinmarc/hdfs,但我仍然看不到如何真正地编写作业。我已经在github上搜索了导入这些模块的代码,但是显然没有相关的内容。
有吗 WordCount.go 在什么地方?

u91tlkcl

u91tlkcl1#

此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
k5ifujac

k5ifujac2#

下面是用golang编写的map/reduce的一个简单实现(可在github上获得):
https://github.com/dbravender/go_mapreduce

相关问题