Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

MATLAB の map 関数と reduce 関数の Hadoop ジョブへの組み込みの例

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

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

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

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

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

場所:/usr/local/MATLAB/R2022a/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/v912 を使用しています。

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

    メモ

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

  4. map 関数 maxArrivalDelayMapper.m/usr/local/MATLAB/R2022a/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 コマンドに -m フラグを指定して、デプロイ可能なアーカイブを作成します。-m フラグは、コマンド ラインから実行できるスタンドアロン実行可能ファイルを作成します。ただし、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/v912/toolbox/mlhadoop/jar/a2.2.0/mwmapreduce.jar \ com.mathworks.hadoop.MWMapReduceDriver \ -D mw.mcrroot=/usr/local/MATLAB/MATLAB_Runtime/v912 \ 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/v912 \ -D mw.mcrroot=/usr/local/MATLAB/MATLAB_Runtime/v912 \ 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 関数の例は toolbox/matlab/demos フォルダーで使用可能です。他の例を使用して、Hadoop 上で実行する同様のデプロイ可能なアーカイブのプロトタイプを作成することができます。詳細は、MapReduce での効果的なアルゴリズムの構築を参照してください。

参考

| | | |

関連するトピック