何时使用 MapReduce
MapReduce 特别适合涉及大量数据的问题. 它通过将工作分成更小的块, 然后可以被多个系统处理. 由于 MapReduce 将一个问题分片并行工作, 与传统系统相比, 解决方案会更快.
大概有如下场景会应用到 MapReduce:
1 计数和统计
2 整理
3 过滤
4 排序
Apache Hadoop
在本文中, 我们将使用 Apache Hadoop.
开发 MapReduce 解决方案, 推荐使用 Hadoop, 它已经是事实上的标准, 同时也是开源免费的软件.
另外在 Amazon,Google 和 Microsoft 等云提供商租用或搭建 Hadoop 集群.
还有其他多个优点:
可扩展: 可以轻松清加新的处理节点, 而无需更改一行代码
成本效益: 不需要任何专门和奇特的硬件, 因为软件在正常的硬件都运行正常
灵活: 无模式. 可以处理任何数据结构 , 甚至可以组合多个数据源, 而不会有很多问题.
容错: 如果有节点出现问题, 其它节点可以接收它的工作, 整个集群继续处理.
另外, Hadoop 容器还是支持一种称为 "流" 的应用程序, 它为用户提供了选择用于开发映射器和还原器脚本语言的自由度.
本文中我们将使用 PHP 做为主开发语言.
Hadoop 安装
Apache Hadoop 的安装配置超出了本文范围. 您可以根据自己的平台, 在线轻松找到很多文章. 为了保持简单, 我们只讨论大数据相关的事.
映射器(Mapper)
映射器的任务是将输入转换成一系列的键值对. 比如在字计数器的情况下, 输入是一系列的行. 我们按单词将它们分开, 把它们变成键值对(如 key:Word,value:1), 看起来像这样:
- the 1
- water 1
- on 1
- on 1
- water 1
- on 1
- ... 1
然后, 这些对然后被发送到 reducer 以进行下一步骤.
reducer
reducer 的任务是检索 (排序) 对, 迭代并转换为所需输出. 在单词计数器的例子中, 取单词数 (值), 并将它们相加得到一个单词(键) 及其最终计数. 如下:
- water 2
- the 1
- on 3
mapping 和 reducing 的整个过程看起来有点像这样, 请看下列之图表:
使用 PHP 做单词计数器
我们将从 MapReduce 世界的 "Hello World" 的例子开始, 那就是一个简单的单词计数器的实现. 我们将需要一些数据来处理. 我们用已经公开的书 Moby Dick 来做实验.
执行以下命令下载这本书:
来源: https://www.cnblogs.com/xinlangboke/p/10887734.html