在部署云数据湖架构之前,重要的是了解可以为云数据湖架构奠定基础并充当构建块的四个关键组件。这些组件是:
· 数据本身
· 数据湖存储
· 处理数据的大数据分析引擎
· 云数据仓库
我们已经提到数据湖支持多种数据,但这种多样性实际上意味着什么?让我们以之前讨论的数据为例,特别是库存和销售数据集。从逻辑上讲,此数据本质上是表格形式的,这意味着它由行和列组成。但是实际上,此表格数据的表示方式取决于生成数据的源。粗略地说,大数据处理有三大类数据:
结构化数据
这是指一组格式,其中数据驻留在定义的结构(行和列)中,并遵循严格执行的预定义模式。一个典型的示例是在关系数据库(如SQL)中的数据,它类似于图2-1中的内容。数据以专门定制的二进制格式存储在关系数据库中,并优化为存储表格数据(按行和列组织的数据)。这些格式是专有的,是为特定系统量身定制的。数据的使用者(无论是用户还是应用程序)都了解此结构和模式,并依靠它们来编写应用程序。任何不符合规则的数据都将被丢弃,而不会存储在数据库中。关系数据库引擎还以优化的二进制格式存储这些数据,这样可以有效地存储和处理这些数据。
图2-1:数据库中的结构化数据
半结构化数据
这是指存在结构的一组格式,但是,它的定义很松散,并在需要时提供了自定义结构的灵活性。JSON和XML是半结构化数据的典型代表。图2-2显示了两种格式的销售项目ID的半结构化数据的表示形式。这些半结构化数据格式的强大之处在于灵活性。一旦开始设计架构,然后确定所需的数据,就可以继续使用额外的字段存储数据,而不会破坏原有结构。读取数据的现有引擎将继续工作而不会中断,新引擎可以合并新字段。同样,当不同的数据源发送类似的数据时(例如,销售点系统和网站遥测都可以发送销售信息),可以利用灵活的架构来支持多个源。
图2-2:半结构化数据
非结构化数据
非结构化数据是指对数据存储方式没有限制的格式,可以像社交媒体提要上的评论一样简单的自由格式笔记,也可以像MPEG4视频或PDF文档一样复杂。非结构化数据可能是最难处理的格式,因为它需要自定义的编写解析器来理解数据并从数据中提取正确的信息。同时,它是通用对象存储中最容易存储的格式之一,因为它没有任何限制。例如,社交媒体提要中的一张图片,卖家可以在其中标记商品,一旦有人购买了该商品,就会添加另一个标签,表示已售出。处理引擎需要处理图像以了解出售的商品,然后处理标签以了解价格和购买者。虽然这并非不可能,但理解数据需要付出很多努力,而且质量很低,因为它依赖于人工标记。但是,这将灵活性的范围扩展到可用于进行销售的各种途径。例如,可以编写一个引擎来处理社交媒体中的图片,以了解哪个房地产经纪人以什么价格出售了给定区域的房屋,如图2-3所示。
图2-3:非结构化数据
云数据湖存储的定义非常简单:云数据湖是一种作为云产品提供的服务,可以作为各种数据(结构化、非结构化和半结构化)的中央存储库,并且可以支持大规模数据和事务。说到“大规模”时,指的是一个存储系统支持每秒存储数百PB的数据和数十万个事务,并且可以随着数据和事务的持续增长而保持弹性扩展。在大多数公有云产品中,数据湖存储可作为PaaS产品提供,也称为对象存储服务。数据湖存储服务提供丰富的数据管理功能,例如分层存储(不同层具有不同的成本,可以将很少使用的数据移到成本较低的层)、具有不同复制程度的高可用性和灾难恢复,以及允许管理员控制各种使用者访问的丰富安全模型。让我们来看一些最流行的云数据湖存储产品。
Amazon S3(简单存储服务)
Amazon提供的S3是一项大规模对象存储服务,建议将其作为在AWS上构建数据湖架构的存储解决方案。存储在S3中的实体(结构化和非结构化数据集)被称为对象,对象被组织到称为存储桶(bucket)的容器中。S3还允许用户能够通过使用公共前缀将对象分组在一起(将其视为虚拟目录)来组织其对象。管理员可以通过在存储桶或前缀级别应用访问策略来控制对S3的访问。此外,数据操作员可以向对象添加标签,这些标签本质上是键值对。它们充当标签或主题标签,允许你通过指定标签来检索对象。Amazon S3还提供丰富的数据管理功能来管理数据成本,并增强安全保证。要了解更多有关S3的信息,可以访问文档页面( https://aws.amazon.com/s3 )。
Azure数据湖存储(Azure Data Lake Storage, ADLS)
ADLS是一种Microsoft Azure存储产品,它在其通用对象存储服务(Azure Blob存储)上提供具有分层命名空间的本地文件系统。根据ADLS产品网站( https://oreil.ly/0nnWd ),ADLS是用于写入、处理和可视化的单一存储平台,支持最常见的分析框架。你可以设置存储账户,在其中确认“启用分层命名空间”以创建ADLS账户。ADLS提供了一个称为容器的组织单元和一个带有目录和文件的本地文件系统来组织数据。可以访问文档页面( https://oreil.ly/hG7ah )以了解更多有关ADLS的信息。
谷歌云存储(GCS)
GCS是由GCP提供的对象存储服务,建议作为数据湖存储解决方案。与S3类似,Google中的数据被称为对象,并按存储桶进行组织。可以在文档页面( https://oreil.ly/DDuNH )上了解更多有关GCS的信息。
云数据存储服务能够从各种来源(包括本地存储解决方案)加载数据,并与连接到物联网(IoT)传感器等源的实时数据获取服务进行集成。它们还与支持旧版应用程序的本地系统和服务集成。此外,大量的数据处理引擎可以处理存储在数据湖存储服务中的数据。这些数据处理引擎分为许多类别:
· 作为AWS、HDInsight公有云产品(例如AWS的EMR、Azure的HDInsight和Azure Synapse Analytics以及GCP的Dataproc)一部分的PaaS解决方案。
· 其他软件公司(如Databricks、Dremio、Talend, Informatica和Cloudera)开发的PaaS解决方案。
· SaaS解决方案,如Microsoft Power BI、Tableau和Looker。
还可以预配IaaS解决方案(如VM),并运行自己的软件发行版(如Apache Spark)来查询数据湖。
需要注意的是,计算和存储在数据湖架构中是分解的,可以对数据湖中的数据运行一个或多个处理引擎,而无须移动数据。流行的数据仓库有Amazon Redshift、Google BigQuery和Snowflake Data Cloud。数据仓库同时提供计算和存储,虽然在某些情况下数据仓库支持查询驻留在独立数据湖存储中的数据,但最常见的用例是使用最优化的路径:以专有数据格式查询驻留在数据仓库中的数据。最近,数据仓库已经开始支持像Apache Iceberg这样的开放数据格式,这是一个非常有前途的趋势,可以定向支持数据湖仓一体架构,在本章中将更详细地介绍。
通过前面章节的介绍,我们了解到大数据分析是对结构化、半结构化和非结构化数据的处理。现在让我们来看看这个处理实际上是什么样子的。当我们谈论数据湖上的大数据分析时,所发生的处理很可能是以下描述之一,或者它们的衍生。
MapReduce
大数据和分析处理的起源在于搜索引擎的出现。搜索引擎主要通过抓取互联网上所有来源的文本数据并构建映射到网页的庞大关键字索引来工作。当用户搜索关键字时,搜索引擎会对该索引中的数据进行排名,并向用户提供一组有序的结果。虽然搜索引擎的设计本身就值得写一本书,但我们在这里不会详细讨论。搜索引擎表明当需要处理大量数据时,这些数据可以简化为一个可搜索的索引,从而产生了一个名为MapReduce(映射规约)的编程模型。
MapReduce本质上是一个编程模型和相关实现,它接受一组输入的键值对并生成一组输出的键值对。听起来很简单,不是吗?这里的问题是规模——对具有数百万条记录的一组数据执行此转换。正如Jeffrey Dean和Sanjay Ghemawat在论文“MapReduce:Simplified Data Processing on Large Clusters”( https://research.google/pubs/pub62 )中所描述的那样,MapReduce有两个阶段,顾名思义。在映射阶段,数据按键组织,逻辑为将相似的值组合在一起,从而生成中间键值对。归约阶段处理这些类似的数据集并以键值对的形式生成一组筛选的结果。
例如,以Twitter数据为例,其目标是了解在大量信息流中每个用户的提及次数(图2-4显示了较小样本的示例)。这里有一组计算单元在工作:多个工作单元对分配给它们的数据集进行操作,一个主协调单元在工作单元之间进行协调。计算单元可以是VM、进程或线程,具体取决于实现。Twitter信息流的大集合被分解为较小的集(在本例中为一个信息流)并分配给工作单元,以便将提及的内容映射为计数并生成一组输出键值对。然后将这些数据值发送到另一组工作单元进行归约以生成每个用户的提及次数。主要优点是,此编程模型允许大型数据集有效地分布在具有可预测分布机制的一组大型工作单元中。
图2-4:MapReduce
Apache Hadoop
开源组织Apache有一个名为Apache Nutch( http://nutch.apache.org )的开源网络搜索项目,该项目至今仍在使用。2005年,作为Apache Nutch的一部分,Doug Cutting和Mike Cafarella创建了Apache Hadoop( https://hadoop.apache.org ),这是一组用于大型数据集的分布式处理的工具、库和组件,使用MapReduce作为其核心处理逻辑。Apache Hadoop由以下四个主要组件组成。
Hadoop通用模块
一组支持其他模块的通用库。
Hadoop Distributed File System(HDFS)
用于大型数据集的分布式存储系统。
Hadoop MapReduce
用于大规模处理大型数据集的编程模型和实现。
Hadoop YARN
YARN(Yet Another Resource Negotiator,另一种资源协调者)是用于作业调度和资源管理的框架,用于在计算机集群之间分配工作和数据。
Hadoop奠定了坚实的基础,催生了其他各种开源项目,如Apache Hive、Apache Pig、Apache Storm和Apache Mahout,为分布式大数据处理构建了更多的框架和编程模型。Hadoop Ecosystem Table( https://oreil.ly/WGgSR )提供了所有Hadoop项目和工具的详细索引,如图2-5所示。
图2-5:Hadoop框架和生态系统
Hadoop将大数据处理生态系统商品化,Hortonworks和Cloudera等供应商出售了其Hadoop发行版,客户可以将其安装在本地或云端。公有云提供商还提供基于Hadoop的处理打包版本作为PaaS解决方案,例如AWS的Elastic MapReduce(EMR)和Microsoft Azure的HDInsight。你可能想知道该如何选择所有这些不同风格的Hadoop产品。虽然有许多原因,例如熟悉供应商、销售和营销关系等,但一些关键的技术因素会影响客户的选择:
· 在混合环境中运行(同时具有本地部署和云部署)或在多云环境中运行的客户会选择由独立软件供应商(ISV)(如Cloudera或Hortonworks)提供的Hadoop产品,这样他们的实施就能在所有环境中运行。
· 希望将其大数据平台与其他原生云服务紧密集成的客户选择公有云提供商的产品,例如AWS、Azure和GCP。
· 愿意投资强大的技术团队并希望节省供应商成本的客户通过分享开源存储库并构建平台来打造自己的Hadoop风格。
这在很大程度上也适用于其他开源产品,如Apache Spark。
公平地说,Hadoop通过提供一整套全面的大数据处理工具奠定了数据湖架构的基础,包括用于批处理的MapReduce、用于实时处理的Apache Storm和用于通过Hadoop架构查询数据的Apache Hive。
Apache Spark
Apache Spark( https://spark.apache.org )孵化于加州大学伯克利分校的AMPLab( https://amplab.cs.berkeley.edu ),该实验室专注于大数据分析。Apache Spark的目标是为分布式数据处理提供一个灵活的编程模型,该模型具有MapReduce的容错能力和规模,同时还支持更广泛的应用程序(例如机器学习),这些应用程序依赖数据的迭代处理和实时处理来提供即时见解。
与Hadoop一样,Spark使用底层存储层,但是没有强制要求必须是HDFS存储,Spark支持云对象存储服务甚至本地存储。类似地,Spark使用集群管理器,并且同样支持各种选项,例如YARN(从Hadoop诞生)和Apache Mesos(也由加州大学伯克利分校首先开发)。最近,鉴于Kubernetes和容器(简单地定义为一个即用型软件包,其中包含代码、运行应用程序和运行代码所需的任何其他组件)在云原生开发中日益普及,Spark on Kubernetes( https://oreil.ly/Ck4pd )也得到了广泛采用。Spark的关键区别在于Spark核心引擎,它建立在将数据集作为弹性分布式数据集(RDD, https://oreil.ly/tb5Y3 )的基础抽象之上,而无须将中间数据集存储到持久性存储器中,并且仍然保持容错能力。该模型大大提高了基于Spark的应用程序的性能,并为批处理、交互式查询(Spark SQL)、数据科学(MLlib)、实时处理(Spark Streaming)和最近引入的图形处理(GraphX)提供了统一的编程模型。Apache Spark的易用性和不断增长的接受度有助于将各个行业的大数据处理商品化。你既可以使用Spark本身的发行版,也可以利用公有云提供商(如Amazon EMR、Azure Synapse Analytics或Google Cloud Dataproc)或软件提供商(如Databricks,一家由Spark发明者创办的公司)提供的Spark。
图2-6演示了Spark的各种技术组件,以及它们如何相互叠加,以在机器学习、实时流和批处理流中提供一致的编程模型。
图2-6:Apache Spark
实时流处理流水线
实时流处理是指摄取、处理和使用数据,特别关注速度,以近乎实时为目标。例如,旅行的时候,从你最喜欢的食物评论应用程序收到你可以探索的附近餐馆的实时通知。这是有一个实时处理流水线在工作,它可以从你的移动设备捕获你的位置信号,并将这些信号与你的个人资料和其他数据相结合,以实时提供个性化建议。另一个例子是手机上的导航应用程序,当你的常规路线上有交通拥堵时,它会建议你走不同的路线。在这种情况下,也有一个实时处理流水线,它将实时交通数据与地图相结合,以提供最佳路线。
实时流处理流水线涉及以非常高的速度从数据源获取的数据,换句话说,它是流入系统的数据,就像雨或瀑布一样。这可能是从GPS等来源连续流式传输的数据,也可能是物联网传感器(如家庭自动化系统或工业设备)发出的事件。这些数据量往往非常少,通常为几千字节(K B)。
实时流式处理流水线的处理部分涉及处理实时流数据,有时需要与其他可能不是实时的数据相结合,重点是低延迟,通常以毫秒为单位。实时处理应用程序的典型场景是驱动近乎实时的见解,以便使用者可以快速采取行动,例如处理系统日志并在出现问题时引发实时警报的系统。
实时数据处理技术在处理以高速和高吞吐量进入系统的数据时,需考虑以下方面:
交付保证
实时流处理技术提供了交付保证,可以确定数据的实时处理方式。“至少一次”(at-least-once)保证可确保传入的数据至少处理一次,甚至可能多次处理以处理故障。“最多一次”(at-most-one)保证确保传入的数据最多处理一次,避免重复处理。“仅一次”(exactly-once)保证确保数据只处理一次,“仅一次”保证非常理想,但也很难实现。
容错
实时流处理技术需要确保它们在集群中或底层基础设施发生故障时具有弹性,并且能够从中断的地方继续。
状态处理
实时流处理框架提供状态管理:记录处理了多少条消息或最后处理的消息是什么。
实时流数据可以通过多种方式使用:展示趋势的可视化效果(如社交媒体趋势图表)、警报系统(如安全事件检测),甚至是智能应用程序行为(如基于浏览模式的实时推荐)。
图2-7说明了实时流数据流水线的架构。还有多种技术可供你构建实时数据流水线。Apache Kafka( https://kafka.apache.org )是一项用于获取和存储实时流数据的重要技术,可提供高吞吐量和可扩展性。Amazon Kinesis( https://aws.amazon.com/kinesis )和Azure Event Hub( https://oreil.ly/jwp65 )是以Apache Kafka为基础技术构建的云原生PaaS产品。Apache Storm( https://storm.apache.org )和Apache Flink( https://flink.apache.org )是流行的、提供实时数据处理技术的开源技术。Apache Kafka还提供了用于实时流处理的Kafka流。
图2-7:实时流数据流水线
云数据仓库是在公有云上作为托管服务(PaaS)提供的企业数据仓库,具有针对数据写入、分析处理和BI分析的优化集成。BI分析是指支持可视化和交互式查询功能的工具。云数据仓库产品旨在通过将基础设施从用户中抽象出来,能够随着客户不断增长的需求进行动态扩展,并且与传统的本地数据仓库相比,云数据仓库具有更佳的性能和更低的拥有成本。下面列出一些最流行的云数据仓库产品。
Amazon Redshift
Amazon Redshift是公有云上第一个流行的云数据仓库产品。你可以预置Redshift集群,在其中指定所需的计算节点数。根据产品文档,集群可以支持PB级数据。可以使用PostgreSQL(一种流行的查询语言)来查询Redshift集群中的数据。要了解更多有关Redshift的信息,可以访问产品页面( https://aws.amazon.com/pm/redshift )。Redshift还宣布能够在不同Redshift集群之间共享数据而无须复制数据,以促进数据和见解的共享( https://oreil.ly/unEUs )。
Google BigQuery
Google BigQuery与Redshift不同,在Redshift中,可以将数据仓库配置为集群,而Google BigQuery是一种完全无服务器、高度可扩展的数据仓库解决方案,可将集群管理的详细信息完全从客户那里抽象出来。此外,BigQuery还具有BigQuery Omni( https://oreil.ly/ccsBP )等功能,允许客户跨其他云(如AWS和Azure)使用BigQuery计算服务。要了解更多有关BigQuery的信息,可访问产品页面( https://oreil.ly/i8rtT )。
Azure Synapse Analytics
Azure Synapse Analytics是Microsoft Azure上的统一分析平台。与Redshift类似,客户可以预配数据仓库集群并指定方案所需的节点数,还可以为具有相同体验的分析方案预配Spark集群。此外,还可以在SQL或Spark中运行无服务器查询。使用无服务器查询时,只需简单地提交作业即可,而无须预置集群,类似于BigQuery。Azure Synapse Analytics还提供与其他Azure服务(如Azure机器学习、Azure认知服务和PowerBI)具有相同体验的集成。若要详细了解有关Azure Synapse分析的信息,可访问产品页( https://oreil.ly/oO8jg )。
Snowflake Data Cloud
Snowflake数据仓库是一种托管数据仓库解决方案,可在所有公有云(AWS、Amazon和GCP)上使用。Snowflake被设计为真正可扩展的解决方案,作为单独的服务提供。在分解的计算和存储架构上运行Snowflake,能使其在计算或存储维度上高度可扩展,而不会增加成本。这种隔离聚合还允许启动可以访问相同数据的不同虚拟仓库,从而在不同查询方案之间提供隔离。Snowflake还向其他Snowflake账户提供表和对象级别的数据共享。要了解更多有关Snowflake的信息,可访问产品页面( https://oreil.ly/gKddO )。
本节简要介绍了云数据湖架构的四个组成部分(数据、数据湖存储、计算引擎和云数据仓库)的概念。此外还提供了常用服务和技术的概述,以及供读者深入探索的链接。下一节将介绍云数据湖架构,这些架构表示在解决方案中组装这些构建块的不同方式。数据湖和数据仓库产品都正在快速创新,它们之间的界限日渐模糊。本书将在数据湖仓架构模式中进一步探讨这个问题。
云数据湖架构中的数据可以有多种用途。但是,有两个主要场景是组织(企业)中常见的使用模式:
商业智能
BI分析师使用数据来创建商业智能仪表盘或处理交互式查询,以回答定义明确且处理高度结构化数据的关键业务问题。
数据科学和机器学习
数据科学家和机器学习工程师使用数据进行探索性分析和实验工作,以回答没有定义规则集且需要多次迭代才能获得较好结果的复杂问题。此处涉及的数据假定没有结构。