当运算需求超出了当前资源的运算能力,可以考虑购买更好的机器。另一个情况是,运算需求超出了合理价位下所能购买到的机器的运算能力。其中一个解决办法是将计算转成并行的作业,MapReduce就提供了这种方案的一个具体实施框架。在MapReduce中,作业被分成map阶段和reduce阶段。
一个典型的作业流程是先使用map阶段并行处理数据,之后将这些数据在reduce阶段合并。这种多对一的模式很典型,但不是唯一的流程方式。mapper和reducer之间传输数据的形式是key/value对。一般地,map阶段后数据还会按照key值进行排序。Hadoop是一个流行的可运行MapReduce作业的Java项目,它同时也提供非Java作业的运行支持,叫做Hadoop流。
Amazon网络服务(AWS)允许用户按时长租借计算资源。弹性MapReduce(EMR)是Amazon网络服务上的一个常用工具,可以帮助用户在AWS上运行Hadoop流作业。简单的单步MapReduce任务可以在EMR管理控制台上实现并运行。更复杂的任务则需要额外的工具。其中一个相对新的开源工具是mrjob,使用该工具可以顺序地执行大量的MapReduce作业。经过很少的配置,mrjob就可以自动完成AWS上的各种繁杂步骤。
很多机器学习算法都可以很容易地写成MapReduce作业。而另一些机器学习算法需要经过创新性的修改,才能在MapReduce上运行。SVM是一个强大的文本分类工具,在大量文档上训练一个分类器需要耗费巨大的计算资源,而Pegasos算法可以分布式地训练SVM分类器。像Pegasos算法一样,需要多次MapReduce作业的机器学习算法可以很方便地使用mrjob来实现。
到这里为止,本书的正文部分就结束了,感谢你的阅读。希望这本书能为你开启新的大门。另外,在机器学习的数学和具体实现方面还有很多东西值得探索。我很期待你能使用在本书里学到的工具和技术开发出一些有趣的应用。