@fumito_itoのHadoopブログ

Windows向けのHadoopディストリビューションについて書いていきます。現在のところはApache Hadoop on Azure CTPがメイン。リリースされ次第、Apache Hadoop for Windows Serverについても書く予定。

Hadoop on AzureのInteractive ConsoleでMap Reduceしてみる(JavaScript編)

前回から引き続いてInteractive Consoleを使って遊んでみます。

今回はInteractive ConsoleからJavaScriptを使ったMap Reduceを実行してみます。

 

Interactive Consoleでは

  • Pig
  • Hive

などをJavaScriptのコマンドとして実行することができます。

特に、Pig(とrunJS)はJavaScriptでMapReduceを記述して実行させることができます。イメージ的にはJavaScriptのHadoop Streamingといったところでしょうか。

 

今回は再びWordCountをサンプルにしてJavaScriptでのMapReduceについて記述します。前回の記事と同様に、davinti.txtの配置などは事前に完了しているものとします。

 

何はともあれJavaScriptでWordCountのMapReduceを書いてみましょう。記述する際にはmapとreduceの各変数をjsファイル内で定義してあげればOKです。

WordCount.js

var map = function (key, value, context) {

  var words = value.split(/[^a-zA-Z]/);

  words.forEach(function(word){

    if (word != ""){

      context.write(word.toLowerCase, 1);

    }

  });

};

 

var reduce = function(key, values, context) {

  var sum = 0;

  while (values.hasNext()) {

    sum += parseInt(values.next());

  }

  context.write(key, sum);

};

map, reduce(と、たぶんmainも)は予約語的に使われているようです。

このスクリプトを記述したファイルをユーザーディレクトリ直下にアップロードしたら準備は完了です。

今回はpigから実行してみましょう。

Interactive Console

pig.from("/example/data/davinci.txt").mapReduce("WordCount.js", "word, count:long").orderBy("count DESC").take(10).to("DaVinciTop10Words");

pigのオプションについて詳しく知りたい場合はInteractive Consoleでhelp("pig")とコマンドしてください。

 

コマンドが正常に実行されると前回と同じようにプログレスバーが表示されます。また、処理が正常に完了した場合は下記のようなメッセージが表示されます。

org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Success!)

メッセージは表示されましたか?成功していればユーザーディレクトリの直下にDaVinciTop10Wordsというディレクトリが生成されています。やりましたね!