在 Hadoop 集群上运行 mapreduce
集群准备
在 Hadoop® 集群上运行 mapreduce 之前,请确保集群和客户端计算机已正确配置。请咨询您的系统管理员,或参阅 配置 Hadoop 集群 (MATLAB Parallel Server)。
输出格式和顺序
在以二进制输出(默认设置)在 Hadoop 集群上运行 mapreduce 时,生成的 KeyValueDatastore 指向 Hadoop 序列文件,而不是其他环境中由 mapreduce 生成的二进制 MAT 文件。有关更多信息,请参阅 mapreduce 参考页面上的 'OutputType' 参量描述。
在 Hadoop 集群上运行 mapreduce 时,输出中的键值对的顺序与在其他环境中运行 mapreduce 不同。如果您的应用程序依赖于输出中的数据排列,则必须根据自己的要求对数据进行排序。
计算平均延迟
此示例显示如何修改用于计算平均航班延误的 MATLAB® 示例,以便在 Hadoop 集群上运行。
首先,您必须根据您的特定 Hadoop 配置设置适当的环境变量和集群属性。请咨询您的系统管理员以获取这些属性的值以及向集群提交作业所需的其他属性的值。
setenv('HADOOP_HOME', '/path/to/hadoop/install') cluster = parallel.cluster.Hadoop;
创建一个 MapReducer 对象来指定 mapreduce 应该使用您的 Hadoop 集群。
mr = mapreducer(cluster);
创建并预览数据存储。该数据集可在 中获得。matlabroot/toolbox/matlab/demos
ds = datastore('airlinesmall.csv','TreatAsMissing','NA',... 'SelectedVariableNames','ArrDelay','ReadSize',1000); preview(ds)
ArrDelay
________
8
8
21
13
4
59
3
11接下来,指定您的输出文件夹,输出 outds 并调用 mapreduce 在 mr 指定的 Hadoop 集群上执行。 中提供了 map 和 Reduce 函数。matlabroot/toolbox/matlab/demos
outputFolder = 'hdfs:///home/myuser/out1'; outds = mapreduce(ds,@myMapperFcn,@myReducerFcn,... 'OutputFolder',outputFolder); meanDelay = mapreduce(ds,@meanArrivalDelayMapper,... @meanArrivalDelayReducer,mr,... 'OutputFolder',outputFolder)
Parallel mapreduce execution on the Hadoop cluster:
********************************
* MAPREDUCE PROGRESS *
********************************
Map 0% Reduce 0%
Map 66% Reduce 0%
Map 100% Reduce 66%
Map 100% Reduce 100%
meanDelay =
KeyValueDatastore with properties:
Files: {
' .../tmp/myuser/tpc00621b1_4eef_4abc_8078_646aa916e7d9/part0.seq'
}
ReadSize: 1 key-value pairs
FileType: 'seq'
读取结果。
readall(meanDelay)
Key Value
__________________ ________
'MeanArrivalDelay' [7.1201]
虽然出于演示目的,此示例使用了本地数据集,但在使用 Hadoop 时,您的数据集很可能存储在 HDFS™ 文件系统中。同样,您可能需要将 mapreduce 输出存储在 HDFS 中。有关在 MATLAB 中访问 HDFS 的详细信息,请参阅 处理远程数据。