前回に引き続き、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>(); }
実行
以下のような感じで実行されます。
結果
ブラウザ上からHDFSを参照すると、結果が格納されているでしょう。
このほかにも、「MRRunner.exe」を使ってコマンドラインから起動もできたりしますが、また別途。