本节书摘来自华章计算机《Mahout算法解析与案例实战》一书中的第1章,第1.1节,作者:樊 哲,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.1 Mahout应用背景
随着互联网的发展,企业拥有的数据也越来越多,比如Facebook公司,从公司成立之初的100万用户数到2010年的1.34亿用户数,再到2014年的13.1亿用户数,其用户增长速度达到了令人惊叹的地步,单单用户数目的增长已经达到了如此地步,更不用说每个用户所产生的数据量了。很明显,面对如此庞大的数据量,企业再用以前的数据处理方式显然已经不能满足要求了。
正所谓,变则通,通则久。企业若想长久发展,面对日益增长的数据,在以前传统的数据处理方式显得力不从心的时候,就需要“变”。所谓“变”,其实就是对现有方式的创新。在此情况下,“云计算”便应运而生。所谓“云计算”是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备,这样可以最大限度、最大效率地利用计算机资源,达到快捷、高速地处理数据的目的。
但是,单单有云计算平台还不够,还需要有适合云平台的算法。云计算的核心就是计算,要研究可以在云平台上实现的算法,这样才能发挥云计算的最大威力。以前的数据挖掘算法是在单机上实现的,单机实现的算法其编程思路和模式与云平台下的编程思路和模式很不一样,如果还是按照以前的思路,那么肯定是行不通的。
目前开源的云平台有多种,本书所述的云平台是Hadoop云平台。Hadoop云平台是一个用于处理大数据的分布式应用的开源框架,提供分布式存储和高效计算能力。Hadoop具有以下优势:
同时提供分布式存储和计算能力。
具有极高的可扩展性。
其主要的组件之一HDFS具有很高的数据吞吐量。
具有软件和硬件容错性。
允许大数据的并行工作。
在Hadoop云平台下编程不仅要求用户对Hadoop云平台框架比较熟悉,还要对Hadoop云平台下底层数据流、Map和Reduce原理非常熟悉,这是基本的编程要求。此外,用户要编写某一个算法还需要对该算法的原理比较熟悉,即需要对算法原理理解透彻。总体来看,编写云平台下的算法程序是属于高难度的开发工作了。但是,如果使用Mahout,情况就会有很大的不同,用户再也不用自己编写复杂的算法,不需要掌握太高深的云平台的框架和数据流程的理论知识。用户所需要了解的只是算法的大概原理、算法实际应用环境和如何调用Mahout相关算法的程序接口。当然,在具体的项目中,用户还应该根据实际需求在Mahout源代码基础上进行二次开发以满足具体的实际应用情况。
Mahout是Apache基金会的开源项目之一。Apache Mahout起源于2008年,当时它是Apache Lucene的子项目。在使用Hadoop云平台的基础上,可以将其功能有效地扩展到Hadoop云平台中,提高其运算效率。2010年4月,Apache Mahout最终成为了Apache的顶级项目。创建此项目的用意是建立一个可扩容的云平台算法库。目前,Mahout已经实现了多种经典数据挖掘算法,算是比较完备的算法库了。Mahout目前还在扩充中,由世界上对这个项目感兴趣的云平台算法编程高手们一起进行开发、测试,然后进行算法扩充,任何对这个项目感兴趣的个人或者组织都可以加入到该项目的社区中,为该项目做出贡献。