运行独立 MATLAB MapReduce 应用程序
支持的平台:仅限 Linux®。
此示例向您说明如何使用 mcc 命令创建独立的 MATLAB® MapReduce 应用程序并在 Hadoop® 集群上运行它。
目标:根据给定的数据集计算航空公司的最大到达延误时间。
| 数据集: | airlinesmall.csv |
| 描述: | 1987 年至 2008 年航空公司出发和到达信息。 |
| 位置: | 要下载 setupExample("matlab/AddKeysValuesExample", pwd)airlinesmall.csv 文件一同自动下载的 AddKeysValuesExample.mlx 实时脚本文件。 |
前提条件
通过创建一个 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环境变量。创建一个名为
depMapRedStandAlone.m的新 MATLAB 脚本。您将把下面列出的步骤中列出的代码添加到此脚本文件中。创建指向 Hadoop 分布式文件系统 (HDFS) 中的航空公司数据的
datastore。ds = datastore('hdfs:///user/username/datasets/airlinesmall.csv',... 'TreatAsMissing','NA',... 'SelectedVariableNames',{'UniqueCarrier','ArrDelay'});
有关详细信息,请参阅处理远程数据。
使用默认设置配置应用程序以针对 Hadoop 进行部署。
config = matlab.mapreduce.DeployHadoopMapReducer;
matlab.mapreduce.DeployHadoopMapReducer类可用于根据要部署的 Hadoop 环境配置独立应用程序。例如,如果您想指定集群上每个工作进程节点上 MATLAB Runtime 的位置,请包含类似于以下的代码行:
在这种情况下,我们假设 MATLAB Runtime 安装在非默认位置,例如工作进程节点上的config = matlab.mapreduce.DeployHadoopMapReducer('MCRRoot','/opt/MATLAB/MATLAB_Runtime/R2025a');/opt/MATLAB/MATLAB_Runtime。有关指定其他集群特定属性的信息,请参阅
matlab.mapreduce.DeployHadoopMapReducer。注意
将 MATLAB Runtime 位置指定为
matlab.mapreduce.DeployHadoopMapReducer类的一部分将覆盖在独立应用程序执行期间指定的任何 MATLAB Runtime 位置。使用
mapreducer定义执行环境。mr = mapreducer(config);
应用
mapreduce函数。result = mapreduce(... ds,... @maxArrivalDelayMapper,@maxArrivalDelayReducer,... mr,... 'OutputType','Binary', ... 'OutputFolder','hdfs:///user/<username>/results/myresults');
注意
HDFS 目录(例如
.../myresults只能写入一次。如果您计划针对 Hadoop 集群多次运行独立应用程序,请确保在每次执行之前删除 HDFS 上的.../myresults目录。另一种选项是更改 MATLAB 代码中.../myresults目录的名称并重新编译该应用程序。从结果数据存储中读取结果。
myAppResult = readall(result)
使用带有
mcc标志的-m命令来创建独立应用程序。mcc -m depMapRedStandAlone.m
-m标志创建一个可以从命令行运行的标准可执行文件。但是,mcc命令无法将结果打包在安装程序中。使用以下命令从 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环境变量,您的应用程序将无法执行。您将会看到以下输出:
myAppResult = Key Value _________________ ______ 'MaxArrivalDelay' [1014]
要了解有关使用 map 和 reduce 函数的更多信息,请参阅MapReduce 快速入门。
独立应用程序 depMapRedStandAlone 的完整代码可以在这里找到:
另请参阅
datastore | TabularTextDatastore | KeyValueDatastore | matlab.mapreduce.DeployHadoopMapReducer | mcc
