1.Hadoop
Hadoop是目前主流的分布式海量数据挖掘平台。Hadoop是一个开发和运行处理大规模数据的软件平台,是Apache的一个用Java语言实现的开源软件框架,可以实现在由大量计算机组成的集群中对海量数据进行分布式计算。Hadoop采用分布式文件系统HDFS来存储文件,利用MapReduce来处理分布式文件系统上的数据,可以保证高效分析和处理数据。
(1)Hadoop生态圈
Hadoop是所有相关子项目的集合,核心是HDFS和MapReduce,其他的子项目例如分布式数据库HBase、数据仓库Hive则提供补充性服务。Hadoop生态圈如图1-2所示。
HDFS:是一个主从(master/slave)结构,由一个NameNode和若干个DataNode构成,NameNode管理文件系统的元数据,DataNode存储实际数据。
MapReduce:处理海量数据的并行编程模型和计算框架,采用“分而治之”思想,包括分解任务的map函数和汇总结果的reduce函数,MapReduce任务由一个JobTracker和若干个TaskTracker控制完成,JobTracker负责调度和管理TaskTracker,TaskTracker负责执行任务。
Pig:SQL-like语言,是在MapReduce上构建的一种高级查询语言,以简化MapReduce任务的开发。
Hive:数据仓库工具,提供SQL查询功能。
HBase:基于列存储模型的分布式数据库。
ZooKeeper:针对分布式系统的协调服务。
(2)HDFS
HDFS是Hadoop的文件系统(Hadoop Distributed File System)。HDFS是运行在普通硬件上的分布式文件系统,以流式数据访问模式来存储超大文件,管理网络中跨多台计算机存储的文件。
HDFS的体系结构如图1-3所示。
(3)MapReduce
传统的关系型数据库索引方式一般采用B树或者B+树,在数据更新频率较低时,索引的效果比较好,但发生大规模的数据更新操作时,由于B树在索引重建的阶段需要耗费大量的时间,因此在此应用场景上,B树的效率明显不如MapReduce高。
MapReduce的目的在于将大文件切分成若干个部分,在每一个节点的Mapper类中并行处理,对数据进行逻辑处理并按照一定的规则转换成Key/Value形式进行数据重组,Mapper的结果作为Reduce类的输入,针对重新组合的数据,进行逻辑处理后输出。整个框架对数据的格式要求比较严格,在按照数据处理需求指定Key/Value时需要巧妙构思。
MapReduce的工作流程如图1-4所示。
MapReduce的工作步骤如下:
1)分割文件。将文件分成若干个独立的分片(split),作为map的输入。
2)map阶段。在map中用InputFormat类解析输入的任务分片,并生成Key/Value对,经过了map中的数据操作之后,由用户按照程序逻辑的需求来指定输出数据的Key和Value值。
3)combine阶段。由map阶段输出的Key/Value对暂时贮存在map任务所在节点的内存中,并不会立即写到输出,而是在本地将Key相同的Value值收集到一个list中,减少集群之间的I/O操作。
4)reduce阶段。reduce任务的输入来源是分布在多个节点上的map任务产生的输出,它将同一个Key值下的所有Value收集到同一个reduce,进行reduce阶段的数据处理,处理完成后由用户指定输出到文件的Key和Value值。
5)写入输出文件。每个执行的reduce任务的输出都会包含一个输出文件,格式由setOutputFormat方法指定。
由于Hadoop的突出优势,它已经广泛应用于多个行业,尤其是互联网领域:
Yahoo!通过集群运行Hadoop,以支持广告系统和Web搜索的研究。
Facebook借助集群运行Hadoop,以支持其数据分析和机器学习。
百度则使用Hadoop进行搜索日志的分析和网页数据的挖掘工作。
淘宝的Hadoop系统用于存储并处理电子商务交易的相关数据。
中国移动研究院基于Hadoop的“大云”(BigCloud)系统用于对数据进行分析和并对外提供服务。