当您深入研究本章内容时,您首要的决定是在开源解决方案和云服务提供商提供的产品之间做出选择。然而,还有更多需要考虑的因素。我将指导您思考您的数据需求规模以及组织的灵活性要求。
除此之外,我们将探讨云服务模型的景观,从主要提供商到多云解决方案的复杂性。本章最后将向您介绍三个重要的软件框架:Hadoop、Databricks 和 Snowflake。
您在本章中的问题答案将深刻地塑造您的数据架构。这不仅仅是开源与专有的选择;它涉及到打造适合您在数据架构世界中独特需求的完美技术组合。
选择一个平台
使用开源软件或云服务提供商(CSP)提供的软件的决定取决于各种因素,包括具体要求、预算、专业知识、数据敏感性和控制偏好。仔细评估您组织的需求,并考虑云服务提供商软件的优势与开源软件提供的灵活性和定制性之间的权衡。
开源解决方案
开源软件是指免费分发的软件,其源代码公开可供任何人查看、修改和分发。通常,它是由一个程序员社区协作开发的,他们共同贡献自己的知识和专长来创建和改进软件。
开源软件有着丰富的历史,跨越数十年。它起源于20世纪80年代的自由软件运动,由理查德·斯托曼领导,该运动倡导软件自由。成立于1998年的开放源代码倡议(OSI)创建了开源定义,并建立了开源软件许可证的标准,确保软件保持免费和开放供任何人使用。Linux 在推广开源软件方面发挥了重要作用。由于其灵活性和低成本,2010年代采用开源解决方案变得流行起来。像 GitHub 这样的协作平台促进了开源软件的发展,并且这一运动已经扩展到了软件以外的领域,包括开放数据和硬件倡议。一些顶级开源软件项目包括 MySQL、PostgreSQL、MongoDB、Apache Hadoop、Apache Spark、Apache Kafka、Presto 和 Apache Airflow。
许多数据架构使用开源软件,但很少有架构是完全由它构建的。大多数架构将开源软件与云服务提供商的产品结合使用。在数据架构中包含开源软件是值得考虑的。
您可能希望使用开源软件而不是云服务提供商的产品的一些主要原因包括:
- 成本节约
开源软件通常是免费使用的。这使其成为那些希望优化预算的组织的吸引选择。
- 灵活性和定制性
开源软件提供了修改和定制源代码以满足特定需求的自由。这使您可以根据组织的需求定制软件,根据需要添加或删除功能。
- 透明度和信任
开源软件的源代码是公开的,任何人都可以查看以查找安全漏洞、错误和潜在后门。这种透明性促进了信任,并为代码审查和改进营造了合作环境。
- 快速创新和协作
开源软件受益于全球开发者社区的专业知识和改进。这种合作环境促进了快速创新,加速了软件开发周期,并产生了更可靠和功能丰富的解决方案。
- 独立供应商
使用开源软件时,组织不会受限于特定的供应商或专有软件。他们可以自由选择服务提供商或根据需要定制软件。
但也有一些潜在的劣势需要考虑:
- 有限的支持
与云服务提供商的软件不同,开源软件可能没有专门的客户支持或服务级别协议。依赖社区支持可能意味着不同的响应时间,因此解决关键问题可能需要更长的时间。为了避免这个问题,公司通常会从供应商处购买支持合同。此外,一些硬件和软件供应商更看重与云服务提供商解决方案的兼容性和支持,而不是开源软件。这可能导致硬件驱动程序的可用性有限,或者某些软件应用程序得不到支持。
- 学习曲线和用户体验
使用开源解决方案通常需要有技术的开发人员或技术人员来有效地实施、定制和维护它们。这可能会导致额外的培训或招聘成本。开源软件项目在文档质量、用户界面的友好程度和安装的便利性方面也有所不同。有些项目可能缺乏全面的文档或直观的用户界面,使初始设置和配置变得更具挑战性。
- 碎片化、标准化和兼容性
由于开源软件开发的分布式性质以及大量的开源项目和版本,编码风格、约定或方法的标准化很少。这可能导致碎片化,使得选择合适的解决方案或确保不同开源软件组件之间的兼容性变得困难。与现有系统集成可能需要额外的努力。(了解更多,请参阅"Hadoop")
- 安全性和责任
即使在全球社区的审查下,开源软件中仍然存在漏洞和错误。如果使用它,您必须警惕地应用安全补丁和更新。此外,如果您的组织修改了开源软件的代码,它就承担了维护定制版本的安全性和完整性的责任。
- 项目维护的不确定性
并非所有开源软件项目都在积极开发或提供长期维护。有时,项目可能停滞不前,很少更新或提供安全补丁。在采用开源软件解决方案之前,评估活动水平和社区支持水平。
- 知识产权考虑
在使用或向开源软件贡献时,组织必须应对知识产权和许可义务问题。了解开源软件许可证的条款和条件以确保合规性并避免法律问题是至关重要的。
On-Premises Solutions
如果您的公司有本地数据仓库解决方案,您可能正在考虑将其迁移到云端,或者至少在云端建立新的绿地项目。然而,仍然有一些情况下您可能希望将您的数据仓库解决方案放在本地: 如果您的互联网连接速度慢或不存在,比如在深矿井、潜水艇、海上油井平台或游轮上。
如果您需要毫秒级的性能,比如高容量邮件处理设施中的服务器。 如果将您的应用程序迁移到云端会违反第三方支持合同。 如果您与数据中心有长期锁定的租赁合同,或者刚刚进行了非常大的设备购买。
如果您有大量本地产生的数据需要迁移到云端,而您的向云端的管道受到限制,无法满足用户的报告需求。您的报告可能无法反映最新的数据,可能会延迟决策。 如果您计划在不久的将来更换或淘汰您的应用程序和数据库。
如果您的数据非常敏感(尽管这不再阻止许多组织将数据放入云端------大多数云服务提供商现在都有最高机密的云)。
如果您公司的数据库有以上任何情况,您可能希望将这些数据库保留在本地,但您仍然可以将其他数据库迁移到云端。在过去的几年里,我已经与数百家公司进行了讨论,几乎每一家公司都至少部分使用了云端。大多数公司已经关闭了所有的本地数据中心。对于任何新公司来说,在云端是一个不言而喻的选择。
如果您的数据仓库在本地,您应该意识到以下约束:
- 有限的可扩展性
您扩展基础设施的能力受到您可以购买的硬件的限制。如果您必须使用某些供应商,如果现有硬件存在兼容性问题,或者如果硬件供应商正在经历生产延迟,您的硬件可能会成为限制因素。同样,数据中心只有那么多的物理空间。当您没有足够的空间添加更多的服务器时,您只能选择两个非常昂贵的选项:扩展您的数据中心或建立另一个数据中心。这两种方法都可能需要数月时间。
- 前期成本
为本地解决方案购买硬件会产生非常大的前期资本支出。硬件包括服务器硬件、用于容纳硬件的数据中心空间、额外的存储设备、防火墙、网络交换机、用于访问数据的高速网络(具有冗余性)、保持系统运行所需的电源和冗余电源供应,以及安全和数据备份的成本。
如果您的仓库至关重要,那么您还需要配置一个灾难恢复站点,从而有效地将成本加倍。
我经常告诉公司,如果他们拥有自己的本地数据中心,那他们就是在做空调业务,因为他们必须使所有这些硬件保持凉爽。您不想把所有精力都放在分析数据上吗?大多数公司更喜欢与云服务提供商合作,以年度运营费用的方式。
- 人员成本
您需要支付具有专业技能的员工或顾问来设置、管理、管理和支持硬件和软件,调整产品性能,以及将产品和解决方案部署到生产环境中。当问题出现时,这会导致潜在的瓶颈,并将系统的责任留给客户而不是供应商。
- 软件成本
组织经常支付数十万美元的软件许可费用,用于数据仓库软件和附加包,以及向其他终端用户(例如客户和供应商)提供对数据的访问的许可费用。此类软件的年度支持合同往往可以达到原始许可费用的20%。
现在让我们来看看云端。
云服务提供商解决方案 云就像一个庞大的、无形的存储室,存在于乌有之中的某个地方。它允许我们从任何地方存储、访问和共享数据,同时避免了空间不足或丢失宝贵数据的风险。它的影响贯穿本书中描述的所有架构,重新定义了我们处理数据的方式。云计算提供了对共享计算资源(如服务器、存储和应用程序)的按需访问,无需购买、拥有和维护物理数据中心和服务器。这使得计算具有可扩展性、灵活性和成本效益。
拥有一个云端数据仓库解决方案有许多好处:
- 可扩展性和弹性
云服务提供商的软件设计成可以无缝扩展的。您可以根据需要动态提供存储和计算资源,以满足高峰和稳定使用期间不断变化的工作负载的需求。容量是您需要的任何东西,无论您何时需要它。
- 成本
在云系统中,容量规划和管理(例如大小、平衡和调整系统)的复杂性和成本已内置、自动化,并由您的云订阅费用覆盖。云服务提供商还提供灵活的定价模型,因此您只需支付您实际使用的资源。您可以随着需求减少硬件或使用无服务器选项。
这意味着您可以快速构建一个解决方案,如果不起作用,您可以简单地删除项目使用的所有云资源。失败成本大大降低,这意味着您可以冒险尝试新事物。
还需要考虑间接成本节省:您不需要支付硬件、电力、构建和维护数据中心的员工,或者自己开发升级。
- 易于部署和管理
云服务提供商的软件通常带有集成的部署和管理工具,简化了设置和配置过程。这些工具简化了资源的配置和扩展、监视和维护任务,从而减少了运营开销。您可以在几小时甚至几分钟内创建所有云资源(如计算、存储和网络),而在本地启动解决方案可能需要几周甚至几个月的时间。
- 供应商支持和服务级别协议(SLA)
云服务提供商提供专门的支持和SLA,提供协助、故障排除和可靠的服务可用性。
- 集成生态系统
通常,云服务提供商的软件与该提供商的其他服务无缝集成。这可以更容易地集成和互操作不同的服务,并帮助您利用提供商的更广泛的功能。
- 托管服务
云服务提供商经常处理软件基础架构的特定方面,例如托管数据库、机器学习服务或无服务器计算。这些托管服务可以卸载操作复杂性,使组织能够专注于其核心业务而不是管理基础架构。这也使您无需找到并支付第三方供应商的服务。
- 持续创新和功能更新
云服务提供商定期推出新功能、服务和更新其软件产品。您可以从他们的创新中受益,而无需投资于升级或集成新功能。
- 更容易的招聘
大量的人使用云服务提供商的产品;开源软件可以有一个规模较小的用户群。因此,找到了解您组织使用的云产品的求职者可能会更容易。
- 全球可用性和高可用性
云服务提供商的数据中心遍布全球,这使您可以将软件部署到更接近您的目标受众的地方,或利用多区域冗余以实现高可用性。云服务提供商使用负载均衡将流量均匀分布到多台服务器上,确保没有单个服务器过载并导致停机。
这种全球基础设施确保了低延迟服务,且具有容错性。在硬件或软件故障的情况下,服务将自动切换到辅助实例,确保不间断和可靠的访问。此外,您可以在几分钟内为存储设置灾难恢复。
- 安全性和合规性
云服务提供商大量投资于安全措施,例如加密、访问控制和定期审计,以保护数据并确保符合行业标准和法规。
云服务模型
在云计算中,有三种基本的服务模型用于交付和管理IT资源:
基础设施即服务(IaaS)
云服务提供商(CSP)托管和管理硬件基础设施。它提供了虚拟化的计算资源,如服务器、存储和网络,可以根据需要轻松地进行扩展或缩减;客户管理操作系统、应用程序和数据。大多数服务都托管在用户远程访问的虚拟机(VM)中。这种模型比本地部署更灵活和可扩展,但管理操作系统、应用程序和数据架构仍需要一定程度的IT专业知识。
平台即服务(PaaS)
云服务提供商为开发人员提供一个平台,用于构建、测试和部署应用程序和数据库,以及底层基础设施(类似于IaaS)。它还包括开发工具、数据库管理系统和业务智能服务。云服务提供商控制运行时、中间件和操作系统环境,没有虚拟机。这使开发人员能够专注于编码和管理应用程序,而无需担心管理平台和底层基础设施。这种模型比IaaS更抽象和易于使用,但在灵活性和定制性方面受到限制。
软件即服务(SaaS)
云服务提供商托管和完全管理软件和基础设施;客户通过互联网访问软件,而无需自行管理任何硬件或软件。这是最简单、最易于使用的模型,但在定制和控制方面可能受到限制。一些云服务提供商提供的数据架构工具类似于"SaaS":即它们不像Salesforce等真正的SaaS工具那样完全受到管理,只需要一些轻微的应用程序管理。
使用任何一种云服务模型,您都可以获得您使用的数据库产品的最新版本。例如,Azure的云数据库SQL Database是一个名为SQL Server 2022的本地数据库产品的较新版本。把SQL Database视为SQL Server 2022+。每隔几周会添加新功能,您可以选择使用或不使用。每隔几年,这些新功能会被收集起来,并添加到SQL Server的盒装版本中,但是您可以立即通过SQL Database获得它们。当进行升级时,您的代码不会出现故障。
所有的云服务提供商都提供内置的高级威胁检测,使用监控来检测可能表明未经常规的访问或利用数据库的异常活动;评估可帮助您发现、跟踪和纠正潜在的数据库漏洞;以及用于发现、分类、标记和报告数据库中敏感数据的高级功能。
总的来说,正如图16-1所示,这四种模型代表了对IT基础设施和软件堆栈的不同抽象级别和控制程度。本地部署提供了完全的控制,但需要大量的投资和专业知识,而IaaS、PaaS和SaaS提供了不同程度的抽象化和易用性,但牺牲了控制和定制性。
您选择的服务模型将取决于您组织的需求和目标。然而,就我个人而言,我倾向于在可能的情况下选择PaaS作为数据仓库的服务模型,原因有几个。首先,您无需处理虚拟机(VM)。它存在于某个地方并托管数据库,但您无需远程登录服务器或以任何方式管理它------您可以通过CSP门户或第三方工具完成所有操作。您也不需要负责打补丁或升级:大多数CSP数据库可以无需停机即可打补丁。您可以立即获得数据库备份,无需再进行设置和监控。
最后,PaaS使灾难恢复(DR)变得简单得多。大多数IaaS DR解决方案设置和监控起来很麻烦,但是对于PaaS,您基本上只需点击您希望DR数据库驻留在的国家/地区。CSP会负责设置并保持其正常运行。
主要云服务提供商
三大主要的云服务提供商,微软Azure、亚马逊网络服务(AWS)和谷歌云平台(GCP),占据了大部分市场份额(据估计在2023年第二季度为65%)。要获取有关每个提供商的最新详细信息,请访问它们各自的网站。表16-1比较了它们的主要特点,为您提供了全面的概述。
这三大主要云服务提供商各有其独特优势,选择其中之一往往取决于您的具体需求和现有基础设施。一个深度融入微软生态系统的企业可能会倾向于选择Azure,一个专注于高级数据处理的企业可能会选择GCP,而一个需要广泛服务范围的企业可能会偏向于AWS。最终,决策涉及平衡技术需求、成本以及业务的战略方向。
多云解决方案
许多组织发现自己在考虑采用三大主要云服务提供商之一或同时使用多家服务之间权衡取舍,后者通常被称为多云方法。一些公司觉得依赖单一云服务提供商就像是"把鸡蛋都放在一个篮子里",或者担心云服务提供商可能会成为他们业务的竞争对手。(例如,当亚马逊收购全食超市时,成为其他超市企业的竞争对手。)
这种方法确实有一些重大优势,主要是因为它充分利用了每个云服务提供商的优势和劣势。如果一个云服务提供商的延迟较低,另一个的可用性或灾难恢复能力较好,同时使用两者可能提高组织满足其SLA的能力。您还可以对成本、容量以及各种功能和产品进行类似的比较;如果一个云服务提供商没有您想要的所有功能,您可以借助另一个来弥补不足。然而,这与过去相比已不那么相关;如今,三大云服务提供商的服务提供几乎相似,几乎没有独特的功能或产品。
数据主权也是一个因素。并非所有云服务提供商都拥有相同的云区域,这在监管合规方面非常重要。例如,如果您在Azure中使用MongoDB,但Azure在台湾没有区域,您的台湾业务就可以在AWS中使用MongoDB。
假设一个名为TechTreasures Inc.的虚构全球电子商务巨头。TechTreasures总部位于美国,具体位于佛罗里达州庞特维德拉,但在北美、欧洲和亚洲等地区都有业务。
为了确保最佳性能、可靠性和符合区域数据法规的要求,TechTreasures采用了多云方法。它利用微软Azure的北美业务,因为Azure在该地区拥有强大的低延迟网络和数据中心。在欧洲,它利用了GCP的高级数据分析功能和在欧洲云区域的强大影响力。对于其亚洲业务,TechTreasures依赖于AWS,在亚洲关键市场(包括台湾)提供云区域。
这种多云策略使得TechTreasures能够为全球客户提供快速可靠的服务,同时确保符合数据主权法规的要求。这是一种战略选择,使企业能够充分利用每个主要云服务提供商的独特优势,优化业务运营。
但是,多云也存在许多缺点。由于这些云并非设计用于相互协作,因此来回移动数据和计算可能会很慢且笨拙。互操作性也是一个问题;来自一个云服务提供商的产品不总是与来自不同云服务提供商的产品兼容。将数据和应用程序从一个云服务提供商迁移到另一个云服务提供商并启动另一个产品可能会非常昂贵,特别是如果您必须重新设计应用程序以支持多个云。如果您将数据从其云转移到竞争对手的云,云服务提供商还会收取出站费用,而且他们不会让您轻松迁移到另一个云。如果您投资了较大的互联网管道,如Azure的ExpressRoute,那么您将需要在任何其他使用的云服务提供商中进行类似的投资。此外,将数据存储在多个云中会增加其面临安全威胁的风险。
如果您希望轻松从一个云迁移到另一个云,您将不得不使用IaaS服务模型而不是PaaS,这会消耗掉每个云提供商提供的许多高价值服务------这是一个巨大的机会成本。
就人员而言,您将需要聘请和/或培训您的人员了解两个或更多云,这将大大增加成本。管理额外的云服务;处理安全问题;制定政策、标准和程序也需要更多的人力和技能。您还必须获得不同类型的安全才能让它们一起工作,并且您将有两个地方可以添加、删除或更新用户;两个地方可以监视;和两套账单,这增加了显著的行政复杂性(和成本)。
最后,拥有两个云服务提供商不太可能使您免受故障的影响。云服务提供商专门设计了他们的网络,以确保一个地区的故障不会影响其他地区。您的灾难恢复解决方案应该是将其故障转移到同一CSP内的另一个地区,而不是转移到另一个CSP。
许多人认为采用多云方法会使云服务提供商处于竞争状态,从而可以谈判获得更好的交易。然而,这主要是一个谬论。对于企业许可协议(ELAs),云服务提供商根据您在其云上的消耗量提供更高的折扣------您使用的越多,折扣越大。1当您加入基于层次的定价和持续使用折扣时,您可能会通过仅选择一个CSP来节省更多。然而,一些公司会威胁要跳到另一个CSP以控制其定价。如果您的公司是一家大型企业,选择一个CSP还可以获得合作伙伴关系的好处。例如,微软与安永合作,在跨行业的150亿美元增长机会和技术创新方面推动合作。
我不认为多云方法会得到更广泛的采用。我认为,随着时间的推移,大多数公司将选择一个CSP并坚持下去,以深入了解并充分利用其服务、PaaS和SaaS以及生态系统。如果CSPs提供的不同服务对工作负载有益,一些非常大型的公司将选择几个云。如果公司足够大,可以投入时间和人员来深入研究两者,并利用每个提供商的PaaS服务。我们现在从云服务模型讨论转向软件框架,从建立数据架构的基础转向探索利用此基础的工具。在接下来的部分中,我们将深入探讨利用云基础架构释放数据的全部潜力的关键软件框架。
软件框架
在数据架构的世界中,你选择的软件框架可以决定你处理、分析和从数据中获取洞察力的效果。这些框架是驱动数据操作的引擎,让你能够提取有价值的信息并推动基于数据的决策。在本节中,我们将踏入软件框架的领域,探索三个重要的参与者:Hadoop、Databricks和Snowflake。每个框架都带来了独特的优势,了解它们的能力对于构建满足你特定需求和目标的数据架构至关重要。
Hadoop
Hadoop是一个由Apache基金会于2005年创建的开源软件框架,旨在利用分布式计算的强大能力。各种工具和库扩展了Hadoop的功能,使其成为处理海量数据并寻求成本效益可扩展性的组织的热门选择。
在其核心,Hadoop由两个主要组件组成。首先,Hadoop分布式文件系统(HDFS)能够通过将数据分割成较小的块并将其分布在多个节点和计算机集群上有效地存储和处理大数据工作负载,如图16-2所示。这使得高容错性和诸如批处理、数据集成和分析等任务成为可能。HDFS实现了对数据的高吞吐访问,并在硬件故障时提供可靠性。
其次,MapReduce框架是用于在集群中并行处理和分析大型数据集的编程模型,再次通过将工作负载分解为较小的任务并将其分布在集群中的多个节点上来实现。它将大型复杂计算分解为多个任务,并将这些任务分配给各个工作节点,这些节点协调并整合结果。MapReduce框架自动处理并行化、容错性和数据分布。一个MapReduce程序由一个Map()过程组成,用于过滤和排序(例如,按名字将学生排序到队列中,每个名字一个队列),以及一个Reduce()过程,用于汇总数据(例如,计算每个队列中学生的数量,产生名字频率)。MapReduce库已经用多种编程语言(通常是Java)编写,具有不同程度的优化。
Hadoop提供了几个优点,使其成为处理大数据的热门选择:
可扩展性
Hadoop提供了一个可扩展的架构,可以处理大量数据。通过向集群添加更多的通用硬件,可以轻松扩展存储和处理能力,使其具有成本效益和灵活性。
分布式计算
Hadoop将数据和处理任务分布在机器集群中,实现并行处理。将工作分配给多个节点可以加快对大型数据集的处理速度。
容错性
Hadoop在集群中的多个节点之间复制数据,确保数据在硬件故障时仍然持续可用。如果一个节点失败,Hadoop会自动将任务重定向到其他可用节点,确保处理不间断。
成本效益的存储
HDFS允许你在标准、价格实惠的硬件上存储大量数据,而不是昂贵、专门的存储系统。
数据就近性
Hadoop通过将计算移动到数据存储的地方,而不是通过网络传输数据,优化了数据处理,减少了网络开销,提高了整体效率。
灵活性和兼容性
Hadoop与各种数据格式兼容,并且可以处理结构化、半结构化和非结构化数据。它支持多种编程语言和工具,允许开发人员使用他们喜欢的语言,并将不同的组件集成到他们的数据流程中。
工具生态系统
Hadoop拥有丰富的工具和框架生态系统,扩展了其功能,并提供了更高级别的抽象、数据处理语言和分析。其中包括:
-
YARN,用于资源管理和作业调度
-
Hive,用于数据仓库
-
Pig,用于数据分析
-
HBase,一个NoSQL数据库
-
Spark,用于内存处理
-
Presto,用于分布式SQL
Hadoop供应商销售的平台将多个开源软件产品集成在一起,省去了你自己集成和测试各种组件的时间和精力。
社区支持
Hadoop拥有庞大而活跃的开源社区,为其开发、改进和支持做出了贡献,并为用户提供了丰富的资源、文档和专业知识。
Hadoop的潜在缺点包括:
复杂性
Hadoop具有陡峭的学习曲线,设置和管理可能很复杂。它需要分布式系统方面的专业知识和专业技能,这对于没有先前经验或专门资源的组织可能构成挑战。
延迟 MapReduce是Hadoop的核心处理框架,基于批处理,会引入延迟,因此可能不适合实时或交互式数据处理场景。Hadoop最适合大规模数据处理任务,例如批量分析和处理海量数据集。如果你需要即时或准实时的见解,可能更适合使用替代方案或框架,如Apache Kafka或Apache Flink。
硬件需求
Hadoop的分布式架构需要一组机器集群才能有效运行。设置和维护这样一个集群,包括硬件和网络基础设施,可能涉及显著的成本和复杂性。
数据管理开销
虽然Hadoop的HDFS提供了容错和复制功能,但在节点之间复制数据会消耗存储空间。这增加了额外的数据存储开销。
复杂的生态系统
尽管Hadoop的生态系统丰富而广泛,但也很复杂,因此管理和集成其组件可能具有挑战性。它需要了解每个工具的功能和兼容性,并维护工具的配置和依赖关系。
数据安全和治理
Hadoop的分布式特性和数据复制可能会带来数据安全、隐私和治理方面的独特挑战。与传统的数据存储系统不同,Hadoop的分布式特性要求组织采取超出标准安全实践的专门安全措施和访问控制,以满足其复杂性。这些措施对于确保数据保护并保持符合Hadoop特定要求和最佳实践至关重要。
在2010年代初期,Hadoop获得了广泛的应用,但随着大数据领域和云计算的发展,引入了诸如无服务器计算、云数据仓库和数据流平台等技术,Hadoop的使用逐渐减少。如今,云基础设施可以取代Hadoop集群,云对象存储可以取代HDFS。其核心原则,如分布式存储和处理,仍然具有重要意义,但其具体的组件和工具已经得到了不同程度的应用。例如,像Apache Spark这样的技术作为MapReduce的替代方案或补充方案而受到欢迎。
Databricks
Databricks是一个基于云的平台,用于在Apache Spark中运行工作负载,后者是一个开源的数据分析处理引擎。Spark最初是在2009年由加州大学伯克利分校的AMPLab开发出来的,旨在解决MapReduce的局限性。它被设计为更快、更易于使用,并且可以处理批处理和实时数据流。
Spark的一些原始创作者于2013年成立了Databricks。Databricks一直致力于商业化Spark,提供统一的数据分析平台,这是一个完全托管的服务,为大数据分析提供了一个综合、简化的平台,集成了数据科学、工程和业务。它旨在使企业更容易地使用Spark,而无需担心设置和维护自己的基础设施,从而使高级分析和机器学习能够被更广泛的用户所使用。
自成立以来,Databricks一直是Apache Spark的重要贡献者,通过Project Tungsten来提高其处理速度,这是一系列旨在利用现代CPU架构提高效率的优化措施。它还开发了一个优化的自动缩放系统,根据计算需求动态调整分配给作业的机器数量,提高了成本效率和性能。
Databricks推出了各种库来扩展Spark的功能,例如MLlib(用于机器学习)、GraphX(用于图计算)和Spark Streaming(用于实时数据)。它还在培训和支持Spark社区方面发挥了至关重要的作用,这加速了其采用,并使用户更好地利用了Spark的功能。
Databricks还专注于使Spark更易于使用,引入了Python、Java和Scala的高级API,使编写Spark应用程序变得更加简单。它还开发了Databricks笔记本,这是交互式环境,数据科学家和工程师可以在其中编写Spark代码、可视化结果和构建模型。该平台使数据科学家和数据工程师通过统一数据科学、数据工程和业务分析更有效地共同工作。
为了解决数据湖的局限性并提高可靠性和数据质量,Databricks还推出了Delta Lake(请参见第12章),这是一个运行在现有数据湖之上的开源存储层。它通过ACID事务、可扩展的元数据处理和统一的流和批处理数据处理,增强了Spark的大数据能力。Delta Lake解决了传统数据湖在数据质量、可靠性和性能方面的挑战。Databricks于2019年将Data Lake开源,将该项目贡献给Linux基金会,以允许更广泛的社区进行贡献。如今,Delta Lake已被广泛采用。
在2020年,Databricks推出了一种新颖的数据架构,即数据湖仓库(也涉及到第12章)。这一创新代表了数据管理范式的重大转变。组织不再被迫在数据湖和数据仓库之间选择,而是可以选择混合架构,将数据湖的可扩展性和成本效益与数据仓库的结构稳固性、可靠性和性能相结合。
在Databricks看来,现代数据架构应该是开放的、协作的,并且能够处理所有类型的数据和高级分析用例。因此,该公司支持允许企业随着时间的推移而扩展的架构。
借助其统一的数据分析平台和Delta Lake等工具,Databricks可以为数据网格中的每个数据产品或领域提供基础设施(请参见第13和第14章)。其平台可以处理各种数据类型,并支持批处理和实时数据处理,使其足以满足不同数据领域的需求。Delta Lake的关键特性,如ACID事务、架构强制执行和版本控制,可以确保每个数据领域内的数据质量和一致性。
此外,它提供了"时间旅行"的能力(访问以前的数据版本)。在数据网格中,这可能特别有用,因为团队可能需要审核或回滚其各自领域的更改。Databricks的协作环境还可以使数据网格内的跨功能团队更有效地合作,符合促进面向领域的、分散式团队的原则。
Snowflake
Snowflake是一个完全托管的基于云的数据仓库解决方案,用于存储、组织和分析大量数据,并且独特之处在于除了提供传统的数据仓库功能外,还可以充当数据湖。
该公司成立于2012年,旨在解决传统数据仓库解决方案的局限性。其创始人开发了一种独特的架构,将计算和存储分离,可以根据需求独立和自动地扩展数据分析和工作负载。该平台于2014年推出,在处理各种数据类型和存储和处理CSV、JSON、Parquet和Avro等各种数据格式方面获得了认可。其基于云的方法和架构吸引了各行各业的广泛客户。它提供按使用量付费的定价、强大的安全性、灵活性和可靠性。
您可以将各种格式的数据直接加载到Snowflake中,就像使用数据湖一样,无需在摄取之前转换或预处理数据。Snowflake通过自动推断摄取数据的模式进一步简化了这一过程。一旦数据加载完成,Snowflake提供了一个结构化和可扩展的环境,用于组织和编目数据,允许用户创建表、定义模式并应用元数据标签。这确保了数据的有效组织和易于访问。
使用Snowflake作为数据湖提供了统一数据平台的好处,消除了需要单独的数据湖基础设施并降低了复杂性。它提供了一个可扩展且高性能的环境,用于存储、管理和分析各种数据类型,使其成为那些希望在统一生态系统中利用数据湖功能的组织的理想选择。
Snowflake的优势在于其高度优化的数据仓库功能以及其平台内高效的查询和分析。然而,如果您需要特定的计算或专门的处理,其他计算引擎可能更适合,此时从Snowflake导出数据并利用这些引擎是常见的做法。虽然Snowflake提供了无缝的数据导出功能,但它不直接支持在其平台内运行外部计算引擎或工具。
Snowflake与数据网格原则(见第13章)很好地契合。该公司认识到赋予领域专家和团队对其数据的所有权的重要性。通过Snowflake,不同的业务部门或领域可以拥有单独的账户或虚拟仓库,使它们能够管理和控制自己的数据资产。这种分散化的方法促进了敏捷性和自治性,允许领域团队做出数据驱动的决策,并对其数据的质量和可用性负责。
Snowflake强大的数据管理功能,包括模式管理、元数据标记和编目,让您将数据视为可供组织内其他团队访问和使用的有价值资产,促进了数据产品思维。Snowflake还与数据网格概念的可扩展性和弹性方面相契合:其基于云的架构允许计算资源的独立扩展,帮助团队适应不断变化的需求,并有效地处理数据处理和分析。总之,Snowflake使组织能够采用数据网格方法,促进其数据生态系统中的协作、自治和敏捷性。
总结
你对数据架构技术的决策将对你的数据计划的成功起到关键作用。本章引导您了解了为数据基础架构奠定基础的基本选择。
我们探讨了三种基本的软件框架:Hadoop、Databricks 和 Snowflake,每种框架都提供了独特的数据处理和分析方法。无论您选择开源解决方案,还是采用云服务提供商的产品,或者两者兼而有之,都要考虑到您的数据需求规模和组织的敏捷性需求。
此外,请记住,数据技术的世界并不是二元的。它延伸到云服务模型的领域,在那里主要提供商提供各种各样的服务,多云解决方案为您的决策增加了一层复杂性。
随着您在数据架构之旅中的不断前行,请记住本章中所做的选择并不是孤立的;它们是相互关联的,将塑造您数据环境的格局。这不仅仅是选择开源或专有解决方案;而是要打造一种与您组织的目标和挑战相契合的技术和谐融合。有了这些考虑,您就能够很好地驾驭不断发展的数据架构技术世界。
祝您愉快地进行解读!