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