大数据是使用工具与技术,来处理大量和复杂数据集合的专用术语,能够处理大量数据的技术称为MapReduce。
何时使用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的整个过程看起来有点像这样,请看下列之图表: