Hadoop ジョブに MATLAB map 関数および reduce 関数を含める
サポートされるプラットフォーム: Linux® のみ。
この例では、mcc
コマンドを使用して MATLAB® の map 関数および reduce 関数で構成されたデプロイ可能なアーカイブを作成し、そのデプロイ可能なアーカイブをペイロード引数として、Hadoop® クラスターに送信されるジョブに渡す方法を説明します。
目的: 航空路線の最大到着遅延時間を特定のデータセットから計算します。
データセット: | airlinesmall.csv |
説明: | 航空路線の 1987 年から 2008 年までの出発および到着情報。 |
場所: | /usr/local/MATLAB/R2023b/toolbox/matlab/demos |
メモ
Hadoop コンパイラ アプリのワークフローと比べた場合、このワークフローでは、Hadoop 設定ファイルを明示的に作成する必要があります。詳細については、例に従ってください。
前提条件
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/R2023b
を使用しています。MATLAB Runtime を所有していない場合は、Web サイト
https://www.mathworks.com/products/compiler/mcr
からダウンロードできます。メモ
MATLAB リリースに対応する MATLAB Runtime のバージョン番号の詳細については、このリストを参照してください。
map 関数
maxArrivalDelayMapper.m
を/usr/local/MATLAB/R2023b/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
の設定方法を確認してください。ファイル
airlinesmall.csv
のdatastore
を作成し、.mat
ファイルに保存します。このdatastore
オブジェクトは、HDFS 上の実際のデータセットの構造を取得するためのものです。ds = datastore('airlinesmall.csv','TreatAsMissing','NA',... 'SelectedVariableNames','ArrDelay','ReadSize',1000); save('infoAboutDataset.mat','ds')
ほとんどの場合、クラスター上の実際のデータセットを表す、ローカル マシンにある小さなサンプル データセットで作業を開始します。このサンプル データセットは、クラスター上の実際のデータセットと同じ構造および変数を持ちます。ローカル マシンにあるデータセットに対し
datastore
オブジェクトを作成することで、その構造のスナップショットを取得します。このdatastore
オブジェクトへアクセスすることで、クラスターで実行されている Hadoop ジョブでは、HDFS にある実際のデータセットへアクセスし、処理を実行する方法を認識します。メモ
この例では、サンプル データセット (ローカル) と HDFS 上の実際のデータセットは同じものです。
構成ファイル (
config.txt
) を作成して、データの入力タイプ、前の手順で作成したdatastore
によって指定されるデータの型、データの出力タイプ、map 関数の名前、および reduce 関数の名前を指定します。詳細については、mcc コマンドを使用してデプロイ可能なアーカイブを作成するための構成ファイルを参照してください。mw.ds.in.type = tabulartext mw.ds.in.format = infoAboutDataset.mat mw.ds.out.type = keyvalue mw.mapper = maxArrivalDelayMapper mw.reducer = maxArrivalDelayReducer
mcc
コマンドに-H
フラグおよび-W
フラグを指定して、デプロイ可能なアーカイブを作成します。ただし、mcc
コマンドはその結果をインストーラー内にパッケージ化できません。コマンドは 1 行で入力しなければなりません。mcc -H -W 'hadoop:maxArrivalDelay,CONFIG:config.txt' maxArrivalDelayMapper.m maxArrivalDelayReducer.m -a infoAboutDataset.mat
詳細については、
mcc
を参照してください。MATLAB Compiler™ はシェル スクリプト
run_maxarrivaldelay.sh
、デプロイ可能なアーカイブairlinesmall.ctf
、およびログ ファイルmccExcludedfiles.log
を作成します。MATLAB map 関数および reduce 関数を含んだデプロイ可能なアーカイブを、Linux シェルで次のコマンドを使用して Hadoop mapreduce ジョブに組み込みます。
$ hadoop \ jar /usr/local/MATLAB/MATLAB_Runtime/R2023b/toolbox/mlhadoop/jar/a2.2.0/mwmapreduce.jar \ com.mathworks.hadoop.MWMapReduceDriver \ -D mw.mcrroot=/usr/local/MATLAB/MATLAB_Runtime/R2023b \ maxArrivalDelay.ctf \ hdfs://host:54310/user/
<username>
/datasets/airlinesmall.csv \ hdfs://host:54310/user/<username>
/resultsあるいは、MATLAB の map 関数および reduce 関数を含んだデプロイ可能なアーカイブを、Hadoop コンパイラ アプリによって生成されたシェル スクリプトを使用して Hadoop mapreduce ジョブに組み込むこともできます。Linux シェルで次のコマンドを入力します。
$ ./run_maxArrivalDelay.sh \ /usr/local/MATLAB/MATLAB_Runtime/R2023b \ -D mw.mcrroot=/usr/local/MATLAB/MATLAB_Runtime/R2023b \ hdfs://host:54310/user/username/datasets/airlinesmall.csv \ hdfs://host:54310/user/
<username>
/results
結果を調べるには、MATLAB デスクトップに切り替え、HDFS 上の結果に対し
datastore
を作成します。これで、read
メソッドを使用して結果を表示できるようになります。d = datastore('hdfs:///user/<username>/results/part*'); read(d)
ans = Key Value _________________ ______ 'MaxArrivalDelay' [1014]
map
関数と reduce
関数の使用の詳細については、MapReduce 入門を参照してください。
参考
datastore
| TabularTextDatastore
| KeyValueDatastore
| mcc
| deploytool