Hadoop ストリーミングをサポートする Go プログラミング言語の有名なクライアントはありますか? 私は周りを検索しましたが、価値のあるものを見つけることができませんでした.
質問する
2537 次
1 に答える
3
Hadoop ストリーミング ジョブを Go で直接実行することもできます。それを実行している人がいると聞いたことがあります。Go で Wordcount を実行しているブログからの例を次に示します。マッパーは次のとおりです。
package main
import (
"bufio"
"fmt"
"os"
"regexp"
)
func main() {
/* Word regular experssion. */
re, _ := regexp.Compile("[a-zA-Z0-9]+")
reader := bufio.NewReader(os.Stdin)
for {
line, _, err := reader.ReadLine()
if err != nil {
if err != os.EOF {
fmt.Fprintf(os.Stderr, "error: can't read - %s\n", err.String())
}
break
}
matches := re.FindAll(line, -1)
for _, word := range(matches) {
fmt.Printf("%s\t1\n", word)
}
}
}
そして、ここにリデューサーがあります:
package main
import (
"bufio"
"bytes"
"fmt"
"os"
"strconv"
)
func main() {
counts := make(map[string]uint)
reader := bufio.NewReader(os.Stdin)
for {
line, _, err := reader.ReadLine()
if err != nil {
if err != os.EOF {
fmt.Fprintf(os.Stderr, "error: can't read - %s\n", err)
}
break
}
i := bytes.IndexByte(line, '\t')
if i == -1 {
fmt.Fprintln(os.Stderr, "error: can't find tab")
continue
}
word := string(line[0:i])
count, err := strconv.Atoui(string(line[i+1:]))
if err != nil {
fmt.Fprintln(os.Stderr, "error: bad number - %s\n", err)
continue
}
counts[word] = counts[word] + count
}
/* Output aggregated counts. */
for word, count := range(counts) {
fmt.Printf("%s\t%d\n", word, count)
}
}
または、 dmrgoを使用してストリーミング ジョブを簡単に作成することもできます。ワードカウントの例がここにあります。
gomrjobと呼ばれる別のライブラリを見ましたが、あまりよく維持されておらず、非常にアルファ版に見えませんが、冒険好きなら試してみてください :)
于 2013-05-22T18:24:41.123 に答える