Main Content

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

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;

注意

指定的 outputFolder 一定不能已存在。来自 Hadoop 集群的 mapreduce 输出无法覆盖现有文件夹。

如果 mapreducer 被更改或删除,您将丢失数据。

创建一个 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 并调用 mapreducemr 指定的 Hadoop 集群上执行。matlabroot/toolbox/matlab/demos 中提供了 map 和 Reduce 函数。

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 的详细信息,请参阅 处理远程数据

另请参阅

函数

相关示例

详细信息