Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Spark クラスターでの tall 配列の使用

この例では、tall table を作成する MATLAB® の例を変更して、Spark™ クラスターまたは Spark 対応 Hadoop® クラスターで実行する方法を説明します。この tall table を使用して tall 配列を作成し、統計プロパティを計算できます。コードをローカルで作成してからスケール アップすることで、アルゴリズムを書き換えることなく Parallel Computing Toolbox™ および MATLAB Parallel Server™ が提供する機能を利用できます。tall 配列およびデータ ストアを使用するビッグ データのワークフローSpark クラスターの構成 (MATLAB Parallel Server)、およびHadoop クラスターの構成 (MATLAB Parallel Server)も参照してください。

Spark クラスターと Spark 対応 Hadoop クラスターの設定

まず、環境変数とクラスター プロパティを特定の Spark クラスター構成に応じて適切に設定しなければなりません。これらの値とクラスターにジョブを投入するために必要なその他のプロパティについては、システム管理者に問い合わせてください。

Spark クラスターでのクラスター プロパティの設定

Spark クラスターでクラスター プロパティを設定するには、MATLAB コマンド ウィンドウで次のコマンドを入力します。

cluster = parallel.cluster.Spark('SparkInstallFolder', '/path/to/spark/install');

% Optionally, if you want to control the exact number of workers:
cluster.SparkProperties('spark.executor.instances') = '16';

mapreducer(cluster);

Spark 対応 Hadoop クラスターでの環境変数とクラスター プロパティの設定

Spark 対応 Hadoop クラスターで環境変数とクラスター プロパティを設定するには、MATLAB コマンド ウィンドウで次のコマンドを入力します。

setenv('HADOOP_HOME', '/path/to/hadoop/install')
setenv('SPARK_HOME', '/path/to/spark/install');
cluster = parallel.cluster.Hadoop;

% Optionally, if you want to control the exact number of workers:
cluster.SparkProperties('spark.executor.instances') = '16';

mapreducer(cluster);

メモ

設定手順で、mapreducer を使用してクラスター実行環境を設定します。次の手順で、tall 配列を作成します。tall 配列の作成後にクラスター実行環境の変更または削除を行った場合、tall 配列は無効になり、再作成しなければなりません。

メモ

逐次で開発してローカル ワーカーを使用しない場合は、次のコマンドを入力します。

mapreducer(0);

tall テーブルの作成と使用

環境変数およびクラスター プロパティの設定後、ローカル マシンではなく Spark クラスター上で MATLAB の tall table の例を実行できます。

以下の手順は、Spark 対応 Hadoop クラスター上で tall table を作成して使用する方法を示していますが、この手順は任意の Spark クラスターに使用できます。

データストアを作成して tall table に変換します。MATLAB により、tall table に対して以降の計算を実行する Spark ジョブが自動的に開始されます。

ds = datastore('airlinesmall.csv');
varnames = {'ArrDelay', 'DepDelay'};
ds.SelectedVariableNames = varnames;
ds.TreatAsMissing = 'NA';

データ ストアから tall table tt を作成します。

tt = tall(ds)
Starting a Spark Job on the Hadoop cluster. This could take a few minutes ...done.

tt =

  M×2 tall table 

    ArrDelay    DepDelay
    ________    ________

     8          12      
     8           1      
    21          20      
    13          12      
     4          -1      
    59          63      
     3          -2      
    11          -1      
    :           :
    :           :

この表示は、行数 M が未知であることを示しています。M は計算が完了するまではプレースホルダーです。

tall table から到着遅延 ArrDelay を抽出します。このアクションで、以降の計算に使用する新たな tall 配列変数が作成されます。

a = tt.ArrDelay;

tall 配列に対して一連の操作を指定できます。この操作は、gather を呼び出すまで実行されません。こうすることで、長時間かかる可能性のある複数のコマンドをバッチ処理できます。例として、到着遅延の平均と標準偏差を計算します。これらの値を使用して、平均値から 1 標準偏差内にある遅延の上下のしきい値を作成します。

m = mean(a,'omitnan');
s = std(a,'omitnan');
one_sigma_bounds = [m-s m m+s];

gather を使用して one_sigma_bounds を計算し、その解をメモリに格納します。

sig1 = gather(one_sigma_bounds)
Evaluating tall expression using the Spark Cluster:
- Pass 1 of 1: Completed in 0.95 sec
Evaluation completed in 1.3 sec

sig1 =

  -23.4572    7.1201   37.6975

複数の事項を一度に評価する場合は、複数の入力と出力を gather に指定できます。これにより、それぞれの tall 配列で gather を個別に呼び出すよりも高速になります。例として、到着遅延の最小値と最大値を計算します。

[max_delay, min_delay] = gather(max(a),min(a))
max_delay =

        1014

min_delay =

   -64

メモ

クラスター ワーカー上で MATLAB を起動する場合、これらの例では、より長い時間が初回での完了にかかります。

Spark クラスター上で tall 配列を使用する場合、mapreducer 実行環境が存在している限り、クラスターの計算リソースは予約されています。これらのリソースをクリアするには、mapreducer を削除しなければなりません。

delete(gcmr);
あるいは、次のようにして、異なる実行環境に変更できます。
mapreducer(0);

参考

| | | | | |

関連する例

詳細