Main Content

並列プール上での mapreduce の実行

並列プールの起動

Parallel Computing Toolbox™ をインストール済みの場合、mapreduce を実行すると、既定のプロファイルで指定したクラスター上の並列プールを開き、実行環境として使用することができます。

並列基本設定を設定し、プールが自動的に開かないようにすることができます。この場合、mapreduce がプールを使用して作業を並列化するようにするには、明示的にプールを起動しなければなりません。並列基本設定の詳細については、並列基本設定の指定を参照してください。

たとえば、次の概念コードは 12 個のワーカーをもつプールを起動します。その後、mapreducer を使用して実行環境をそのプールに設定します。これにより MapReducer オブジェクト mr が作成されます。最後に、変換されたデータストア tdsmr を使用して mapreduce を実行します。

p = parpool('Processes',12);
mr = mapreducer(p);
outds = mapreduce(tds,@MeanDistMapFun,@MeanDistReduceFun,mr)

メモ

mapreduce は並列プールをサポートする任意のクラスター上で実行できます。このトピックの例ではローカル クラスターを使用していますが、これはすべての Parallel Computing Toolbox のインストールで機能します。

並列 mapreduce の比較

次の例では、航空路線のデータのデータ ストアから平均の到着遅延時間を計算しています。まず、mapreduce を MATLAB クライアント セッションで実行し、続いてローカル クラスターで並列に実行します。関数 mapreducer が明示的に実行環境をコントロールします。

ローカル クラスターで並列プールを起動することから始めます。

p = parpool('Processes',4);
Starting parallel pool (parpool) using the 'Processes' profile ... 
connected to 4 workers.

mapreduce に対して異なる実行環境を指定するために、2 つの MapReducer オブジェクトを作成します。

inMatlab = mapreducer(0);
inPool = mapreducer(p);

データ ストアを作成し、プレビューします。この例で使用しているデータセットは matlabroot/toolbox/matlab/demos にあります。

ds = datastore('airlinesmall.csv','TreatAsMissing','NA',...
     'SelectedVariableNames','ArrDelay','ReadSize',1000);
preview(ds)
    ArrDelay
    ________

     8      
     8      
    21      
    13      
     4      
    59      
     3      
    11      

次に、MATLAB® クライアント セッションで mapreduce 計算を実行します。map 関数および reduce 関数は matlabroot/toolbox/matlab/demos にあります。

meanDelay = mapreduce(ds,@meanArrivalDelayMapper,...
@meanArrivalDelayReducer,inMatlab);
********************************
*      MAPREDUCE PROGRESS      *
********************************
Map   0% Reduce   0%
Map  10% Reduce   0%
Map  20% Reduce   0%
Map  30% Reduce   0%
Map  40% Reduce   0%
Map  50% Reduce   0%
Map  60% Reduce   0%
Map  70% Reduce   0%
Map  80% Reduce   0%
Map  90% Reduce   0%
Map 100% Reduce 100%
readall(meanDelay)
           Key             Value  
    __________________    ________

    'MeanArrivalDelay'    [7.1201]

続いて、現在の並列プールで計算を実行します。出力テキストは並列 mapreduce を示していることに注意してください。

meanDelay = mapreduce(ds,@meanArrivalDelayMapper,...
@meanArrivalDelayReducer,inPool);
Parallel mapreduce execution on the parallel pool:
********************************
*      MAPREDUCE PROGRESS      *
********************************
Map   0% Reduce   0%
Map 100% Reduce  50%
Map 100% Reduce 100%
readall(meanDelay)
           Key             Value  
    __________________    ________

    'MeanArrivalDelay'    [7.1201]

この比較的小さなデータセットでは、並列プールによるパフォーマンス向上の可能性はあまりありません。この例は、並列プール上で mapreduce を実行するメカニズムを説明するためのものです。データセットの規模が拡大する、または map 関数および reduce 関数自体の計算量が増えるに伴って、関数 mapreduce を MATLAB クライアント セッションで実行する場合に比べて、並列プールによるパフォーマンス向上の可能性が期待できます。

メモ

並列 mapreduce をクラスター上で実行する場合、mapreduce を MATLAB で実行するときと比べると、出力におけるキーと値のペアの順序が異なります。アプリケーションが出力のデータ配置に依存する場合には、必要に応じてデータを並べ替えなければなりません。

参考

関数

関連する例

詳細