主要内容

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

MATLAB Map 和 Reduce 函数纳入 Hadoop 作业

支持的平台:仅限 Linux®

此示例向您说明如何使用 mcc 命令创建由 MATLAB® map 和 Reduce 函数组成的可部署存档,然后将可部署存档作为有效负载参量传递给提交给 Hadoop® 集群的作业。

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

数据集:airlinesmall.csv
描述:

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

位置:

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

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

注意

此工作流需要明确创建一个 Hadoop 设置文件。请参照示例了解详细信息。

前提条件

  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. 为文件 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 上的实际数据集相同。

  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 命令无法将结果打包在安装程序中。该命令必须以单行形式输入。

    mcc -H -W 'hadoop:maxArrivalDelay,CONFIG:config.txt'
      maxArrivalDelayMapper.m maxArrivalDelayReducer.m
       -a infoAboutDataset.mat

    有关详细信息,请参阅 mcc

    MATLAB Compiler™ 创建一个 shell 脚本 run_maxarrivaldelay.sh、一个可部署存档 airlinesmall.ctf 和一个日志文件 mccExcludedfiles.log

    使用以下命令,将包含 MATLAB 地图和减少函数的可部署存档从 Linux shell 整合到 Hadoop MapReduce 作业中:

    hadoop \
    jar /usr/local/MATLAB/MATLAB_Runtime/R2025a/toolbox/mlhadoop/jar/a2.2.0/mwmapreduce.jar \
    com.mathworks.hadoop.MWMapReduceDriver \
    -D mw.mcrroot=/usr/local/MATLAB/MATLAB_Runtime/R2025a \
    maxArrivalDelay.ctf \
    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]

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

另请参阅

| | |