Databricks Lakehouse Platform
如果无法正常显示,请先停止浏览器的去广告插件。
1. Databricks
Lakehouse Platform
Simple, Open, Collaborative
Bo Zhang (bo.zhang at databricks.com)
Software Engineer at Databricks
2. What is Databricks?
Databricks’ vision is to enable data-driven innovation
to all enterprises
3. 开源项目
Over
30 million
monthly downloads
4. 行业合作
医疗保健和生命科学 制造业和汽车行业 媒体和娱乐 金融服务
公共部门 零售和包装消费品 能源和公用事业 数字原生
5. Lakehouse
One platform to unify all your
data, analytics, and AI
workloads
6. Lakehouse
数据仓库
数据湖
流式分析
BI
数据科学
结构化,半结构化及非结构化数据
机器学习
7. 数据仓库
BI
报表
优势
▪ 便于BI和报表系统接入
数据仓库
▪ 数据管控能力强
劣势
ETL
▪ 不支持非结构化数据
▪ 专有系统,成本高
结构化数据
▪ 专有数据格式,灵活度低
8. 数据湖
优势
BI
报表
实时数据库 数据科学 机器学习
ETL 数据清理
▪ 存储成本较低
▪ 支持非结构化数据
劣势
▪ 对BI系统的支持不足
▪ 查询性能低
▪ 数据实时性,可靠性差
数据仓库
数据湖
结构化,半结构化与非结构化数据
9. 复杂的组合型数据系统
数据仓库
数据工程
流式处理
数据科学与机器学习
孤立的技术栈,使得数据架构复杂性提升
数据市场
数据仓库
数据科学
转换
分析和BI
提取
加载
数据湖
机器学习
实时数据库
数据清理
流数据引擎
数据湖
结构化数据
结构化,半结构化及非结构化数据
流数据源
结构化,半结构化及非结构化数据
10. 复杂的组合型数据系统
数据仓库
Amazon Redshift
数据工程
Teradata
Azure Synapse Google BigQuery
SAP Oracle Autonomous
Data Warehouse
Snowflake
IBM Db2
数据仓库
数据科学与机器学习
多个系统,多种专有数据格式,不便于集成
Hadoop Apache Airflow
Amazon EMR Apache Spark
Google Dataproc Cloudera
Apache Kafka
Apache Flink
Azure Stream
Analytics
Apache Spark
Amazon Kinesis
Google Dataflow
Tibco Spotfire
Confluent
Jupyter Amazon SageMaker
Domino Data Labs SAS
Azure ML Studio
MatLAB
TensorFlow
PyTorch
孤立的技术栈,使得数据架构复杂性提升
数据科学
转换
分析和BI
数据市场
流式处理
提取
加载
数据湖
机器学习
实时数据库
数据清理
流数据引擎
数据湖
结构化数据
结构化,半结构化及非结构化数据
流数据源
结构化,半结构化及非结构化数据
11. 复杂的组合型数据系统
数据仓库
数据工程
流式处理
数据科学与机器学习
分散的数据团队影响生产力
数据分析师
Amazon Redshift
Teradata
Azure Synapse Google BigQuery
SAP Oracle Autonomous
Data Warehouse
Snowflake
IBM Db2
数据工程师
多个系统,多种专有数据格式,不便于集成
Hadoop Apache Airflow
Amazon EMR Apache Spark
Google Dataproc Cloudera
数据仓库
Apache Kafka
Apache Flink
Azure Stream
Analytics
Apache Spark
Amazon Kinesis
Google Dataflow
Tibco Spotfire
Confluent
Jupyter Amazon SageMaker
Domino Data Labs SAS
Azure ML Studio
MatLAB
TensorFlow
PyTorch
孤立的技术栈,使得数据架构复杂性提升
数据科学
转换
分析和BI
数据市场
数据科学家
数据工程师
提取
加载
数据湖
机器学习
实时数据库
数据清理
流数据引擎
数据湖
结构化数据
结构化,半结构化及非结构化数据
流数据源
结构化,半结构化及非结构化数据
12. Lakehouse
流式分析
BI
数据科学
机器学习
适用于所有场景的统一平台
需要什么能力?
Structured transactional
layer
存储所有数据的数据湖
结构化,半结构化及非结构化数据
13. Lakehouse
流式分析
BI
数据科学
机器学习
适用于所有场景的统一平台
数据质量
权限管理
查询性能
Structured transactional
layer
存储所有数据的数据湖
结构化,半结构化及非结构化数据
14. Delta Lake
The key enabler of lakehouse
15. 数据质量保证
读写并行
数据更新
中途失败作业
数据建模
小文件过多
16. 数据质量保证
读写并行
数据更新
中途失败作业 ACID事务能力
数据建模 Schema验证与演化
小文件过多 文件自动合并优化
17. Delta Lake 发展历史
●开源Delta Lake
●ACID事务
●Schema管理
●可扩展的元数据处理
●版本控制
●批流一体
2019/04
(0.1)
●非Spark引擎支持
●增强并发能力
●增强文件压缩
●提升insert-only merge性能
●Delta表转换SQL
●试验性支持Snowflake/Redshift
Spectrum
●支持Hive metastore
●支持SQL DML
●自动生成Presto/Athena manifest
●表历史留存时间控制
●支持用户自定义Delta表元数据
●支持Azure Data Lake Storage Gen2
2019/09 (0.4) 2019/12 (0.5) 2020/04 (0.6) 2020/06 (0.7) 2021/02 (0.8)
●Scala/Java APIs: DML命令
●Scala/Java APIs: 查询历史
●Scala/Java APIs: 旧文件清理
●Python DML APIs
●in-place Delta表转换
●支持Merge中的Schema自动更新
●Merge中的自动重分区
●增强非insert merge性能
●支持从任意文件系统中读取Delta表
●支持Merge中nested column的Schema自动更
新
●MERGE/UPDATE中引用nested struct
columns
●Delta表constraint检查
●支持从表的某个版本开始流式输出
●VACUUM语句并行删除
18. Delta Lake 1.0
Generated
Columns
Spark 3.1 支
持
多Cluster写入 Cloud解耦
PyPI
Release Delta
Standalone
19. Standalon
e
Delta
Standalon
e
20. Delta Lake 生态
Ecosystem
Project Status
Delta Standalone Reader
Delta Standalone Writer Available
Q4’ 21
Flink/Delta Source
Flink/Delta Sink Q1’ 22
Q4’ 21
Pulsar/Delta Source
Pulsar/Delta Sink Q4’ 21
Q1’ 22
PrestoDB/Trino integration Q4’ 21
Rust Integration
(kafka-delta-ingest) Available
Nessie Integration Q4’ 21
LakeFS Integration Q4’ 21
Hive3 Connector Available
Spark 3.2 Support Q4’ 21
21. Delta Sharing
An Open Protocol for Secure
Data Sharing
22. Delta Sharing设计目标
• 无需复制到其他系统,便可直接分享Lakehouse中的数据
• 采用现有的,开放的数据格式,数据接收方客户端的实现更加简单
• 提供强大的安全,审计与治理能力
• 可扩展性强,支持海量数据的分享
23. Delta Sharing原理
数据接收方
数据提供方
访问许可
Delta Sharing协议
Delta Lake表
Delta Sharing服务
…
客户端
24. Delta Sharing实现
数据接收方
数据提供方
访问许可 ✓
请求读取”销售数据”表
…
Delta Lake表
S3 Objects
(Parquet格式)
Delta Sharing服务
客户端
25. Delta Sharing实现
数据接收方
数据提供方
访问许可 ✓
请求读取”销售数据”表
Delta Lake表
Delta Sharing服务
返回短期有效的URL:
https://s3.aws.com/part1?sig=...
https://s3.aws.com/part4?sig=...
从S3直接获取数据
S3 Objects
(Parquet格式)
…
客户端
26. Delta Sharing生态
Open Source Clients
Commercial Clients
Business Intelligence
Data Providers
Analytics
Governance
27. Unity Catalog
Simplified governance for data
and AI
28. 数据湖治理现状
用户
基于文件的权限管理:
• 用户1可读 /pages/
• 用户2可读 /users/
• 用户3可读 /users/us/
数据(云存储上的文件)
/dataset/pages/part-001 如何更新数据布局?
/dataset/users/uk/part-001 如何只让用户拥有表中部分行/列的权限?
/dataset/pages/part-002
/dataset/users/uk/part-002
/dataset/users/us/part-001
元数据(如Hive Metastore)
表 & 视图
可能与数据权限不同步!
其他数据源(如数据仓库)
完全不同的权限模型
机器学习模型
完全不同的权限模型
29. Databricks Unity Catalog
用户
Unity
Catalog
Table
1
Table
2
View
1
View
2
Model
View
3
细粒度权限:管理表、视图、列,而非文件
Audi
t
Log
数据(云存储上的文件)
/dataset/pages/part-001
/dataset/pages/part-002
/dataset/users/uk/part-001
/dataset/users/uk/part-002
/dataset/users/us/part-001
其他数据源
机器学习模型
标准接口:ANSI SQL DCL
为不同的数据资产类型提供统一的权限模型
集中审计
Delta Shares
30. 使用Unity Catalog
CREATE TABLE iot_events
GRANT SELECT ON iot_events TO engineers
GRANT SELECT(date, country) ON iot_events TO marketing
31. 基于视图的权限管理
CREATE VIEW aggregate_data AS
SELECT date, country, COUNT(*) AS num_events
FROM iot_events
GRANT SELECT ON aggregate_data TO business_analysts
32. 基于属性的权限管理
CREATE ATTRIBUTE pii
ALTER TABLE iot_events ADD ATTRIBUTE pii ON email
ALTER TABLE users ADD ATTRIBUTE pii ON phone
...
GRANT SELECT ON DATABASE iot_data
HAVING ATTRIBUTE NOT IN (pii)
TO product_managers
33. 管理其它数据资产类型
GRANT EXECUTE ON MODEL fraud_ranking TO engineers
GRANT EXECUTE ON MODELS HAVING ATTRIBUTE (eu_data)
TO eu_product_managers
34. Databricks Unity Catalog
统一的管理接口
SQL标准的权限模型
与现有Catalog集成
35. Databricks
SQL
Analytics on your
lakehouse
36. Databricks SQL
轻松对接BI生态
Analyst Experience
Admin Experience
简单易用
SQL Endpoints
Photon Engine
Unity Catalog
真实场景下的高性能
统一的数据管控
开放可扩展的数据湖
结构化、半结构化和非结构化数据
37. Databricks SQL
Analyst Experience
Admin Experience
SQL Endpoints
Photon Native Vectorized Engine
Unity Catalog
结构化、半结构化和非结构化数据
真实场景下的高性能
38. 查询性能
• TPC-DS 100 TB 新世界纪录(2021 / 11 / 2)
TPC-DS 100 TB
QphDS
2.2x
Databricks
Photon
原记录
39. Photon Engine
• 与Apache Spark完全兼容
• C++向量化查询引擎
40. 设计思路
• 资源:硬件发展趋势
• 需求:查询负载分析
41. 硬件发展趋势
2010 2015 2020 存储 50 MB/s
(HDD) 500 MB/s
(SSD) 16 GB/s
(NVMe) 10X
网络 1 Gbps 10 Gbps 100 Gbps 10X
CPU ~3 GHz ~3 GHz ~3 GHz
42. 硬件发展趋势
CPU主频变化不大,但并行性有很大提升:
• 数据并行:SIMD寄存器位宽
• MMX/SSE: 128 bit
• AVX2: 256 bit
• AVX512: 512 bit
• 指令并行:乱序窗口
• Sandy Bridge: 168
• Haswell: 192
• Skylake: 224
43. 数据并行
行存储
列存储
1 2 3 4
3.5 alex bar
t ala anku
r
ala 6.4 3.5 4.1 6.4 9.9
anku
r 9.9 1 alex 4.1
2 bar
t
3 4
44. 数据并行
Col1 1 2 3 4
Col2 alex bar
t ala anku
r
Col3 3.5 4.1 6.4 9.9
for (int32_t i = 0; i < num_rows; ++i) {
out[i] = col1[i] + col3[i];
}
优势:
Out
4.5
6.1
9.4
13.
9
- 减小内存使用量
- 更好地利用了缓存
45. 指令并行
Example: select sum(value) from table group by key
}
if (ht[bucket].key == table[i].key) {
ht[bucket].value += table[i].value;
}
Tabl
e
for (int32_t i = 0; i < batchSize; ++i) {
int32_t bucket = hash(table[i].key) % ht->size;
Hash
Table (ht)
ob
Pr
e
Has
h
46. 指令并行
Example: select sum(value) from table group by key
}
if (ht[bucket].key == table[i].key) {
ht[bucket].value += table[i].value;
}
Tabl
e
for (int32_t i = 0; i < batchSize; ++i) {
int32_t bucket = hash(table[i].key) % ht->size;
Hash
Table (ht)
ob
Pr
e
Has
h
47. 指令并行
Example: select sum(value) from table group by key
for (int32_t i = 0; i < batchSize; ++i) {
int32_t bucket = hash(table[i].key) % ht->size;
}
if (ht[bucket].key == table[i].key) {
ht[bucket].value += table[i].value;
}
随机内存读取 -> 缓存失效 -> CPU 等待
CPU 时间分析
48. 指令并行
for (int32_t i = 0; i < batchSize; ++i) {
int32_t bucket = hash(table[i].key) % ht->size;
}
if (ht[bucket].key == table[i].key) {
ht[bucket].value += table[i].value;
}
循环体过大
内存访问指令和其他计算指令混合
循环体过大 -> CPU乱序窗口中能包含的循环更少 -> CPU能够并行执行的内存访问指令更少
解决方案:拆解循环!
49. 指令并行
for (int32_t i = 0; i < batchSize; ++i) {
int32_t bucket = hash(table[i].key) % ht->size;
}
if (ht[bucket].key == table[i].key) {
ht[bucket].value += table[i].value;
}
for (int32_t i = 0; i < batchSize; ++i) {
int32_t bucket = hash(table[i].key) % ht->size;
}
for (int32_t i = 0; i < batchSize; ++i) {
keys[i] = ht[buckets[i]].key;
}
拆解为更简单的循环
for (int32_t i = 0; i < batchSize; ++i) {
if (keys[i] == table[i].key) {
ht[buckets[i]].value += table[i].value;
}
}
50. 数据并行 & 指令并行
• 数据并行:列式存储
• 指令并行:循环拆解
TPC-DS 30TB 每小时查询数
3.3x
开启并行化
关闭并行化
51. 查询负载分析
• 公司发展快速迭代 - 更粗放的数据建模,例如:
• 非明确定义的NOT NULL限制
• 以字符串代替其他数据类型
52. 字符串处理优化 - UTF-8简介
UTF-8:可变长度的字符串编码
A 1 byte 41
© 2 bytes c2 a9
张 3 bytes e5 bc a0
� 4 bytes f0 9f 8e 86
有利于优化存储和传输,但令计算复杂度更高:
例如对于SUBSTRING函数:
定长编码:按位置取
变长编码:需要检查字符边界
53. 字符串处理优化 - 优化思路
大部分情况下数据都是ASCII,但仍以UTF-8编码
可否兼顾ASCII的计算性能与UTF-8的灵活性?
54. 字符串处理优化 - 具体步骤
将处理分为两步:
第一步:向量化的ASCII检测(速度可达~60GB/s/core)
第二步:如果结果为全ASCII,执行定长编码版本代码;否则执行变长编
码版本代码
55. 字符串处理优化 - 结果
UPPER函数(MB/s/core)
SUBSTRING函数(MB/s/core)
56. Photon Engine
采用C++重写执行引擎
• 向量化
• 数据并行
• 指令并行
• 为粗放的数据建模进行优化
• NULL检查
• 字符串处理
57. 其他性能优化
快速、可靠地应对各种场景
小数据量查询 不同数据量并行查询 大量小文件查询 BI结果获取
降低额外开销 双查询队列 异步 I/O Cloud fetch
58. SIMPLE
Data Engineering
OPEN
BI & SQL
Analytics
Lakehouse Platform
COLLABORATIVE
Real-time Data
Applications
Data Science
& Machine Learning
Data Management & Governance
Open Data Lake
Structured
Semi-structured
Unstructured
Streaming
59. 客户案例 -
Atlassian
60. Atlassian - 公司简介
61. Atlassian数据图景
• 单一Lakehouse
• 无其他数仓、数据湖
• PB量级数据
• 每日增长约25TB
• 3000+用户
• 公司内月活用户
• ~200数据相关员工
• 数据工程师、科学家以及分析师
62. Atlassian数据平台历史:数据仓库 (2016之前)
63. Atlassian数据平台历史:数据仓库 (2016之前)
• 数仓之间Pipeline稳定性差
• SQL不兼容,学习成本高
• 扩展性不足
64. Atlassian数据平台历史:数据湖 (2016-2018)
•
•
•
•
•
统一存储
高扩展性
性能不足
数据更新困难
用户难以self-service
65. Atlassian数据平台:Databricks (2018至今)
• 优化的存储与执行引擎
• 降本增效
• 数据更新管控
• 数据质量保证
• 用户self-service
66. 阿里云Databricks数据洞察 (DDI) 架构
Databricks驱动的超高性能阿里云数据平台
全托管
集群
管理
流式数据
交互式
分析
高性能
工作流
调度
DAG
Super Charged AliCloud Data Platform powered by Databricks
架构先进
企业级 Spark
全托管Spark平台
元数据
管理
弹性
伸缩
原生UI
监控
Apache
Spark兼容
Databricks Delta Lake & Delta Engine (超高性能)
结构化数据
商业洞察分析
Business
Insights
Databricks Runtime引擎 ( 兼容Apache Spark )
ECS
半结构化数据
交互协作
JindoFS VPC
OSS RDS/ES/Kafk
a..
机器学习训练
Machine Learning
Results
67. 谢谢