スタンドアロンの MATLAB MapReduce アプリケーションの実行
サポートされるプラットフォーム: Linux® のみ。
この例では、mcc コマンドを使用してスタンドアロン MATLAB® MapReduce アプリケーションを作成し、Hadoop® クラスターで実行する方法を説明します。
目的: 航空路線の最大到着遅延時間を特定のデータセットから計算します。
| データセット: | airlinesmall.csv |
| 説明: | 航空路線の 1987 年から 2008 年までの出発および到着情報。 |
| 場所: |
setupExample("matlab/AddKeysValuesExample", pwd)airlinesmall.csv ファイルと一緒に自動的にダウンロードされる AddKeysValuesExample.mlx ライブ スクリプト ファイルは無視してください。 |
前提条件
MATLAB 検索パスで認識される新しい作業フォルダーを作成して、この例を開始します。
MATLAB を起動する前に、ターミナルで、環境変数
HADOOP_PREFIXが Hadoop インストール フォルダーをポイントするように設定します。以下に例を示します。シェル コマンド csh / tcsh % setenv HADOOP_PREFIX /usr/lib/hadoop
bash $ export HADOOP_PREFIX=/usr/lib/hadoop
メモ
この例は、
/usr/lib/hadoopを Hadoop がインストールされたディレクトリとして使用しています。使用している Hadoop インストール ディレクトリが異なる場合があります。環境変数
HADOOP_PREFIXを設定せずに MATLAB を起動した場合は、MATLAB の起動後すぐに、MATLAB コマンド プロンプトで MATLAB 関数setenvを使用して、これを設定します。以下に例を示します。setenv('HADOOP_PREFIX','/usr/lib/hadoop')
Hadoop クラスターのすべてのワーカー ノードからアクセスできるフォルダーに、MATLAB Runtime をインストールします。この例では、MATLAB Runtime フォルダーの場所として
/usr/local/MATLAB/MATLAB_Runtime/R2025bを使用しています。MATLAB Runtime を所有していない場合は、Web サイト
https://www.mathworks.com/products/compiler/mcrからダウンロードできます。メモ
MATLAB リリースに対応する MATLAB Runtime のバージョン番号の詳細については、このリストを参照してください。
map 関数
maxArrivalDelayMapper.mを/usr/local/MATLAB/R2025b/toolbox/matlab/demosフォルダーから作業フォルダーにコピーします。詳細については、map 関数の作成を参照してください。
reduce 関数
maxArrivalDelayReducer.mをフォルダーから作業フォルダーにコピーします。matlabroot/toolbox/matlab/demos詳細については、reduce 関数の作成を参照してください。
HDFS™ でディレクトリ
/user/を作成し、ファイル<username>/datasetsairlinesmall.csvをそのディレクトリにコピーします。ここで、は HDFS でのユーザー名を表します。<username>$ ./hadoop fs -copyFromLocal airlinesmall.csv hdfs://host:54310/user/<username>/datasets
手順
MATLAB を起動し、環境変数
HADOOP_PREFIXが設定されていることを確認します。コマンド プロンプトで、次を入力します。>> getenv('HADOOP_PREFIX')ansが空の場合は、前出の「前提条件」の節を見直し、環境変数HADOOP_PREFIXの設定方法を確認してください。depMapRedStandAlone.mという名前で新しい MATLAB スクリプトを作成します。以下に示す手順にリストされたコードを、このスクリプト ファイルに追加します。Hadoop 分散ファイル システム (HDFS) の航空会社データをポイントする
datastoreを作成します。ds = datastore('hdfs:///user/username/datasets/airlinesmall.csv',... 'TreatAsMissing','NA',... 'SelectedVariableNames',{'UniqueCarrier','ArrDelay'});
詳細については、リモート データの操作を参照してください。
既定の設定で、Hadoop に対してデプロイするようにアプリケーションを設定します。
config = matlab.mapreduce.DeployHadoopMapReducer;
matlab.mapreduce.DeployHadoopMapReducerクラスは、そのデプロイ先となる Hadoop 環境に基づいてスタンドアロン アプリケーションを設定するために使用できます。たとえば、クラスター上の各ワーカー ノードにおいて MATLAB Runtime の場所を指定する場合は、次のようなコード行を含めます。
このシナリオでは、MATLAB Runtime がワーカー ノード上のconfig = matlab.mapreduce.DeployHadoopMapReducer('MCRRoot','/opt/MATLAB/MATLAB_Runtime/R2025b');/opt/MATLAB/MATLAB_Runtimeなど、既定以外の場所にインストールされていると想定しています。追加のクラスター固有のプロパティを指定する方法の詳細については、
matlab.mapreduce.DeployHadoopMapReducerを参照してください。メモ
MATLAB Runtime の場所を
matlab.mapreduce.DeployHadoopMapReducerクラスの一部として指定すると、スタンドアロン アプリケーションの実行中に指定されたすべての MATLAB Runtime の場所がオーバーライドされます。mapreducerを使用して実行環境を定義します。mr = mapreducer(config);
関数
mapreduceを適用します。result = mapreduce(... ds,... @maxArrivalDelayMapper,@maxArrivalDelayReducer,... mr,... 'OutputType','Binary', ... 'OutputFolder','hdfs:///user/<username>/results/myresults');
メモ
.../myresultsなどの HDFS ディレクトリは 1 回だけ書き込みできます。Hadoop クラスターに対してスタンドアロン アプリケーションを複数回実行する予定の場合は、各実行の前に、必ず HDFS の.../myresultsディレクトリを削除してください。別の方法として、MATLAB コードで.../myresultsディレクトリの名前を変更し、アプリケーションを再コンパイルすることもできます。結果のデータ ストアから結果を読み取ります。
myAppResult = readall(result)
mccコマンドに-mフラグを指定して、スタンドアロン アプリケーションを作成します。mcc -m depMapRedStandAlone.m
-mフラグは、コマンド ラインから実行できるスタンドアロン実行可能ファイルを作成します。ただし、mccコマンドはその結果をインストーラー内にパッケージ化できません。次のコマンドを使用して、Linux シェルからスタンドアロン アプリケーションを実行します。
$ ./run_depMapRedStandAlone.sh /usr/local/MATLAB/MATLAB_Runtime/R2025b/usr/local/MATLAB/MATLAB_Runtime/R2025bは MATLAB Runtime の場所を示す引数です。前出のコマンドを実行する前に、次を入力して、ターミナルに環境変数
HADOOP_PREFIXが設定されていることを確認します。$ echo $HADOOP_PREFIX
echoが空である場合は、前出の「前提条件」の節を参照し、環境変数HADOOP_PREFIXの設定方法を確認してください。環境変数
HADOOP_PREFIXが設定されていない場合、アプリケーションの実行は失敗します。次の出力が表示されます。
myAppResult = Key Value _________________ ______ 'MaxArrivalDelay' [1014]
map 関数と reduce 関数の使用の詳細については、MapReduce 入門を参照してください。
スタンドアロン アプリケーション depMapRedStandAlone の完成したコードは、以下のとおりです。
参考
datastore | TabularTextDatastore | KeyValueDatastore | matlab.mapreduce.DeployHadoopMapReducer | mcc
