上QQ阅读APP看书,第一时间看更新
二、大数据存储管理框架
Hadoop是一个开源的完整的分布式计算平台,用于应对PB级甚至ZB级海量数据的存储。Hadoop以开源的方式提供了PaaS服务所需要的大部分分布式技术,具有高可靠性、高扩展性、高效性、高容错性等优点。Hadoop带有用Java语言编写的框架,其应用程序也可以使用C++等语言编写。因此用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。
Hadoop架构由Hadoop Common、Avro、Chukwa、HBase、HDFS、Hive、MapReduce、Pig、ZooKeeper等几个子项目构成。其中Hive是基于MapRuduce的SQL引擎,Pig是类似于Hive的大规模数据分析平台。Hadoop Common、MapReduce、HBase、HDFS和ZooKeeper是最核心的部分,负责分布式数据存储、分布式计算模型和并发访问控制,共同组成完整的分布式系统。如图1-3-3所示。
图1-3-3 Hadoop基础架构
Hadoop Common是Hadoop的内核,包括支持其他Hadoop子项目的公共工具,如文件系统、RFC远程过程调用、虚拟化库等。HDFS是Hadoop提供一个可扩展、结构化、具备日志的分布式文件系统,用于存储海量非结构化数据。HDFS采用主/从结构,由一个名字节点(NameNode)和数据节点(Data Node)组成,可同时被多个客户端访问。NameNode 是HDFS的主控服务器,负责管理文件系统的所有元数据,包括文件块的位置信息、名字空间等。Data Node部署在物理机器上,负责数据的存储和管理。其具体结构如图1-3-4所示。
HBase是Hadoop的分布式数据库,参考Google BigTable实现的基于列的分布式数据库,构建在HDFS之上,供超大规模数据集进行实时随机读/写的应用程序使用。ZooKeeper是Hadoop的一个子项目,是对Google分布式同步系统Chubby的开源实现,实质上是一个小型的分布式文件系统,维护一个层次化的树结构,树节点叫做znode,提供包括配置维护、名字服务、分布式同步、组服务等在内的功能,有效解决了大型分布式应用程序开发过程中的组件失败问题,可以用于确定操作是否完成。其实现原理很简单,即确保znode的每次修改都被复制在集群的大部分机器上,当部分机器出现故障时可以快速恢复ZooKeeper服务。MapReduce是Hadoop的编程模型,是一个独立的子项目,用于对大规模数据特别是非结构化数据的并行化处理,隐藏了并行化、容错、数据分布、负载均衡等复杂分布式处理细节,降低了并行计算程序的开发门槛。
图1-3-4 HDFS结构
MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行。开发者按照MapReduce框架提供的API接口,指定输入/输出文件路径,定义输入文件格式,编写Map和Reduce函数后,即可运行MapReduce流程。MapReduce编程模型的原理是利用一个输入的key/value对集合来产生一个输出的key/value对集合。MapReduce库的用户用Map和Reduce函数来表达这个计算。用户自定义的map函数接收一个输入的key/value对,然后产生一个中间key/value对的集合。MapReduce把所有具有相同key值的value集合在一起传递给reduce函数。用户自定义的reduce函数接收key和相关的value集合。reduce函数合并这些value值,形成一个较小的value集合。一般每次reduce函数调用只产生0或1个输出的value值,通过一个迭代器把中间的value值提供给reduce函数,这样即可处理无法全部放入内存中的大量value值集合。MapReduce的执行流程如图1-3-5所示,是将大数据集分解为成百上千个小数据集的过程。每个或若干个数据集分别由集群中的一个节点(一般是一台普通的计算机)进行处理并生成中间结果,然后由大量的节点合并形成最终结果。MapReduce框架下并行程序中有map、reduce、main 3个主要函数。在这个结构中需要用户完成的工作仅仅是根据任务编写map和reduce两个函数。
大数据处理要求实时性、快速性、经济性,聚类分析、关联规则分析、时间序列分析、序列分析等传统的数据挖掘方法已不适用于大数据分析。因此传统的数据挖掘算法要结合并行计算技术来实现大数据分析的并行化。本书以基于最大最小距离原理的K-Means聚类算法的并行化为例。
图1-3-5 MapReduce执行流程
MMKMEANS首先利用统计学中的数据抽样技术从大量数据中选择样本,针对样本选择初始聚类中心,然后进行K-Means聚类。MMKMEANS的优点是针对大规模数据处理可以快速收敛、聚类。图1-3-6展示了MMKMEANS的并行化整体构思框架,主要分为两个阶段,三个MapReduce过程。其实质是重写类,完成map和reduce。具体过程是重写Mapper类的maxMinMpper函数实现map过程完成数据抽样,重写Reduce类的maxMinReduce函数实现reduce过程产生若干个待选聚类中心,重写Mapper类的mergeMapper针对上一过程输出的不同类型键值进行处理实现map,重写combiner类的K-Means-Combiner以归并本地节点具有相同key值的中间数据,重写Reduce类的Reducer实现聚类汇总,使邻近类汇总为同一类。
图1-3-6 MMKMEANS的MapReduce实现