読者です 読者をやめる 読者になる 読者になる

Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

C# でMap Reduce その2。

前回に引き続き、Windows上でのHadoopの話です。今回は、HDInsight Emulator上での実行です。予めローカルのHDInsightエミュレータを起動しておきます。

データの準備

サンプルは前回と同じく、ワードカウントです。利用するデータと出力用フォルダを用意しておきます。hadoop fsコマンドで、フォルダを作成したり、ローカルファイルをコピーします。

> hadoop fs -mkdir input/wc/
> hadoop fs -mkdir output/wc/
> hadoop fs -copyFromLocal pg76.txt input/wc/pg76.txt
> hadoop fs -lsr

drwxr-xr-x   - x supergroup          0 2013-12-09 15:24 /user/x/input
drwxr-xr-x   - x supergroup          0 2013-12-09 15:30 /user/x/input/wc
-rw-r--r--   1 x supergroup     606626 2013-12-09 15:30 /user/x/input/wc/pg76.txt

ジョブクラス

M/Rを実行するにはジョブクラスが必要です。HadoopJobクラスを継承して新たなジョブクラスを作成します。HadoopJobConfigurationの各パスに入力ファイルと出力フォルダを指定します。

  public class MyJob : HadoopJob<Mapper, Reducer>
    {
        public override HadoopJobConfiguration Configure(ExecutorContext context)
        {
            var config = new HadoopJobConfiguration
            {
                InputPath = "input/wc/pg76.txt",
                OutputFolder = "output/wc"
            };
            return config;
        }
    }

起動処理

起動処理は、HadoopクラスのConnectメソッドで、Hadoopオブジェクトを取得し、M/Rジョブにジョブを投げます。

        static void ExecOnEmulator()
        {
            var hadoop = Hadoop.Connect();   
            hadoop.MapReduceJob.ExecuteJob<MyJob>();
        }

実行

以下のような感じで実行されます。

f:id:StateMachine:20131209155728p:plain

結果

ブラウザ上からHDFSを参照すると、結果が格納されているでしょう。

f:id:StateMachine:20131209160401p:plain

このほかにも、「MRRunner.exe」を使ってコマンドラインから起動もできたりしますが、また別途。