作者:尚卓燃(PsiACE)
澳门科技大学在读硕士,Databend 研发工程师实习生
Apache OpenDAL(Incubating) Committer
github.com/psiace/
内容提要:本文将会介绍天空核算的布景,以及 Databend 是怎么从数据存储、数据办理、数据同享等视角考虑跨云数据存储与拜访的。
布景
云核算年代的初步能够追溯到 2006 年,当时 AWS 开始供给 S3 和 EC2 服务。2013 年,云原生概念刚刚被提出,乃至还没有一个完整的愿景。时间来到 2015 年 CNCF 建立,接下来的五年中,这一概念变得越来越流行,而且成为技能人绕不开的论题。
依据 CNCF 对云原生的界说:云原生技能使安排能够在公共、私有和混合云这类现代、动态的环境中构建和运行可扩展的应用程序。典型示例包含:容器、服务网格、微服务、不变基础设施和声明式 API 。
但是,无论是公有云仍是私有云、无论是云核算仍是云服务,在天空中都现已存在太多不同类型的“云”。每个“云”都拥有自己共同的 API 和生态系统,而且彼此之间缺少互操作性,能够兼容的地方也是屈指可数。云现已成为事实上的孤岛。这个孤岛不仅仅是指公有云和私有云之间的隔阂,还包含了不同公有云之间、不同私有云之间、以及公有云和私有云之间的隔阂。这种孤岛现象不仅给用户带来了许多麻烦,也约束了云核算的开展。
2021 年 RISELab 宣布了题为 The Sky Above The Clouds 的论文,讨论关于天空核算的未来。天空核算将云原生的思想进一步扩展,然后包括公有云、私有云和边缘设备。其方针是完成一种一致的 API 和生态系统,使得不同云之间能够无缝地协作和交互。这样一来,用户就能够在不同的云之间自在地搬迁应用程序和数据,而不用忧虑兼容性和搬迁本钱的问题。一起,天空核算还能够供给更高效、更安全、更牢靠的核算服务,然后满意用户关于云核算的不断增加的需求。总体上讲,天空核算致力于答应应用跨多个云厂商运行,完成多云之间的互操作性。
(上图引自论文,展现不同类型的多云与天空的差异)
The Databend Way
跨云的要害
Databend 能够满意用户在不同的云之间自在地拜访数据并进行查询,而不用忧虑兼容性和搬迁本钱的问题。一起,Databend 还能够供给更高效、更安全、更牢靠的核算服务,然后满意用户关于云核算的不断增加的需求。从这个视点来看,Databend 现已初步形成了一套天空核算的解决方案。那么,对 Databend 而言,跨云的要害究竟落在哪里呢?
(上图所示为 Databend Cloud 架构示意图)
Databend 选用存算别离的架构,并彻底面向云方针存储进行规划决策。得益于存储与核算别离、存储与状态别离,Databend 能够完成对资源的精细化操控,轻松布置与扩展 Query 和 Meta 节点 ,并支撑多种不同的核算场景和存储场景,而无需考虑跨云数据办理与移动的问题。
Query 节点和 Meta 节点自身都是轻量化的服务,而且关于布置环境没有严格的依赖。但数据的存储和拜访办理就不相同,咱们需要考虑不同云服务之间的 API 兼容性、以及怎么与云服务自身的安全机制交互然后供给更安全的拜访操控机制。关于 Databend 而言,跨云,或者说完成天空核算的要害,就落在数据的办理与拜访之上。
(OpenDAL 能够将数据拜拜访题从 M\N 转化为 M+N)
为了解决这一问题,Databend 抽象出一套一致的数据拜访层(OpenDAL,现在是 Apache 软件基金会旗下的孵化项目),然后屏蔽了不同云服务之间的 API 兼容性问题。在接下来的部分,咱们将会从不同的视角来观察 Databend 的无痛数据拜访体会,体会真实彻底云原生的天空核算的魅力。
数据存储
Databend 存储后端的细节隐藏在简略的装备之下,经过修正装备文件就能够轻松地在十数种存储服务之间切换。例如,假如你想运用 AWS S3,只需要指定类型为 s3
即可,Databend 会主动测验运用 IAM 来进行认证。假如你想运用其他与 S3 兼容的方针存储服务,也能够经过 endpoint_url
等设置来调整。
[storage]
type = "s3"
[storage.s3]
bucket = "databend"
当然,仅支撑 S3 兼容的方针存储服务还不够。Databend 经过 OpenDAL 完成了 Google Cloud Storage、Azure Blob、Aliyun OSS、Huawei OBS 和 HDFS 等服务的原生存储后端支撑。 这意味着 Databend 能够充分使用各种供货商供给的 API,为用户带来更优异的体会。例如,Aliyun OSS 的原生支撑使得 Databend 能够经过 Aliyun RAM 对用户进行认证和授权,无需设置静态密钥,然后大大提高安全性并下降运维担负。
(上图选自阿里云官网,拜访操控场景与才能)
此外,原生支撑还能够防止出现非预期行为,并与服务供货商供给更严密的集成。尽管各大厂商都供给了 S3 兼容 API,但它们之间存在奇妙差异,在出现非预期行为时或许会导致服务性能下降或读写数据功用异常。Google Cloud Storage 供给了 S3 兼容的 XML API,但却没有支撑批量删去方针的功用。这导致用户在调用该接口时遇到意外错误。而 Google Cloud Storage 的原生支撑使 Databend 不用忧虑 GCS 对 S3 的兼容完成问题对用户业务形成影响。
总归,Databend 经过为各个服务完成原生支撑来为用户供给高效牢靠的数据剖析服务。
数据办理
前面讲过了存储后端的跨云支撑,现在让咱们将目光聚焦到数据的办理。更具体来说,数据在 Databend 作业流中的流入与流出。
COPY INTO,数据载入
要讲数据办理,就不得不讨论数据从哪里来。曩昔或许还需要考虑是否需要搬迁存储服务,但现在,你能够从数十种 Databend 支撑或兼容的存储服务中加载数据,一切都显得那么天然。
COPY INTO
句子是窥探 Databend 跨云才能的一个窗口,下面的示例展现了怎么从 Azure Blob 加载数据到 Databend 之中。
COPY INTO mytable
FROM 'azblob://mybucket/data.csv'
CONNECTION = (
ENDPOINT_URL = 'https://<account_name>.blob.core.windows.net'
ACCOUNT_NAME = '<account_name>'
ACCOUNT_KEY = '<account_key>'
)
FILE_FORMAT = (type = CSV);
当然,不止是 Azure Blob ,Databend 支撑的其他云方针存储服务、IPFS 以及能够经由 HTTPS 拜访的文件都能够作为 External location ,经过 COPY INTO
句子加载进来。
Databend 的
COPY INTO
句子还支撑进行基本的转换服务,能够减轻 ETL 作业的担负。
Stage ,数据暂存区
刚刚说到 External location ,事实上,要加载到 Databend 中的数据文件还能够在 Stage 中暂存。Databend 相同支撑 Internal stage 和 Named external stage 。
数据文件能够经由 PUT_INTO_STAGE API
上传到 Internal Stage,由 Databend 交给当时装备的存储后端进行一致办理。而 Named external stage 则能够用于挂载其他 Databend 支撑的多种存储服务之中的 bucket 。
下面的比如展现了怎么在 Databend 中创建一个名为 whdfs 的 Stage ,经过 WebHDFS 协议将 HDFS 中 data-files 目录下的数据文件导入 Databend 。
bendsql> CREATE STAGE IF NOT EXISTS whdfs URL='webhdfs://127.0.0.1:9870/data-files/' CONNECTION=(HTTPS='false');
Query OK, 0 rows affected (0.01 sec)
bendsql> COPY INTO books FROM @whdfs FILES=('books.csv') file_format=(type=CSV field_delimiter=',' record_delimiter='\n' skip_header=0);
Query OK, 2 rows affected (1.83 sec)
假如你并不想直接导入数据,也能够测验
SELECT FROM STAGE
,快速剖析位于暂存区中的数据文件。
Catalog,数据挂载
放在方针存储中的数据加载得到了解决,还有一个值得思考的问题是,假如数据原本由其他数据剖析系统所办理,该怎么办?
Databend 供给多源数据目录(Multiple Catalog)的支撑,答应挂载 Hive 、Iceberg 等外部数据目录。
下面的示例展现怎么使用装备文件挂载 Hive 数据目录。
[catalogs.hive]
type = "hive"
# hive metastore address, such as 127.0.0.1:9083
address = "<hive-metastore-address>"
除了挂载,查询也是小菜一碟 select * from hive.$db.$table limit 10;
。
当然,这一切也能够经过 CREATE CATALOG
句子轻松搞定,下面的比如展现了怎么挂载 Iceberg 数据目录。
CREATE CATALOG iceberg_ctl
TYPE=ICEBERG
CONNECTION=(
URL="s3://my_bucket/path/to/db"
AWS_KEY_ID="<access-key>"
AWS_SECRET_KEY="<secret_key>"
SESSION_TOKEN="<session_token>"
);
Multiple Catalog 相关的才能还在活跃开发迭代中,感兴趣的话能够保持重视。
再探 COPY INTO,数据导出
数据导出是数据办理中的另外一个重要论题,简略来讲,就是转储查询成果以供进一步的剖析和处理。
这一才能相同由 COPY INTO
语法供给支撑,当然,相同支撑数十种存储服务和多种文件输出格局。下面的示例展现了怎么将查询成果以 CSV 格局文件的方式导出到指定 Stage 中。
-- Unload the data from a query into a CSV file on the stage
COPY INTO @s2 FROM (SELECT name, age, id FROM test_table LIMIT 100) FILE_FORMAT = (TYPE = CSV);
这一语法相同支撑导出到 External location ,真实做到数据的自在活动。
Databend 还支撑
PRESIGN
,用来为 Stage 中的文件生成预签名的 URL ,用户能够经过 Web 浏览器或 API 恳求自在拜访该文件。
数据同享
刚才说到的 Databend 数据办理环节跨云主要是指 Databend 与外部服务之间的交互。此外,Databend 实例之间也能够经由多种云存储服务来支撑数据同享。
为了更好地满意多云环境下的数据库查询需求,Databend 规划并完成了一套 RESTful API 来支撑数据同享。
(上图所示为数据同享的作业流)
经过在装备文件中增加 share_endpoint_address
相关装备,用户能够使用预先布置好的 open-sharing
服务,经由熟悉的云存储服务同享 Databend 办理的数据库或表。
CREATE SHARE myshare;
GRANT USAGE ON DATABASE db1 TO SHARE myshare;
GRANT SELECT ON TABLE db1.table1 TO SHARE myshare;
ALTER SHARE myshare ADD TENANTS = vendor;
此刻,表 db1.table1
将对接受方租户 vendor
可见,并能够进行必要的查询。
CREATE DATABASE db2 FROM SHARE myshare;
SELECT * FROM db2.table1;
跨云的未来
上面的几个视角,只是展现 Databend 在天空核算道路上的一个小小侧影。
数据合规、隐私维护等内容相同是咱们所关怀的重要议题。
Databend 的愿景是成为未来跨云剖析的基石,让数据剖析变得更加简略、快速、快捷和智能。
总结
本文介绍了天空核算的概念和布景,以及 Databend 的跨云数据存储和拜访。
天空核算是一种将公有云、私有云和边缘设备一致起来的办法,方针是供给一种无缝的 API 和生态系统,使得用户能够在不同的云之间自在地搬迁应用程序和数据。
Databend 是一个开源的、彻底面向云架构的新式数仓,它选用存算别离的架构,并抽象出一套一致的数据拜访层(OpenDAL),然后屏蔽了不同云服务之间的 API 兼容性问题。Databend 能够满意用户在不同的云之间自在地拜访数据并进行查询,而不用忧虑兼容性和搬迁本钱的问题。一起,Databend 还能够供给更高效、更安全、更牢靠的核算服务,然后满意用户关于云核算的不断增加的需求。
欢迎布置 Databend 或者拜访 Databend Cloud ,即刻探索天空核算的无尽魅力。
关于Databend
Databend 是一款开源、弹性、低本钱,基于方针存储也能够做实时剖析的新式数仓。期待您的重视,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。
Databend Cloud:databend.cn
Databend 文档:databend.rs/
Wechat:Databend
✨GitHub:github.com/datafuselab…