译者 | 陈峻
审校 | 孙淑娟
一、云数据仓库、数据湖和湖仓一体之间的区别
1.数据仓库
作为一种分析类中央存储库,数据仓库可用于存储已结构化、且已过滤的数据。而作为数据仓库典型用户的数据分析师,他们通常拥有着丰富的SQL知识、以及数据处理能力。他们通过对仓库里的数据进行优化和转换,可实现快速地访问、查询和分析,并在此基础上获取洞见,并构建出仪表板和数据报告,进而推动业务成果的转换。
2.数据湖
2000年初,最初被Yahoo和Google等大型互联网公司采用的数据湖,虽然与数据仓库的数据收集与存储功能类似,但是,它旨在处理大量原始的、非结构化的、以及半结构化的大数据。因此,与仓库相比,数据湖通常可以容纳更多的数据,并能够处理更多的用例。
在大多数情况下,各种未经处理的原始数据,会被直接加载到数据湖中,因此它需要具有专业知识的数据科学家,对数据进行后续操作和转换。正是由于数据湖非常擅长处理各种实时摄取的数据流,因此它的一个典型用例是:以批处理的方式,启用自助服务式(self-service)的ELT,并对数据进行自动化的处理、调度、构建、以及维护各个数据管道的复杂性。
3.湖仓一体(Data Lakehouse)
不同于简单的数据仓库和数据湖架构,湖仓一体通常被认为是一种高度重视开放式的数据管理新架构。它的目标是通过将上述两者组合到一个平台上,直接对数据湖本身运行分析,以消除多个查询引擎的繁琐。
二、什么是Snowflake?
作为一种基于云端的数据仓库,Snowflake专为在AWS、Microsoft Azure和Google Cloud Platform(GCP)等主流云服务提供商上运行的数据业务所构建。它是一种软件即服务(SaaS)的解决方案,能够使企业将收集到数据整合到集中位置,以便进行分析。
Snowflake被认为是云数据仓库行业中最大的公司之一。它提供了为支持商业智能用例而构建的自助式服务平台,并且允许用户利用SQL来查询数据,并创建可以推动业务决策的仪表板和报告。
三、什么是Databricks?
与Snowflake类似,Databricks也是一个基于云端的数据平台。但是它属于数据湖类型,而非数据仓库。当然,Databricks如今已扩展到了湖仓一体化的范畴。如果说Snowflake专注于分析和报告的话,那么Databricks更多重视的是机器学习、数据科学、以及数据流使用案例。由于能够支持多种开发语言,因此Databricks更适合于数据工程师和数据科学家。
作为一个基于Apache Spark的大数据平台,Databricks主要被用于存储大量未经处理的原始数据。简单而言,它围绕着Apache Spark的分布式计算框架,构建了数据管理层,并消除了人员管理和维护基础设施的负担。
四、架构
1.Snowflake
Snowflake是一种基于ANSI SQL的无服务器解决方案,并具有完全分离的存储和计算处理层。Snowflake利用大规模的并行处理(Massively Parallel Processing,MPP)来处理查询,每个单独的虚拟仓库(即计算集群)都在本地存储着整个数据集的一部分。Snowflake使用微分区(Micro Partitions)的方式,在内部将数据组织并优化为已压缩的列格式,以便它们被保存到云端存储处。
Snowflake能够以自动化的方式,管理文件大小、压缩、结构、元数据、统计信息、以及其他用户不可见、且只能通过SQL查询和访问到的数据对象。Snowflake中的所有处理,都使用被称为虚拟仓库的计算集群来完成。这些集群往往由多个MPP节点所组成。
作为一种SaaS解决方案,Snowflake在后端管理着大量来自用户请求、基础设施、元数据、身份验证、查询解析、访问控制、以及优化等方面的内容。由于能够跑在AWS、GCP和Azure三大云平台上,因此Snowflake的仓库技术能够方便用户非常便捷地使用SQL进行快速查询。
2.Databricks
同属于SaaS方案且能够跑在AWS、GCP和Azure的Databricks,却在架构上完全不同。它源于Spark,是一种围绕着单个节点或集群所构建的、可以被部署在云端的多语言引擎。Databricks可以运行在控制层面和数据层面之外。其中,数据层面包括了待处理的所有数据,而控制层面包括了由Databricks管理的所有后端服务。与Snowflake类似,Databricks也是无服务器的,因此能够支持近乎无限的并发请求。
总的说来,Databricks架构包含了如下核心组件:
(1)Databricks的Delta Lake
Delta Lake是Databricks的数据仓库版本。它作为一个额外的存储系统,运行在传统的数据湖之上。Delta Lake的核心是将现有数据湖上的流式和批处理统一起来,充当Spark计算和云存储之间的中间地带。Delta Lake架构包含如下三种类型的数据表:
- 青铜表:原始数据
- 白银表:稍做“提纯”的数据,但尚未准备好被使用
- 黄金表:已提纯且可以使用的数据
Delta在各张表中所保存的所有数据,都会以parquet文件形式,被保存在云存储中。
(2)Databricks的Delta Engine
Delta Engine是一个与Apache Spark相兼容的高性能查询引擎,可协助处理Delta Lake中的数据。它通过其改进的查询优化器,针对SQL和DataFrame的工作负载,提高了Delta Lake的整体性能。由C++编写的该优化器,被策略性地放置在了执行层和云对象存储之间,充当着缓存层和执行引擎的作用。
(3)Notebooks
Notebooks包含着可运行的代码、可视化且可描述的文本。它们可以通过基于Web的界面被访问到。借助各种Notebooks,开发者可以使用Scala、R、SQL、以及Python语言,以协作的方式构建不同的模型。
(4)MLFlow
MLflow是由Databricks创建的另一个开源平台,可用于配置机器学习的环境,并从Spark、TensorFlow、ONNX等现有库中运行测试,以实现大规模、可靠地管理机器学习和数据科学等生命周期。MLFlow具有三个核心组件,分别是:实验跟踪、模型管理和模型开发。
五、可扩展性
1.Snowflake
Snowflake具有自动扩展和自动挂起两种功能,可以在空闲和忙碌期间启停集群。虽然在Snowflake中,开发者无法任意调整节点的大小,但是可以通过单击,来自动扩展出多达10个仓库。当然,在单个表中每个队列的DML被限制为20个。
2.Databricks
Databricks也具有自动扩展的功能。也就是说,集群会根据单个查询和用户并发的实际使用情况,自动扩缩容。不过,由于Databricks主要是为数据科学家设计的,其UI较为复杂,因此用户调整起来会略显费劲。
六、安全与合规
无论是在Snowflake中,还是在Databricks中,所有静态存储的数据都会被自动加密。它们都提供了RBAC(role-based access control,基于角色的访问控制),都能够符合诸如:SOC 2 Type II、ISO 27001、HIPAA、以及GDPR等各种法规和认证。
不过,不同于Snowflake,Databricks并没有存储层,开发者需要使用的是诸如AWS S3、Azure Blob Storage、Google Cloud Storage等对象级存储。
七、数据支持
Snowflake和Databricks都支持半结构化(如:Parquet、Avro、Orc、CSV、以及JSON)和结构化的数据。Snowflake于2021年9月宣布支持非结构化的数据。而在湖仓一体方面,Databricks还可以处理任何时间类型或格式的数据,其中就包含了非结构化的数据。由于Databricks支持多种开发语言,因此它在该领域占有优势。它的Spark引擎更适合于处理数据流、ML、AI、以及与数据科学工作相关的负载。而由于Snowflake最初是作为一种数据分析工具被设计的,因此其核心能力源于SQL。显然,SQL以处理数据转换见长。当然,Snowflake最近也宣布了通过引入Snowpark来支持Python、Java和Scala等语言。
八、管理
Databricks已经消除了大量与管理、操作Spark相关的基础设施工作,但是用户仍然需要通过大量的手动输入,来调整集群大小、更新配置、以及切换计算选项。可见,Databricks的门槛较高,学习曲线较为陡峭。
而基于SQL的Snowflake更为简单,用户只需单击几下鼠标,即可开始使用。同时,Snowflake还提供了针对对象、角色、用户、权限、以及访问等方面的精细控制。而Databricks除了执行常规作业之外,也允许用户实施保护日志、控制作业属性、以及所有权。
九、数据保护
1.Snowflake
Snowflake有两个独特的功能--时间旅行(Time Travel)和故障安全(Fail-safe)。其中,时间旅行功能是在数据更新之前,保留数据的状态。一般而言,时间旅行仅限于1天之内,但是企业客户则可以指定最多90天的时间跨度。该功能可被应用到数据表、模式和数据库上。而故障安全是指,在时间旅行保留期结束后的7天期限内,可保护和恢复历史数据。
2.Databricks
Databricks的Delta Lake也具有时间旅行的功能。其工作方式与Snowflake非常相似。在Delta Lake中存储的数据会被自动实施版本控制,以便用户按需访问或使用该数据的历史版本。Databricks的主要优势之一在于,由于它运行在基于对象级存储的Spark上,因此其本身无需存储任何数据,也就省去了各种本地用例。
十、售价
1.Snowflake
Snowflake采取的是基于个人仓库使用情况的计费模式。由于各种仓库有着X-Small、Small、Medium、Large、X-Large等多种尺寸,因此它们在规模成本和服务器集群数量上有着很大的差异。X-small类型的Snowflake仓库的基本定价,从大约每秒0.0003积分或每小时1积分开始。而Snowflake标准版上的X-Small仓库的按需使用模式,则是从每积分2美元起售。
随着仓库规模的使用量递增,成本和积分的消耗也会增加。对此,Snowflake提供了几个版本,来根据使用情况让用户预购积分。通常情况下,预购容量的模式会比按需模式的费率更低。按需存储的售价为每月40美元,前端客户则为每TB 23美元。当然,积分的成本也会因业务层级的不同,而有所差别。
2.Databricks
与Snowflake相比,Databricks提供的存储要便宜得多。毕竟所有内容都被存储在客户自己的对象级存储环境中。由于其中的部分数据可能不需要被频繁访问,因此我们可以对它们进行高度优化。例如,S3中的存储起售价为每TB 23美元。而且根据数据规模和访问频率的需求,此类费用可能会大幅降低。
Databricks是基于DBU(Databricks处理单元)定价的,其中包括经典、高级和企业三种商业价格等级。价格区间会从每个DBU 0.07美元到0.65美元不等,具体取决于DBU的大小。
十一、云基础设施
作为托管式SaaS服务,Snowflake和Databricks无论在启动,还是在运行后端基础架构等方面都处理得不错。而且,这两种解决方案都可以在多个不同的云环境中运行。当然,基于Spark的Databricks,需要更多的手动输入和微调,才能充分发挥其潜能。
十二、性能
由于Snowflake和Databricks支持的用例各不相同,因此,我们很难简单断言哪个性能更好。值得注意的是,Snowflake在数据访问时,优化了所有的存储,更适合交互式查询。
十三、Databricks和Snowflake的主要区别
Snowflake在处理生产级商业智能负载方面非常强大,这些负载往往需要以一致性的方法,运行或生成报告和仪表板。因此,Snowflake可以取代传统的数据仓库,并提供更快的性能。
不过,基于SQL的Snowflake并没有针对处理大量数据(特别是流式用例)进行优化。它以简单的方式,协助数据分析师将数据民主化(democratize),进而扩展并处理更多的负载。当然,其核心用例仍然是数据仓库。
作为基于Spark的解决方案,Databricks的湖仓一体平台支持更广泛的功能需求,特别是:ELT、数据科学、以及机器学习等方面。Databricks允许开发者将数据保存在自己的托管对象存储中,并提供了托管式Delta Lake(数据处理引擎)和Delta Engine(SQL查询引擎)良好使用体验。
通过Databricks的Delta Lake和Delta Engine平台,开发者虽然基本可以实现由Snowflake提供的所有功能,但是鉴于它是一个复杂的工具,开发者仍然需要花时间去优化和构建功能齐全的湖仓一体化。同时,Databricks也会比Snowflake更需要用户投入维护时间和经历。
总而言之,Databricks和Snowflake数据平台都可以支持高性能的SQL查询与数据处理。其中,Databricks提供了所有部件和说明手册,来设置一整套功能齐全的湖仓一体化,因此更善于处理数据工程、ETL/ELT、数据科学和数据流负载;而Snowflake则通过各种预构建的工具,处理生产环境中的数据,以供后期分析使用。
原文链接:https://dzone.com/articles/databricks-vs-snowflake-the-definitive-guide
译者介绍
陈峻 (Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验;持续以博文、专题和译文等形式,分享前沿技术与新知;经常以线上、线下等方式,开展信息安全类培训与授课。