大数据分析:R基础及应用
上QQ阅读APP看书,第一时间看更新

2.3 分布式数据分析框架

对于海量数据处理,一般可以分成离线数据处理和流式数据处理两大类。在海量数据的计算中,Hadoop无疑是开源分布式离线处理技术的一大主力,而Storm则提供了分布式流处理框架,让实时大数据处理得以实现。

2.3.1 Hadoop

Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop的核心框架为HDFS(Hadoop Distributed File System)、MapReduce和HBase,最底部是HDFS,HDFS的上一层是MapReduce引擎,如图2.2所示。其中HDFS实现对分布式存储的底层支持,用于存储Hadoop集群中所有存储节点上的文件,HBase则为大量非结构化数据存储和索引提供了条件,MapReduce则实现对分布式并行任务处理的程序支持,能够让用户编写的Hadoop并行应用程序运行更加简化。

图2.2 Hadoop生态系统图

Hadoop作为开源的云计算平台已经在互联网领域得到了广泛的应用,互联网公司往往需要存储海量的数据并对其进行处理,而这正是Hadoop的强项。如Facebook使用Hadoop存储内部的日志拷贝以及数据挖掘和日志统计;Yahoo利用Hadoop支持广告系统并处理网页搜索;Twitter则使用Hadoop存储微博数据、日志文件和其他中间数据等。在国内,Hadoop同样也得到了许多公司的青睐,如百度主要将Hadoop应用于日志分析和网页数据库的数据挖掘;阿里巴巴则将Hadoop用于商业数据的排序和搜索引擎的优化等。随着互联网的发展,新的业务模式还将不断涌现,Hadoop的应用也会从互联网领域向电信、电子商务、银行、生物制药等领域拓展。

众所周知,现代社会的信息量增长速度极快,这些信息里又积累着大量的数据,其中包括个人数据和工业数据。预计到2020年,每年产生的数字信息将会有超过1/3的内容驻留在云平台中或借助云平台来处理。我们需要对这些数据进行分析和处理,以获取更多有价值的信息。那么如何高效地存储和管理这些数据?如何分析这些数据呢?这时可以选用Hadoop系统,它在处理这类问题时采用了分布式存储方式,提高了读写速度,并扩大了存储容量。采用MapReduce来整合分布式文件系统上的数据,可保证分析和处理数据的高效。与此同时,Hadoop还采用存储冗余数据的方式保证了数据的安全性。

2.3.2 HDFS

HDFS(Hadoop Distributed File System)是Hadoop的一个分布式文件系统,由于其具有高容错性(Fault-Tolerant)的特点,因而可以设计部署在低廉(Low-Cost)的硬件上,并能以高吞吐率(High Throughput)来访问应用程序的数据,适合那些有着超大数据集的访问。

一个HDFS文件系统由一个主控节点(NameNode)和一组从节点(DataNode)构成,主控节点为一个管理整个文件系统的主服务器,包括文件系统命名空间及元数据的管理、对文件访问请求的处理。从节点是对数据块进行实际的存储和管理。主控节点向从节点分配数据块,建立数据块和从节点的对应关系;从节点处理系统用户对数据的读写请求以及主控节点对数据块的创建、删除副本的指令。一个集群设置唯一的NameNode,这样在很大程度上简化了系统的架构。

HDFS以分布式的存储方式存储大数据,可扩展性较好,容错能力、数据吞吐能力及并发访问能力都相当强大,为上层大数据的处理应用程序提供了强大的数据存储和访问功能支撑。而且HDFS放宽了可移植操作系统接口(Portable Operating System Interface,POSIX)的要求,实现了以流的形式访问文件系统中的数据。HDFS原本是开源的Apache项目Nutch的基础结构,最后它成为了Hadoop的基础架构之一。

2.3.3 HBase

HBase位于结构化存储层,是一个分布式的NoSQL数据库,它建立在HDFS之上,为大规模的结构化、半结构化及非结构化的数据提供了实时读写及随机访问功能。对于海量数据的存储,HBase对硬件的要求不高,普通的服务器集群就能做到。HBase对数据进行查询增改等操作的性能比较高,一般情况下都与数据量的大小无关,即使表中的数据记录非常大,对某条记录的查询也可以快速地完成。HBase对数据模型的定义非常灵活,它采用的是列式存储而不是基于行的模式,表为一个分布式多维表,包括行关键字(Row Key)、列族(Column Family)、列名(Column Name)和时间戳(Timestamp)。字段数据对应的键值对为:

{row key,column family,column name,timestamp}→value

根据row key、column key和time stamp对数据进行查询,时间戳使得同一份数据有多个版本。一般情况下,查询数据的条件是基于列名的。与传统行存储方式的数据库不同的是,HBase不需要扫描所有行的数据,这在很大程度上提高了数据访问性能。此外,HBase还具有对数据读写严格一致性(即保证读到的是最新的数据)、高效的随机读写能力、较好的可扩展性等优点。

2.3.4 Hive

Hive是一个基于Hadoop的数据仓库,它提供了一种类似SQL查询语言的编程接口,可以运用HiveQL语言对数据进行查询分析等操作,避免了复杂的MapReduce程序的设计编写,在很大程度上降低了对数据进行查询分析时应用程序的开发。Hive是基于HDFS、HBase和MapReduce工作的,Hadoop大数据平台从Hive接收数据处理指令,通过HDFS、HBase,并配合MapReduce完成操作。Hive不仅能够使用分区(Partition)及桶(Bucket)对数据进行存储以提高数据查询的性能,而且在写入数据时不检查数据的类型,从而达到高速加载数据的目的,这种模式能够满足大规模数据的需求。Hive能结合ETL工具导入导出数据,在传统数据库和Hadoop平台之间充当桥梁的作用,使两者之间的联系更为紧密。

2.3.5 MapReduce

MapReduce是由Google提出的,是一种面向大数据并行处理的计算模型,对计算数据和计算任务能够自动完成并行化处理。MapReduce提供了简单方便的并行程序设计方法,用函数Map和函数Reduce编程实现并行计算,编程人员在不了解分布式并行编程的情况下也能方便地将自己的程序运行在分布式系统上,使得大数据的编程和计算变得更加简便。MapReduce采用的是“分而治之”的思想,将大规模数据处理任务划分成若干个子任务进行处理,再将结果进行合并得到计算结果,从而完成大数据的并行化处理。MapReduce定义了Map和Reduce两个编程接口:

map:(k1;v1)→[(k2;v2)]
reduce:(k2;[v2])→[(k3;v3)]

其中参数都是键值对形式的数据。Map和Reduce处理的过程如下:数据以键值对的形式(k1;v1)传入map函数,经map函数处理后生成中间键值对[(k2;v2)],然后对这些中间键值对进行处理,得到键值对(k2;[v2]),其中[v2]代表相同键k2的不同值v2的集合,将其传入reduce函数,经reduce函数处理后最终以键值对[(k3;v3)]的形式输出。Map和Reduce两个阶段都是并行处理的。

2.3.6 Strom

Twitter Storm是一个免费、开源的分布式实时计算系统,它可以简单、高效、可靠地处理大量的流数据。在Twitter中进行实时计算的系统就是Storm,它在数据流上进行持续计算,并且对这种流式数据处理提供了有力保障。

Storm运行于集群之上,与Hadoop集群类似。但在Hadoop上运行的是MapReduce Jobs,而在Storm上运行的是Topologies。两者大不相同,一个关键区别是MapReduce的Job最终会结束,而Topology永远处理消息(或直到kill它)。Storm将数据以Stream的方式,并按照Topology的顺序依次处理并最终生成结果。

Storm对一些概念进行了抽象化,其主要术语和概念包括Streams、Spouts、Bolts、Topology和Stream Groupings。Topology生态系统图如图2.3所示,数据从源头Spout中进入,依照拓扑顺序,使用相应的Bolt依次处理,得到最终数据。这种由各个用户自定义的处理器(Bolt)组合而成的拓扑结构能够适应大多数的业务需求。因此,只要业务能够组合成相应的拓扑逻辑,就能够借助Storm框架,也就无需考虑实时计算的低延迟、高性能、分布式、可扩展、容错等问题了。

图2.3 Topology生态系统图

流Stream是一个不间断的无界的连续Tuple(元组,是元素有序列表),这些无界的元组会以分布式的方式并行地创建和处理。每个流Stream都有一个源Spouts,Spouts会从外部读取流数据并发出Tuple。流的中间状态抽象为Bolts,Bolts可以处理tuples,同时它也可以发送新的流给其他Bolts使用。Bolts作为消息处理者,处理输入的数据流并产生输出的新数据流。Bolts中可执行过滤、聚合、查询数据库等操作。

为了提高效率,在Spout源可以接上多个Bolts处理器。Storm将这样的无向环图抽象为Topology,Topology是Storm中最高层次的抽象概念。当Spout或者Bolt发送元组到流时,它就发送元组到每个订阅了该流的Bolt上进行处理。

对比Hadoop的批处理,Storm是一个实时的、分布式及具备高容错的计算系统。同Hadoop一样,Storm也可以处理大批量的数据。然而Storm在保证高可靠性的前提下还可以让处理进行的更加实时,通常被比作“实时的Hadoop”。也就是说,所有的信息都会被处理。Storm同样还具备容错和分布计算这些特性,这就让Storm可以扩展到不同的机器上进行大批量的数据处理。

Storm流处理技术作为大数据处理技术之一,其应用场景也有很多,总的来说,一方面可应用于处理金融服务如股票交易、银行交易等产生的大量实时数据;另一方面主要应用于各种实时Web服务中,如搜索引擎、购物网站的实时广告推荐,SNS社交类网站的实时个性化内容推荐,大型网站、网店的实时用户访问情况分析等。实时的数据计算和分析对于大型网站来说具有重要的实际意义,不仅可用于网站的实时业务监控,也可以实现用户实时个性化内容推荐等。

随着企业数据量的迅速增长,存储和处理大规模数据已成为企业的迫切需求。在大数据的计算中,开源分布式离线处理技术hadoop与提供了分布式流处理框架的storm在各大领域都得到了广泛的应用。