将 MATLAB Map 和 Reduce 函数纳入 Hadoop 作业
支持的平台:仅限 Linux®。
此示例向您说明如何使用 mcc 命令创建由 MATLAB® map 和 Reduce 函数组成的可部署存档,然后将可部署存档作为有效负载参量传递给提交给 Hadoop® 集群的作业。
目标:根据给定的数据集计算航空公司的最大到达延误时间。
| 数据集: | airlinesmall.csv |
| 描述: | 1987 年至 2008 年航空公司出发和到达信息。 |
| 位置: | 要下载 setupExample("matlab/AddKeysValuesExample", pwd)airlinesmall.csv 文件一同自动下载的 AddKeysValuesExample.mlx 实时脚本文件。 |
注意
此工作流需要明确创建一个 Hadoop 设置文件。请参照示例了解详细信息。
前提条件
通过创建一个 MATLAB 搜索路径可见的新工作文件夹来开始此示例。
在启动 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')
将 MATLAB Runtime 安装在 Hadoop 集群中每个工作进程节点均可访问的文件夹中。此示例使用
/usr/local/MATLAB/MATLAB_Runtime/R2025a作为 MATLAB Runtime 文件夹的位置。如果您没有 MATLAB Runtime,您可以从以下网站下载:https:
https://www.mathworks.com/products/compiler/mcr。注意
有关与 MATLAB 版本对应的 MATLAB Runtime 版本号的信息,请参阅此列表。
将映射函数
maxArrivalDelayMapper.m从/usr/local/MATLAB/R2025a/toolbox/matlab/demos文件夹复制到工作文件夹。有关详细信息,请参阅编写 map 函数。
将 Reduce 函数
maxArrivalDelayReducer.m从文件夹复制到工作文件夹。matlabroot/toolbox/matlab/demos有关详细信息,请参阅Write a Reduce Function。
在 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命令无法将结果打包在安装程序中。该命令必须以单行形式输入。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要检查结果,请切换到 MATLAB 桌面并在 HDFS 上为结果创建
datastore。然后您可以使用read方法查看结果。d = datastore('hdfs:///user/<username>/results/part*'); read(d)ans = Key Value _________________ ______ 'MaxArrivalDelay' [1014]
要了解有关使用 map 和 reduce 函数的更多信息,请参阅MapReduce 快速入门。
