2.1 MapReduce基础概念
如果没有使用过集群或信息传递接口(Message Passing Interface,MPI),那么理解MapReduce基础概念将不会是一件容易的事。更多的实际应用是数据不存放在一个硬盘中而是存放于分布式文件系统中(Distributed File System,DFS),或存放于由Hadoop技术实现的分布式软件中。
MapReduce同时也是一个编程模型,它以一种分布式方法进行工作。其中包括信息传递接口(MPI)和同步并行计算模型(Bulk Synchronous Parallel,BSP)等概念。为了使R语言或其他机器学习工具上运行一个大数据分析程序,我们需要一台高配置的机器。但是这也不是一个很好的解决方案,所以分布式处理的方式就成了处理大数据问题的绝佳途径。这种分布式计算技术可以使用MapReduce编程模式来实现。
MapReduce是解决大数据问题的一个答案,理论上可以以并行方式处理数据,这意味着它具有极强的运算能力。我们既可以通过增大计算机集群的方式也可以通过提高每台计算机硬件配置的方式来提高运算能力。使用计算机集群是处理大数据的理想方式。
在了解并行运算MapReduce前,先讨论一下Google对MapReduce的探索以及由Jeffrey Dean和Sanjay Ghemawat 于2004年编写的白皮书。他们介绍的MapReduce简单而言就是在一个集群上运行数据处理软件。这种数据处理平台可以使程序人员更容易地执行各种操作。系统负责数据输入,并在计算机网络中对其作分布式处理以及并行运算,最后把输出数据合并在一个单文件中,便于后续再次分割处理。当使用这种方式来处理一个大数据集时,无论在成本还是在运行时间上都是很有益的。同时它也实现了对计算机硬件资源的高效应用。Google公司已经在MapReduce上申请了专利。
使用MapReduce时,程序员只需要把原有程序移植到Map和Reduce这两个阶段进行处理。其中Map阶段使用一个键值对数据作为输入并产生中间键值对数据。然后Reduce阶段合并所有的Map产生的中间键值对数据。Map和Reduce两个阶段共同组成了MapReduce工作流。当Map阶段输出数据后,Reduce阶段开始执行代码。
MapReduce的执行顺序如下图所示。
MapReduce假设执行Map函数时,各执行单元是独立且并行的。实现MapReduce算法的关键是既然执行Map和Reduce函数的各执行单元是独立的,那么如何使它们在网络环境下协助完成整个程序呢?答案是各执行单元以不同的键值和序列数据做并行运算。
一个分布式文件系统通过不同的机器可以复制扩展出多套数据,这也为系统提供了很强的容错性机制并提高了系统可靠性。如果一台机器上的数据有损失,则系统会使用该数据在其他机器上的替代数据资源。
MapReduce中主节点机器上的守护进程将会负责管理所有作业。例如执行作业、调配Mapper、Reducer、Combiner、Partitioner等,以及监控各独立作业内任务的成功或失败状态,最后完成批处理作业。
Apache的Hadoop使用MapReduce的作业在服务器上以并行方式分割处理数据,并存储数据于Hadoop的分布式文件系统内。
使用MapReduce技术的公司包括:
Amazon:这是一个线上的电子商务公司,并使用云服务实现大数据分析业务。
eBay:该公司是一个电子商务公司,并作为用户通过描述进而找到商品的入口。
Google:这是一个互联网搜索引擎公司,用户根据不同的关键词找到相关的网页。
LinkedIn:这是一个专业提供大数据存储和个性化推荐的互联网网站。
Trovit:这是一个用于找工作的垂直类搜索网站。
Twitter:这是一个发布和分享信息的社交网站。
除此之外,还有很多企业使用Hadoop技术作大数据分析。