都内で働くSEの技術的なひとりごと

都内でサラリーマンやってます。マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。よろしくお願いします♪

HDInsightでMapReduce処理を実行する

Microsoft.Hadoop.MapReduce.StreamingUnitクラスのおかげて、Hadoopサービスを使用しなくても、MapReduceの一連の処理がテストができます。今回は、テストデータをHDFS上に展開して、そのテストデータに対して、MapとReduce処理を行うアセンブリを作成し処理を行います。手順は以下の通りです。

  1. Jobを登録するクラスを作成します。
    namespace test
    {
        public class LogCountJob : HadoopJob<LogMapper, LogReducer>
        {
            //HadoopJobのMapメソッドをオーバーライドする。
            public override HadoopJobConfiguration Configure(ExecutorContext context)
            {
                //設定を返す。
                var hdConfig = new HadoopJobConfiguration();
                hdConfig.InputPath = "input/LogFiles";
                hdConfig.OutputFolder = "output/LogFiles";
                return hdConfig;
            }
        }
    }
  2. LogCountJob,LogMapper,LogReducerクラスをクラスライブラリでアセンブリにします。LogMapReduce.dllのアセンブリを生成します。
  3. MapReduceする対象のファイルをHDFSへ登録します。登録のコマンドは下記の通り。
    hadoop fs -copyFromLocal "ログファイルまでのパス"  input/LogFiles/inputText.txt

    f:id:koogucc11:20130407173034j:plain

    上記の通り、HDFS上にinputText.txtが配置されたことが確認できます。

  4. クラスライブラリプロジェクトのmrlib配下でコマンドを実行します。コマンドは下記の通りです。
    mrrunner -dll LogMapReduce.dll

    f:id:koogucc11:20130407181119j:plain

    ※実行結果は上記の通りです。これで、Map処理およびReduce処理が完了しました。

Hadoop MapReduce Statusで確認すると、処理が完了したことが確認できます。

f:id:koogucc11:20130407181425j:plain

面白いですね。Hadoop。(あ、SQL Serverとの連携調べてないですね。)