主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

运行独立 MATLAB MapReduce 应用程序

支持的平台:仅限 Linux®

此示例向您说明如何使用 mcc 命令创建独立的 MATLAB® MapReduce 应用程序并在 Hadoop® 集群上运行它。

目标:根据给定的数据集计算航空公司的最大到达延误时间。

数据集:airlinesmall.csv
描述:

1987 年至 2008 年航空公司出发和到达信息。

位置:

要下载 airlinesmall.csv 文件,在 MATLAB 命令提示符下输入:

setupExample("matlab/AddKeysValuesExample", pwd)
请忽略与 airlinesmall.csv 文件一同自动下载的 AddKeysValuesExample.mlx 实时脚本文件。

前提条件

  1. 通过创建一个 MATLAB 搜索路径可见的新工作文件夹来开始此示例。

  2. 在启动 MATLAB 之前,在终端上设置环境变量 HADOOP_PREFIX 以指向 Hadoop 安装文件夹。例如:

    Shell命令
    csh / tcsh

    % setenv HADOOP_PREFIX /usr/lib/hadoop

    bash

    $ export HADOOP_PREFIX=/usr/lib/hadoop

    注意

    此示例使用 /usr/lib/hadoop 作为安装 Hadoop 目录。您的 Hadoop 安装目录可能不同。

    如果您忘记在启动 MATLAB 之前设置 HADOOP_PREFIX 环境变量,请在启动 MATLAB 后立即在 MATLAB 命令提示符下使用 MATLAB 函数 setenv 进行设置。例如:

    setenv('HADOOP_PREFIX','/usr/lib/hadoop')

  3. MATLAB Runtime 安装在 Hadoop 集群中每个工作进程节点均可访问的文件夹中。此示例使用 /usr/local/MATLAB/MATLAB_Runtime/R2025a 作为 MATLAB Runtime 文件夹的位置。

    如果您没有 MATLAB Runtime,您可以从以下网站下载:https: https://www.mathworks.com/products/compiler/mcr

    注意

    有关与 MATLAB 版本对应的 MATLAB Runtime 版本号的信息,请参阅此列表

  4. 将映射函数 maxArrivalDelayMapper.m/usr/local/MATLAB/R2025a/toolbox/matlab/demos 文件夹复制到工作文件夹。

     maxArrivalDelayMapper.m

    有关详细信息,请参阅编写 map 函数

  5. 将 Reduce 函数 maxArrivalDelayReducer.mmatlabroot/toolbox/matlab/demos 文件夹复制到工作文件夹。

     maxArrivalDelayReducer.m

    有关详细信息,请参阅Write a Reduce Function

  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. 创建一个名为 depMapRedStandAlone.m 的新 MATLAB 脚本。您将把下面列出的步骤中列出的代码添加到此脚本文件中。

  3. 创建指向 Hadoop 分布式文件系统 (HDFS) 中的航空公司数据的 datastore

    ds = datastore('hdfs:///user/username/datasets/airlinesmall.csv',...
    'TreatAsMissing','NA',...
    'SelectedVariableNames',{'UniqueCarrier','ArrDelay'});

    有关详细信息,请参阅处理远程数据

  4. 使用默认设置配置应用程序以针对 Hadoop 进行部署。

    config = matlab.mapreduce.DeployHadoopMapReducer;

    matlab.mapreduce.DeployHadoopMapReducer 类可用于根据要部署的 Hadoop 环境配置独立应用程序。

    例如,如果您想指定集群上每个工作进程节点上 MATLAB Runtime 的位置,请包含类似于以下的代码行:

    config = matlab.mapreduce.DeployHadoopMapReducer('MCRRoot','/opt/MATLAB/MATLAB_Runtime/R2025a');
    在这种情况下,我们假设 MATLAB Runtime 安装在非默认位置,例如工作进程节点上的 /opt/MATLAB/MATLAB_Runtime

    有关指定其他集群特定属性的信息,请参阅matlab.mapreduce.DeployHadoopMapReducer

    注意

    MATLAB Runtime 位置指定为 matlab.mapreduce.DeployHadoopMapReducer 类的一部分将覆盖在独立应用程序执行期间指定的任何 MATLAB Runtime 位置。

  5. 使用 mapreducer 定义执行环境。

    mr = mapreducer(config);
  6. 应用 mapreduce 函数。

    result = mapreduce(...
        ds,...
        @maxArrivalDelayMapper,@maxArrivalDelayReducer,...
        mr,...
        'OutputType','Binary', ...
        'OutputFolder','hdfs:///user/<username>/results/myresults');

    注意

    HDFS 目录(例如 .../myresults 只能写入一次。如果您计划针对 Hadoop 集群多次运行独立应用程序,请确保在每次执行之前删除 HDFS 上的 .../myresults 目录。另一种选项是更改 MATLAB 代码中 .../myresults 目录的名称并重新编译该应用程序。

  7. 从结果数据存储中读取结果。

    myAppResult = readall(result)
  8. 使用带有 mcc 标志的 -m 命令来创建独立应用程序。

    mcc -m depMapRedStandAlone.m

    -m 标志创建一个可以从命令行运行的标准可执行文件。但是,mcc 命令无法将结果打包在安装程序中。

  9. 使用以下命令从 Linux shell 运行独立应用程序:

    $ ./run_depMapRedStandAlone.sh /usr/local/MATLAB/MATLAB_Runtime/R2025a

    /usr/local/MATLAB/MATLAB_Runtime/R2025a 是一个指示 MATLAB Runtime 位置的参量。

    在执行上述命令之前,请通过输入以下内容验证终端中是否设置了 HADOOP_PREFIX 环境变量:

    $ echo $HADOOP_PREFIX
    如果 echo 结果为空,请参阅上面的前提条件部分,了解如何设置 HADOOP_PREFIX 环境变量。

    如果未设置 HADOOP_PREFIX 环境变量,您的应用程序将无法执行。

  10. 您将会看到以下输出:

    myAppResult = 
    
               Key           Value 
        _________________    ______
    
        'MaxArrivalDelay'    [1014]

要了解有关使用 mapreduce 函数的更多信息,请参阅MapReduce 快速入门

独立应用程序 depMapRedStandAlone 的完整代码可以在这里找到:

 depMapRedStandAlone.m

另请参阅

| | | |

主题