Main Content

Hadoop ジョブに MATLAB map 関数および reduce 関数を含める

サポートされるプラットフォーム: Linux® のみ。

この例では、mcc コマンドを使用して MATLAB® の map 関数および reduce 関数で構成されたデプロイ可能なアーカイブを作成し、そのデプロイ可能なアーカイブをペイロード引数として、Hadoop® クラスターに送信されるジョブに渡す方法を説明します。

目的: 航空路線の最大到着遅延時間を特定のデータセットから計算します。

データセット:airlinesmall.csv
説明:

航空路線の 1987 年から 2008 年までの出発および到着情報。

場所:/usr/local/MATLAB/R2023b/toolbox/matlab/demos

メモ

Hadoop コンパイラ アプリのワークフローと比べた場合、このワークフローでは、Hadoop 設定ファイルを明示的に作成する必要があります。詳細については、例に従ってください。

前提条件

  1. MATLAB 検索パスで認識される新しい作業フォルダーを作成して、この例を開始します。

  2. 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')

  3. Hadoop クラスターのすべてのワーカー ノードからアクセスできるフォルダーに、MATLAB Runtime をインストールします。この例では、MATLAB Runtime フォルダーの場所として /usr/local/MATLAB/MATLAB_Runtime/R2023b を使用しています。

    MATLAB Runtime を所有していない場合は、Web サイト https://www.mathworks.com/products/compiler/mcr からダウンロードできます。

    メモ

    MATLAB リリースに対応する MATLAB Runtime のバージョン番号の詳細については、このリストを参照してください。

  4. map 関数 maxArrivalDelayMapper.m/usr/local/MATLAB/R2023b/toolbox/matlab/demos フォルダーから作業フォルダーにコピーします。

     maxArrivalDelayMapper.m

    詳細については、map 関数の作成を参照してください。

  5. reduce 関数 maxArrivalDelayReducer.mmatlabroot/toolbox/matlab/demos フォルダーから作業フォルダーにコピーします。

     maxArrivalDelayReducer.m

    詳細については、reduce 関数の作成を参照してください。

  6. HDFS™ でディレクトリ /user/<username>/datasets を作成し、ファイル airlinesmall.csv をそのディレクトリにコピーします。ここで、<username> は HDFS でのユーザー名を表します。

    $ ./hadoop fs -copyFromLocal airlinesmall.csv hdfs://host:54310/user/<username>/datasets

手順

  1. MATLAB を起動し、環境変数 HADOOP_PREFIX が設定されていることを確認します。コマンド プロンプトで、次を入力します。

    >> getenv('HADOOP_PREFIX')

    ans が空の場合は、前出の「前提条件」の節を見直し、環境変数 HADOOP_PREFIX の設定方法を確認してください。

  2. ファイル airlinesmall.csvdatastore を作成し、.mat ファイルに保存します。この datastore オブジェクトは、HDFS 上の実際のデータセットの構造を取得するためのものです。

    ds = datastore('airlinesmall.csv','TreatAsMissing','NA',...
         'SelectedVariableNames','ArrDelay','ReadSize',1000);
    
    save('infoAboutDataset.mat','ds')

    ほとんどの場合、クラスター上の実際のデータセットを表す、ローカル マシンにある小さなサンプル データセットで作業を開始します。このサンプル データセットは、クラスター上の実際のデータセットと同じ構造および変数を持ちます。ローカル マシンにあるデータセットに対し datastore オブジェクトを作成することで、その構造のスナップショットを取得します。この datastore オブジェクトへアクセスすることで、クラスターで実行されている Hadoop ジョブでは、HDFS にある実際のデータセットへアクセスし、処理を実行する方法を認識します。

    メモ

    この例では、サンプル データセット (ローカル) と HDFS 上の実際のデータセットは同じものです。

  3. 構成ファイル (config.txt) を作成して、データの入力タイプ、前の手順で作成した datastore によって指定されるデータの型、データの出力タイプ、map 関数の名前、および reduce 関数の名前を指定します。

    mw.ds.in.type = tabulartext
    mw.ds.in.format = infoAboutDataset.mat
    mw.ds.out.type = keyvalue
    mw.mapper = maxArrivalDelayMapper
    mw.reducer = maxArrivalDelayReducer
    詳細については、mcc コマンドを使用してデプロイ可能なアーカイブを作成するための構成ファイルを参照してください。

  4. 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 を作成します。

    1. 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
    2. あるいは、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
  5. 結果を調べるには、MATLAB デスクトップに切り替え、HDFS 上の結果に対し datastore を作成します。これで、read メソッドを使用して結果を表示できるようになります。

    d = datastore('hdfs:///user/<username>/results/part*');
    read(d)
    ans = 
    
               Key           Value 
        _________________    ______
    
        'MaxArrivalDelay'    [1014]

map 関数と reduce 関数の使用の詳細については、MapReduce 入門を参照してください。

参考

| | | |

関連するトピック