並列プール上での mapreduce の実行
並列プールの起動
Parallel Computing Toolbox™ をインストール済みの場合、mapreduce を実行すると、既定のプロファイルで指定したクラスター上の並列プールを開き、実行環境として使用することができます。
並列設定を設定し、プールが自動的に開かないようにすることができます。この場合、mapreduce がプールを使用して作業を並列化するようにするには、明示的にプールを起動しなければなりません。並列設定の詳細については、並列設定の指定を参照してください。
たとえば、次の概念コードは 12 個のワーカーをもつプールを起動します。その後、mapreducer を使用して実行環境をそのプールに設定します。これにより MapReducer オブジェクト mr が作成されます。最後に、変換されたデータストア tds で mr を使用して 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 で実行するときと比べると、出力におけるキーと値のペアの順序が異なります。アプリケーションが出力のデータ配置に依存する場合には、必要に応じてデータを並べ替えなければなりません。