「2.4 外部プログラムの並列実行」で述べたように、Hadoopで並列処理を行うには、Hadoop固有の機能やAPIを理解し、Mapタスク、Reduceタスクで動作するMapReduceアプリケーション(Javaプログラム)を作成する必要があります。
本機能では、Hadoop固有の機能やAPIを使用しない外部プログラム(任意のプログラミング言語を使用して作成したプログラムやスクリプトなど)を、Mapタスク、Reduceタスクとして実行することができます。通常、外部プログラムをHadoopで利用するには、Hadoopに標準で搭載されているHadoop Streaming機能を利用しますが、その場合と比較して本機能には以下のような特徴があります。
Hadoopジョブに複数種類(形式)のファイルを入力し、ファイル形式に応じた外部プログラムで処理した後、複数の種類(形式)で出力することができます。
Hadoop Streamingでは、外部プログラムに対して入出力は一つずつとなっています。そのため、業務処理で多用される、複数のデータを入力し結合(JOIN)するような処理を作成するには、高いスキルを要します。
CSV形式など、項目が任意の文字で区切られたデータを容易に扱うことができます。
MapReduceによる並列処理では、複数のMapタスクから複数のReduceタスクに受け渡すデータを識別するため、処理したいデータにキーを付加したKey-ValueデータをMapタスクから出力する必要があります。Hadoop Streamingをデフォルトの設定で使用した場合、Key-Valueデータの形式がKey→Valueの順に物理的に配置されている必要がある、KeyとValueの区切り文字がタブ文字であるなど、所望のプログラムロジックや出力データ形式を生成するのが困難な場合があります。
参考
MapReduce処理やアプリケーション、Hadoop Streamingの詳細は、以下を参照してください。
http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html
http://hadoop.apache.org/docs/r1.2.1/streaming.html
MapタスクやReduceタスク、MapReduce処理の流れについては、「17.5.1 Hadoopジョブとタスク」もあわせて参照してください。