1.3 企业级大数据技术实现方案
真正意义上的大数据技术源于互联网行业,尤其是大数据技术引领者谷歌公司,由于其数据量大,解决的问题都是前沿的,对大数据技术的发展起到了重要的作用。本节将首先解析谷歌公司的大数据架构,之后介绍开源大数据实现方案。
1.3.1 Google大数据技术栈
Google在大数据方面的技术,均是以发表论文的形式对外公开的,尽管其没有对外开源系统实现代码,但这些论文直接带动了大数据技术的发展,尤其为大数据开源技术的发展指明了方向。Google公开发表的大数据系统方面的论文目前绝大部分都存在对应的开源系统实现。总结近10年Google发表的论文,涉及的大数据系统如图1-5所示,主要分布在数据存储层、资源管理与服务协调层、计算引擎层、数据分析层这四层中。
图1-5 Google大数据技术栈
1.数据存储层
❑ GFS[GGL03]:Google文件系统(Google File System)是一个分布式文件系统,具有良好的容错性、扩展性和可用性,尤其是容错性表现突出,这使得GFS可构建在大量普通廉价机器上,进而容易进行“Scale out”(横向扩展),相比于传统的“Scale up”(向上扩展)方案中采用的大型机或小型机等,大大降低了成本。
❑ BigTable[CDG+06]:构建在GFS之上的分布式数据库本质上是一个稀疏的、分布式的、持久化存储的多维度排序映射表。BigTable支持插入和更新等操作,且行数和列数可以无限扩展,这在很大程度上弥补了传统关系型数据库在schema上的不灵活。
❑ MegaStore[BBC+11]:MegaStore是构建在BigTable之上,支持ACID特性的分布式数据库。它是一个具有高扩展性并可进行高密度交互的可用存储服务,其在Google的基础系统之中,起初主要解决App Engine的数据存储问题。MegaStore能够在广域网中同步复制文件写操作,在可接受的延时下,支持跨数据中心的故障迁移。
❑ Spanner[CDE+13]:Spanner是一个可扩展的、多版本、全球分布式、支持同步复制的数据库。它是第一个把数据分布在全球范围内的系统,并且支持外部一致性的分布式事务。Google官方认为,Spanner是下一代BigTable,也是MegaStore的继任者。
2.资源管理与服务协调层
❑ Borg[VPK+15]:一个集群资源管理和调度系统,它负责集群的资源管理和统一调度,并对应用程序进行接收、启动、停止、重启和监控。Borg的目的是让开发者能够不必操心资源管理的问题,让他们专注于应用程序开发相关的工作,并且做到跨多个数据中心的资源利用率最大化。
❑ Omega[SKA+13]:Google下一代集群资源管理和调度系统,采用了共享状态的架构,这使得应用程序调度器拥有整个集群的权限,可以自由获取资源,同时采用了基于多版本的并发访问控制方式(又称乐观锁,全称为MⅤCC,即Multi-Ⅴersion Concurrency Control),解决潜在的资源冲突访问问题。
❑ Chubby[Bur06]:该系统旨在为松散耦合的分布式系统提供粗粒度的锁以及可靠存储(低容量的),它提供了一个非常类似于分布式文件系统的接口,能够很容易的实现leader选举、分布式锁、服务命名等分布式问题,它设计的侧重点在可用性及可靠性而不是高性能。
3.计算引擎层
❑ MapReduce[DG08]:MapReduce是一个批处理计算框架,它采用“分而治之”的思想,将对大规模数据集的操作,分解成Map和Reduce两个阶段,Map阶段并行处理输入数据集,产生中间结果,Reduce阶段则通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是“任务的分解与结果的汇总”。MapReduce具有高吞吐率、良好的容错性、扩展性以及易于编程等特点,被广泛应用于构建索引、数据挖掘、机器学习等应用中。
❑ Dremel[MGL+10]:Dremel是一个分布式OLAP(OnLine Analytical Processing)系统,通过引入列式存储、树状架构等技术,能够帮助数据分析师在秒级处理PB级数据。Dremel在一定程度上弥补了类MapReduce系统在交互式查询方面的不足。
❑ Pregel[MAB+10]:Pregel是一个分布式图计算框架,专门用来解决网页链接分析、社交数据挖掘等实际应用中涉及的大规模分布式图计算问题,Pregel采用了BSP(Bulk Synchronous Parallel Computing Model)模型,即“计算→通信→同步”模型,通过消息传递的方式,实现高效的迭代计算。
❑ Precolator[PD10]:Percolator是一个基于BigTable构建的大数据集增量更新系统。其目标是在海量的数据集上提供增量更新的能力,并通过支持分布式事务来确保增量处理过程的数据一致性和整体系统的可扩展性。Percolator最初是为了解决网页库增量更新而提出了的,用以弥补MapReduce无法逐个处理小规模更新的缺陷。
❑ MillWheel[ABB+13]:MillWheel是一个分布式流式实时处理框架,它允许用户自定义一些处理单元,并按照一定的拓扑结构连接在一起形成一个有向图,从而形成一个流式处理数据线。MillWheel具有低延迟、自动处理乱序、数据严格一次投递(exactly-once delivery)等优点,在Google被广泛应用于构建低延迟数据处理应用。
4.数据分析层
❑ FlumeJava[CRP+10]:FlumeJava是一个建立在MapReduce之上的Java编程库,提供了一层高级原语以简化复杂的MapReduce应用程序开发,非常适合构建复杂的数据流水线。FlumeJava内置优化器,会自动优化应用程序的执行计划,并基于底层的原语来执行优化后的操作。
❑ Tenzing[CLL+11]:建立在MapReduce之上的SQL查询执行引擎,它可以将用户编写的SQL语句转化为MapReduce程序,并提交到集群中分布式并行执行。
1.3.2 Hadoop与Spark开源大数据技术栈
随着大数据开源技术的快速发展,目前开源社区已经积累了比较完整的大数据技术栈,应用最广泛的是以Hadoop与Spark为核心的生态系统,具体如图1-6所示,整个大数据技术栈涉及数据收集、数据存储、资源管理与服务协调、计算引擎和数据分析这五个层级。
图1-6 Hadoop与Spark大数据技术栈
1.数据收集层:
❑ 主要由关系型与非关系型数据收集组件,分布式消息队列构成。
❑ Sqoop/Canal:关系型数据收集和导入工具,是连接关系型数据库(比如MySQL)和Hadoop(比如HDFS)的桥梁,Sqoop可将关系型数据库中的数据全量导入Hadoop,反之亦可,而Canal则可用于实现数据的增量导入。
❑ Flume:非关系型数据收集工具,主要是流式日志数据,可近实时收集,经过滤,聚集后加载到HDFS等存储系统。
❑ Kafka:分布式消息队列,一般作为数据总线使用,它允许多个数据消费者订阅并获取感兴趣的数据。相比于其他消息队列,它采用分布式高容错设计,更适合大数据应用场景。
2.数据存储层
❑ 主要由分布式文件系统(面向文件的存储)和分布式数据库(面向行/列的存储)构成。
❑ HDFS:Hadoop分布式文件系统,Google GFS的开源实现,具有良好的扩展性与容错性等优点,尤其是出色的容错机制设计,使得它非常适合构建在廉价机器上,这大大降低了大数据存储成本。目前开源社区已经开发了各种类型的数据存储格式,包括SSTable(Sorted String Table),文本文件、二进制key/value格式Sequence File、列式存储格式Parquet、ORC和Carbondata等。
❑ HBase:构建在HDFS之上的分布式数据库,Google BigTable的开源实现,允许用户存储结构化与半结构化的数据,支持行列无限扩展以及数据随机查找与删除。
❑ Kudu:分布式列式存储数据库,允许用户存储结构化数据,支持行无限扩展以及数据随机查找与更新。
3.资源管理与服务协调
❑ YARN:统一资源管理与调度系统,它能够管理集群中的各种资源(比如CPU和内存等),并按照一定的策略分配给上层的各类应用。YARN内置了多种多租户资源调度器,允许用户按照队列的方式组织和管理资源,且每个队列的调度机制可独立定制。
❑ ZooKeeper:基于简化的Paxos协议实现的服务协调系统,它提供了类似于文件系统的数据模型,允许用户通过简单的API实现leader选举、服务命名、分布式队列与分布式锁等复杂的分布式通用模块。
4.计算引擎层
❑ 包含批处理,交互式处理和流式实时处理三种引擎。
❑ MapReduce/Tez:MapReduce是一个经典的批处理计算引擎,它是Google MapReduce的开源实现,具有良好的扩展性与容错性,允许用户通过简单的API编写分布式程序;Tez是基于MapReduce开发的通用DAG(Directed Acyclic Graph的简称,有向无环图)计算引擎,能够更加高效地实现复杂的数据处理逻辑,目前被应用在Hive、Pig等数据分析系统中。
❑ Spark:通用的DAG计算引擎,它提供了基于RDD(Resilient Distributed Dataset)的数据抽象表示,允许用户充分利用内存进行快速的数据挖掘和分析。
❑ Impala/Presto:分别由Cloudera和Facebook开源的MPP(MassivelyParallel Processing)系统,允许用户使用标准SQL处理存储在Hadoop中的数据。它们采用了并行数据库架构,内置了查询优化器,查询下推,代码生成等优化机制,使得大数据处理效率大大提高。
❑ Storm/Spark Streaming:分布式流式实时计算引擎,具有良好的容错性与扩展性,能够高效地处理流式数据,它允许用户通过简单的API完成实时应用程序的开发工作。
5.数据分析层
❑ 为方便用户解决大数据问题而提供的各种数据分析工具。
❑ Hive/Pig/SparkSQL:在计算引擎之上构建的支持SQL或脚本语言的分析系统,大大降低了用户进行大数据分析的门槛。其中,Hive是基于MapReduce/Tez实现的SQL引擎,Pig是基于MapReduce/Tez实现的工作流引擎,SparkSQL是基于Spark实现的SQL引擎。
❑ Mahout/MLlib:在计算引擎之上构建的机器学习库实现了常用的机器学习和数据挖掘算法。其中,Mahout最初是基于MapReduce实现的,目前正逐步迁移到Spark引擎上,MLlib是基于Spark实现的。
❑ Apache Beam/Cascading:基于各类计算框架而封装的高级API,方便用户构建复杂的数据流水线。Apache Beam统一了批处理和流式处理两类计算框架,提供了更高级的API方便用户编写与具体计算引擎无关的逻辑代码;Cascading内置了查询计划优化器,能够自动优化用户实现的数据流。采用了面向tuple的数据模型,如果你的数据可表示成类似于数据库行的格式,则使用Cascading处理将变得很容易。