Nessie可以管理像git 分支,合并數(shù)據(jù)源等一些特性;
- 受git的版本管理啟發(fā)
- 跨表事務(wù)和可見性
- 支持hive,spark,AWS Athena,dremio,管理其數(shù)據(jù)湖的數(shù)據(jù)
- 深度和Apache Iceberg, Delta Lake and Hive 合作
- 可以用docker image,AWS lamada 以及github 源碼運(yùn)行
nessie是一個(gè)基于對(duì)象存儲(chǔ)的服務(wù)和Library,你能維護(hù)多版本的數(shù)據(jù),以及利用gi t一樣的功能去管理數(shù)據(jù)湖的Branch和TAG;Nessie通過一下的表格式去進(jìn)行版本管理的特性;
- apache Iceberg table
- Delta Lake tables
- Hive metastore table
- SQL views
基本概念
Nessie深受GIT啟發(fā);主要的概念大都是來源于GIT的概念;在很多情況下,你能夠簡(jiǎn)單的替換Nessie中的一些概念;Nessie主要概念包括:
- commit:在某個(gè)時(shí)間點(diǎn),所有表的一致性快照
- Branch:用戶將commits增加到的一個(gè)引用位置
- Tag: 一次特定提交指向
- Hash: 一次特定提交生成的Hash字符串
除了上述一些概念,Nessie從一個(gè)main單一分支開始,并且指向特定的開始時(shí)間;用戶可以馬上向表中增加分支,如下偽代碼:
$ create t1
...
$ insert 2 records into t1
...
$ create t2
...
$ insert 2 records into t2
...
一個(gè)用戶可以使用Nessie的客戶端去看主分支上所有的分支;你可以看到每次提交自動(dòng)留下的操作記錄;
$ nessie log
hash4 t2 data added
hash3 t2 created
hash2 t1 data added
hash1 t1 created
一個(gè)用戶可以在某個(gè)特定的時(shí)間t創(chuàng)建新的Tag; 在此之后,用戶能夠繼續(xù)改變表,但是在t時(shí)刻的數(shù)據(jù)版本將在Nessie中進(jìn)行維護(hù);
$ nessie tag mytag hash4
$ insert records into t1
$ select count(*) from t1 join t2
.. record 1 ..
.. record 2 ..
.. record 3 ..
.. 3 records ..
$ select count(*) from t1@mytag join t2@mytag
.. record 1 ..
.. record 2 ..
.. only 2 records ..
數(shù)據(jù)和元數(shù)據(jù)
Nessie 不需要拷貝你當(dāng)下的數(shù)據(jù);然后,他會(huì)按照你的數(shù)據(jù)集將文件進(jìn)行隔離;不管你使用的是spark,Hive,或者其他的工具,你定義的每個(gè)變化操作,增加,刪除你定義的數(shù)據(jù)源,都會(huì)改變你定義的表。Nessie會(huì)在每個(gè)時(shí)間點(diǎn)跟蹤哪些文件與表相關(guān),然后根據(jù)你的需要調(diào)用這些文件;
擴(kuò)展性和性能
Nessie 用來構(gòu)建大型的數(shù)據(jù)倉庫;Nessie 支持百萬級(jí)別的表和每秒一千次的提交;因?yàn)镹essie構(gòu)建在Iceberg和delta Lake之上,每個(gè)表中有百萬級(jí)別的文件;對(duì)此,Nessie可以支持比當(dāng)今最大數(shù)倉大幾個(gè)數(shù)量級(jí)的數(shù)據(jù)倉庫;這些可能性大多都依賴于Nessie中的 表元數(shù)據(jù)的事務(wù)管理的隔離;
技術(shù)上
Nessie 可以多種方式部署,同時(shí)他由多個(gè)基本的Nessie service 構(gòu)成;同時(shí)它通過REST APIS和簡(jiǎn)單的UI界面進(jìn)行暴露;這些服務(wù)像多個(gè)包一些去暴露Nessie的版本管理的能力
TODO
Nessie can be deployed in multiple ways and is composed primarily of the Nessie service, which exposes a set of REST APIs and a simple browser UI. This service works with multiple libraries to expose Nessie’s version control capabilities to common data management technologies.
Nessie was built as a Cloud native technology and is designed to be highly scalable, performant and resilient. Built on Java and leveraging Quarkus, it is compiled to a GraalVM native image that starts in less than 20ms. This makes Nessie work very well in Docker and FaaS environments. Nessie has a pluggable storage backend and comes pre-packaged with support for DynamoDB and local storage.