C#でMapReduceを作成して実行する
Hadoop Streaming
Java以外の言語でMapReduceを作成する場合、Hadoopストリーミングを利用します。仕組みは簡単でデータを標準入出力を介して受け渡す方式です。標準入力からテキストデータを受け取り、標準出力にテキストデータを出力することでHadoop側とやり取りを行います。コンソールアプリを作成すれば標準入出力を行うプログラムが作成できますので、今回はこの方式でMapReduceを作成します。
サンプル
お題はMapReduceのチュートリアルといえばこれ、ワードカウントのサンプルで、Running HDInsight C# Hadoop Streaming Sampleのサンプルを参考にしました。
Mapperコード
using System; using System.IO; namespace Cat { class Program { static void Main(string[] args) { if (args.Length > 0) { Console.SetIn(new StreamReader(args[0])); } string line; while ((line = Console.ReadLine()) != null) { Console.WriteLine(line); } } } }
Reducerコード
using System; using System.IO; using System.Linq; namespace Wc { class Program { static void Main(string[] args) { string line; var count = 0; if (args.Length > 0) { Console.SetIn(new StreamReader(args[0])); } while ((line = Console.ReadLine()) != null) { count += line.Count(cr => (cr == ' ' || cr == '\n')); } Console.WriteLine(count); } } }