在数据存储层,还有很多类似的系统和某些系统的变种,这里,我仅仅列出较为出名的几个。如漏掉某些重要系统,还请谅解。
一、数据存储层
宽泛地讲,据对一致性(consistency)要求的强弱不同,分布式数据存储策略,可分为ACID和BASE两大阵营。
ACID是指数据库事务具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。ACID中的一致性要求比较强,事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
BASE对一致性要求较弱,它的三个特征分别是:基本可用(Basically Available), 软状态/柔性事务(Soft-state,即状态可以有一段时间的不同步), 最终一致性(Eventual consistency)。BASE还进一步细分基于键值的,基于文档的和基于列和图形的 – 细分的依据取决于底层架构和所支持的数据结构(注:BASE完全不同于ACID模型,它以牺牲强一致性,获得基本可用性和柔性可靠性,并要求达到最终一致性)。
在数据存储层,还有很多类似的系统和某些系统的变种,这里,我仅仅列出较为出名的几个。如漏掉某些重要系统,还请谅解。
1、BASE
(1)键值存储(Key Value Stores)
Dynamo:这是由亚马逊工程师们设计的基于键值的高可用的分布式存储系统(注:Dynamo放弃了数据建模的能力,所有的数据对象采用最简单的Key-value模型存储,可简单地将Dynamo理解为一个巨大的Map。Dynamo是牺牲了部分一致性,来换取整个系统的高可用性)。
Cassandra:这是由Facebook工程师设计的一个离散的分布式结构化存储系统,受亚马逊的Dynamo启发,Cassandra采用的是面向多维的键值或面向列的数据存储格式(注:Cassandra可用来管理分布在大量廉价服务器上的巨量结构化数据,并同时提供没有单点故障的高可用服务)。
Voldemort:这又是一个受亚马逊的Dynamo启发的分布式存储作品,由全球***的职业社交网站LinkedIn的工程师们开发而成。
(2)面向列的存储(Column Oriented Stores)
BigTable:Bigtable是一个基于Google文件系统的分布式数据存储系统,是为谷歌打拼天下的“三驾马车”之一,另外两驾马车分别是分布式锁服务系统Chubby和下文将提到的MapReduce。
HBase:Hbase是一个分布式的、面向列的开源数据库。其设计理念源自谷歌的 BigTable,用Java语言编写而成。
Hypertable:Hypertable也是一个开源、高性能、可伸缩的数据库,它采用与Google的Bigtable类似的模型。
(3)面向文档的存储(Document Oriented Stores)
CouchDB:这是一款面向文档的、开源数据存储管理系统。
MongoDB:是目前非常流行的一种非关系型(NoSQL)数据库。
(4)面向图(Graph)的存储
Neo4j:Neo4j是一款目前最为流行的高性能NoSQL 图数据库,它使用图来描述数据模型,把数据保存为图中的节点以及节点之间的关系。这是***的图数据库。
Titan:Titan是一款Apache许可证框架下的分布式的开源图数据库,特别为存储和处理大规模图而做了大量优化。
2、ACID
Megastore:这是一个构建于BigTable之上的、高可用的分布式存储系统。
Spanner:这是由谷歌研发的、可扩展的、全球分布式的、同步复制数据库,支持SQL查询访问。
MESA:亦是由谷歌研发的、跨地域复制(geo-replicated)、高可用的、可容错的、可扩展的近实时数据仓库系统。
CockroachDB:该系统是由Google前工程师Spencer Kimball领导开发的Spanner 的开源版本。
二、资源管理器层(Resource Managers)
***代Hadoop的生态系统,其资源管理是以整体单一的调度器起家的,其代表作品为YARN。而当前的调度器则是朝着分层调度的方向演进(Mesos则是这个方向的代表作),这种分层的调度方式,可以管理不同类型的计算工作负载,从而可获取更高的资源利用率和调度效率。
YARN:这是新一代的MapReduce计算框架,简称MRv2,它是在***代MapReduce的基础上演变而来的(注:MRv2的设计初衷是,为了解决***代Hadoop系统扩展性差、不支持多计算框架等问题。
Mesos:这是一个开源的计算框架,可对多集群中的资源做弹性管理。
这些计算框架和调度器之间是松散耦合的,调度器的主要功能就是基于一定的调度策略和调度配置,完成作业调度,以达到工作负载均衡,使有限的资源有较高的利用率。
三、调度器(Schedulers)
(1)作业调度器,通常以插件的方式加载于计算框架之上,常见的作业调度器有4种:
- 计算能力调度器
- 公平调度器
- 延迟调度
- 公平与能力调度器
(2)协调器(Coordination)
在分布式数据系统中,协调器主要用于协调服务和进行状态管理。
Paxos:Google的Chubby和Apache的Zookeeper,都是用Paxos作为其理论基础实现的。
Chubby:本质上就是前文提到的Paxos的一个实现版本,主要用于谷歌分布式锁服务。
Zookeeper:这是Apache Hadoop框架下的Chubby开源版本。它不仅仅提供简单地上锁服务,而事实上,它还是一个通用的分布式协调器,其设计灵感来自谷歌的Chubby。
在数据存储层,还有很多类似的系统和某些系统的变种,这里,我仅仅列出较为出名的几个。如漏掉某些重要系统,还请谅解。
四、计算框架(Computational Frameworks)
(0)运行时计算框架
可为不同种类的计算,提供运行时(runtime)环境。最常用的是运行时计算框架是Spark和Flink。
Spark:Spark是一个基于内存计算的开源的集群计算系统,其目的在于,让数据分析更加快速。Spark是由加州大学伯克利分校的AMP实验室采用Scala语言开发而成。Spark的内存计算框架,适合各种迭代算法和交互式数据分析,能够提升大数据处理的实时性和准确性,现已逐渐获得很多企业的支持,如阿里巴巴、百度、网易、英特尔等公司均是其用户。
Flink:这是一个非常类似于Spark的计算框架,但在迭代式数据处理上,比Spark更给力(注:目前大数据分析引擎Flink,已升级成为Apache***项目)。
Spark和Flink都属于基础性的大数据处理引擎。具体的计算框架,大体上,可根据采用的模型及延迟的处理不同,来进行分门别类。
(1)批处理(Batch)
MapReduce
(2)迭代式(BSP)
Pregel:Pregel是一种面向图算法的分布式编程框架,其采用的是迭代式的计算模型。它被称之为Google后Hadoop时代的新“三驾马车”之一。另外两驾马车分别是:“交互式”大数据分析系统Dremel和网络搜索引擎Caffeine。
Giraph:该系统建模于谷歌的Pregel,可视为Pregel的开源版本,它是一个基于 Hadoop架构的、可扩展的分布式迭代图处理系统。
GraphX:这是一个同时采用图并行计算和数据并行的计算框架,GraphX***是加州大学伯克利分校AMPLab实验室的一个分布式图计算框架项目,后来整合到Spark中,成为其中的一个核心组件。GraphX***的贡献在于,在Spark之上提供一栈式数据解决方案,可方便高效地完成图计算的一整套流水作业。
Hama:是一个构建Hadoop之上的基于BSP模型的分布式计算引擎,Hama的运行环境需要关联 Zookeeper、HBase、HDFS 组件。Hama中最关键的技术,就是采用了BSP模型(Bulk Synchronous Parallel,即整体同步并行计算模型,又名大同步模型)。
(3)流式(Streaming)
Storm:Storm有时也被人们称为实时处理领域的Hadoop,它大大简化了面向庞大规模数据流的处理机制,从而在实时处理领域扮演着重要角色。
Samza:这是一款由Linkedin公司开发的分布式的流式数据处理框架(注:所谓流式数据,是指要在处理单位内得到的数据,这种方式更注重于实时性,流式数据有时也称为快数据)。
Spark流:Spark Streaming是Spark 核心API的一个扩展,它并不会像Storm那样逐个处理数据流,而是在处理前,按时间间隔预先将其切分为很多小段的批处理作业。
(4)交互式(Interactive)
Dremel该论文是多个基于Hadoop的开源SQL系统的理论基础。
Impala:这是一个大规模并行处理(MPP)式 SQL 大数据分析引擎,Impala像Dremel一样,其借鉴了MPP(Massively Parallel Processing,大规模并行处理)并行数据库的思想,抛弃了MapReduce这个不太适合做SQL查询的范式,从而让Hadoop支持处理交互式的工作负载。
Drill:这是谷歌 Dremel的开源版本,Drill是一个低延迟的、能对海量数据(包括结构化、半结构化及嵌套数据)实施交互式查询的分布式数据引擎。
Shark:Shark即“Hive on Spark”的含义,本质上是通过Hive的HQL解析,把HQL翻译成Spark上的RDD操作。然后通过Hive的元数据获,取数据库里的表信息。HDFS上的数据和文件,***会由Shark获取,并放到Spark上运算。Shark基于 Scala语言的算子推导,可实现良好的容错机制,对执行失败的长/短任务,均能从上一个“快照点(Snapshot)”进行快速恢复。
Dryad:Dryad是一个通用的粗颗粒度的分布式计算和资源调度引擎,其核心特性之一,就是允许用户自己构建DAG调度拓扑图。
Tez:其核心思想来源于Dryad,可视为利用Yarn(即MRv2)对Dryad的开源实现。Apache Tez是基于Hadoop Yarn之上的DAG计算框架。
BlinkDB:可在抽样数据上实现交互式查询,其呈现出的查询结果,附带有误差标识。BlinkDB 是一个用于在海量数据上运行交互式 SQL 查询的大规模并行查询引擎。BlinkDB允许用户通过适当降低数据精度,对数据进行先采样后计算,其通过其独特的优化技术,实现了比Hive快百倍的交互式查询速度,而查询进度误差仅降低2~10%。
(5)实时系统(RealTime)
Druid:这是一个开源的分布式实时数据分析和存储系统,旨在快速处理大规模的数据,并能做到快速查询和分析。
Pinot:这是由LinkedIn公司出品的一个开源的、实时分布式的 OLAP数据分析存储系统,非常类似于前面提到的Druid,LinkedIn 使用它实现低延迟可伸缩的实时分析。
五、数据分析层(Data Analysis)
数据分析层中的工具,涵盖范围很广,从诸如SQL的声明式编程语言,到诸如Pig的过程化编程语言,均有涉及。另一方面,数据分析层中的库也很丰富,可支持常见的数据挖掘和机器学习算法,这些类库可拿来即用,甚是方便。
(1)工具(Tools)
Pig:Pig Latin原是一种儿童黑话,属于是一种英语语言游戏,形式是在英语上加上一点规则使发音改变,让大人们听不懂,从而完成孩子们独懂的交流。雅虎的工程师们于2008年发表在SIGMOD的一篇论文,论文的题目是“Pig Latin:并不是太老外的一种数据语言”,言外之意,他们发明了一种数据处理的“黑话”——Pig Latin,一开始你可能不懂,等你熟悉了,就会发现这种数据查询语言的乐趣所在。
Hive:Hive是一个建立于 Hadoop 上的数据仓库基础构架。它用来进行数据的提取、转化和加载(即Extract-Transform-Load ,ETL),它是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。
Phoenix:它是 HBase 的 SQL 驱动,Phoenix可将 SQL 查询转成 HBase 的扫描及相应的动作。
(2)库(Libraires)
MLlib:这是在Spark计算框架中对常用的机器学习算法的实现库,该库还包括相关的测试和数据生成器。
SparkR:这是AMPLab发布的一个R开发包,为Apache Spark提供轻量级的前端。
Mahout:这是一个功能强大的数据挖掘工具,是一个基于传统Map Reduce的分布式机器学习框架,Mahout的中文含义就是“驭象之人”,而Hadoop的Logo正是一头小黄象。很明显,这个库是帮助用户用好Hadoop这头难用的大象。
六、数据集成层(Data Integration)
数据集成框架提供了良好的机制,以协助高效地摄取和输出大数据系统之间的数据。从业务流程线到元数据框架,数据集成层皆有涵盖,从而提供全方位的数据在整个生命周期的管理和治理。
(1)摄入/消息传递(Ingest/Messaging)
Flume:这是Apache旗下的一个分布式的、高可靠的、高可用的服务框架,可协助从分散式或集中式数据源采集、聚合和传输海量日志。
Sqoop:该系统主要用来在Hadoop和关系数据库中传递数据,Sqoop目前已成为Apache的***项目之一。
Kafka:这是由LinkedIn开发的一个分布式消息系统,由Scala编写而成。由于可水平扩展、吞吐率高等特性,得到广泛应用。
(2)ETL/工作流
ETL是数据抽取(Extract)、清洗(Cleaning)、转换(Transform)、装载(Load)的过程,是构建数据仓库的重要一环。
Crunch:这是Apache旗下的一套Java API函数库,它能够大大简化编写、测试、运行MapReduce 处理工作流的程序。
Falcon:这是Apache旗下的Falcon大数据管理框架,可以帮助用户自动迁移和处理大数据集合。
Cascading:这是一个架构在Hadoop上的API函数库,用来创建复杂的可容错的数据处理工作流。
Oozie:是一个工作流引擎,用来协助Hadoop作业管理,Oozie字面含义是驯象之人,其寓意和Mahout一样,帮助用户更好地搞定Hadoop这头大象。
(3)元数据(Metadata)
HCatalog: 它提供了面向Apache Hadoop的数据表和存储管理服务,Apache HCatalog提供一个共享的模式和数据类型的机制,它抽象出表,使用户不必关心数据怎么存储,并提供了可操作的跨数据处理工具。
(4)序列化(Serialization)
Protocol Buffers:由Google推广的一种与语言无关的、对结构化数据进行序列化和反序列化的机制。
Avro:这是一个建模于Protocol Buffers之上的、Hadoop生态系统中的子项目,Avro本身既是一个序列化框架,同时也实现了RPC的功能。
七、操作框架(Operational Frameworks)
***,我们还需要一个操作性框架,来构建一套衡量标准和测试基准,从而来评价各种计算框架的性能优劣。在这个操作性框架中,还需要包括性能优化工具,借助它来平衡工作负载。
(1)监测管理框架(Monitoring Frameworks)
OpenTSDB:这是构建于HBase之上的实时性能评测系统。
Ambari:这是一款基于Web的系统,支持Apache Hadoop集群的供应、管理和监控。
(2)基准测试(Benchmarking)
YCSB:YCSB是雅虎云服务基准测试(Yahoo! Cloud Serving Benchmark)的简写。见名知意,它是由雅虎出品的一款通用云服务性能测试工具。
GridMix:该系统通过运行大量合成的作业,对Hadoop系统进行基准测试,从而获得性能评价指标。