GooDs: Organizing Google’s Datasets
<閱讀筆記>
參與了dantezhao的一個論文閱讀計劃 paper-notes
將閱讀成果分享到博客
Google Dataset Search (GooDs)是一個以元數(shù)據(jù)的形式管理數(shù)據(jù)集的企業(yè)內(nèi)部系統(tǒng)
這篇論文介紹了GooDs的設(shè)計和用途
帶著問題閱讀:
1. what: GooDs系統(tǒng)是做什么的
2. why: 為什么需要GooDs系統(tǒng)
3. how: GooDs系統(tǒng)是如何設(shè)計的
0. 摘要
0.1 文章目標
- 探討實現(xiàn)數(shù)據(jù)管理所面臨的技術(shù)挑戰(zhàn) (Challenges)
從億萬級數(shù)據(jù)源爬取和推斷元數(shù)據(jù)
維持大規(guī)模元數(shù)據(jù)目錄的一致性
使用元數(shù)據(jù)為用戶提供服務(wù)
- 對于打造大規(guī)模企業(yè)級數(shù)據(jù)管理系統(tǒng)的借鑒意義
1. 引言
1.1 企業(yè)數(shù)據(jù)管理的兩種形式
- Enterprise Data Management (EDM)
生成數(shù)據(jù)集和管理數(shù)據(jù)集都在一套系統(tǒng)內(nèi)
系統(tǒng)本身限制了數(shù)據(jù)的生產(chǎn)和流轉(zhuǎn)
- Data Lake
與EDM不同的是首妖,Data Lake采取事后(post-hoc)模式
不介入數(shù)據(jù)的生產(chǎn)和使用
只為已經(jīng)生成的數(shù)據(jù)提供一套有效的管理工具
所以這是一種事后(post-hoc)行為
lake的比喻很形象惯退,數(shù)據(jù)不斷生成和累積匯聚成湖擅羞,查找數(shù)據(jù)就像從湖中釣魚("fish the right data")
1.2 Google Dataset Search (GooDs)
- GooDs是一個靜默的服務(wù)者
GooDs的全稱是Google Dataset Search畔塔,但它的功能不限于search
GooDs采用了類似Data Lake的形式攒岛,對數(shù)據(jù)進行事后(post-hoc)管理
post-hoc將在文中多次出現(xiàn),強調(diào)GooDs是靜默的輔助工具
作者還用非侵擾(non-intrusive)表明GooDs既不影響數(shù)據(jù)本身炎疆,也不影響數(shù)據(jù)的生產(chǎn)者和使用者
1.3 GooDs的運作機制
[站外圖片上傳中...(image-d1e2c9-1561642798984)]
圖:GooDs設(shè)計概覽
- 分層介紹
1) GooDs持續(xù)地爬取(crawls)各類存儲系統(tǒng)和業(yè)務(wù)線考阱,
從中發(fā)現(xiàn)數(shù)據(jù)集(datasets)并收集數(shù)據(jù)集的元數(shù)據(jù)(datasets)信息和使用情況(usage)
(見圖最底層)
2) GooDs將元數(shù)據(jù)聚合為一個中央目錄(central catalog),同時把特定數(shù)據(jù)集的元數(shù)據(jù)與其他數(shù)據(jù)集的信息相互關(guān)聯(lián)
(見圖中間層)
3) GooDs用這套目錄的信息構(gòu)建搜索粘姜、監(jiān)控和數(shù)據(jù)流可視化等工具鬓照,
從而為Google工程師提供數(shù)據(jù)管理服務(wù)
(見圖最上層)
- 關(guān)于元數(shù)據(jù)(metadata)
1) 元數(shù)據(jù)信息的一個來源是直接從數(shù)據(jù)源收集
2) 元數(shù)據(jù)的另一個來源是對數(shù)據(jù)內(nèi)容的推斷(inference):
a. 處理附加的數(shù)據(jù)源,如日志孤紧、數(shù)據(jù)集所有者和項目信息等
c. 分析數(shù)據(jù)集的內(nèi)容
d. 收集GooDs使用者輸入
3) GooDs收集的元數(shù)據(jù)可能包括:
a. 數(shù)據(jù)所有者 (owners)
b. 訪問時間 (time of access)
c. 內(nèi)容特征 (content features)
d. 生產(chǎn)管線的訪問記錄 (accesses by production pipelines)
1.4 GooDs提供的一些工具
- dashboard 儀表板
展示所有數(shù)據(jù)集
提供多條件檢索
可以橫跨不同的存儲系統(tǒng)
可以獲得數(shù)據(jù)集和所有依賴的數(shù)據(jù)集
- monitor 監(jiān)控
監(jiān)控內(nèi)容特征:如大小豺裆、數(shù)值的分布、是否可用
在特征發(fā)生意外改變時通知數(shù)據(jù)所有者
- provenance 數(shù)據(jù)血緣關(guān)系
生成某個數(shù)據(jù)集的上游數(shù)據(jù)
依賴某個數(shù)據(jù)集的下游數(shù)據(jù)
- search engine 搜索引擎
縮小搜索范圍
- GooDs API
通過暴露接口号显,所有的團隊都能為元數(shù)據(jù)目錄做貢獻臭猜,形成一種crowd-sourced(眾包)的方式
數(shù)據(jù)使用者能夠共享和交換數(shù)據(jù)集的信息
2. GooDs系統(tǒng)的技術(shù)挑戰(zhàn)
2.1 天量數(shù)據(jù)規(guī)模
GooDs系統(tǒng)為超過260億個數(shù)據(jù)集建立了索引
260億這個數(shù)字僅包括對全體google員工開放權(quán)限的數(shù)據(jù)集
如果GooDs為更高級別權(quán)限的數(shù)據(jù)集建立索引,同時支持更多存儲系統(tǒng)押蚤,規(guī)拿锔瑁可能在260億的基礎(chǔ)上翻倍
(double in the number of datasets)
即使每秒處理一個數(shù)據(jù)集,260億也需要一千臺并行的機器運轉(zhuǎn)300天
對元數(shù)據(jù)的推斷(inference)也因為計算量呈指數(shù)級增長而完全不可行
2.2 多樣性
數(shù)據(jù)集以各種格式存儲揽碘,來自各式存儲系統(tǒng)次屠,多樣性成為數(shù)據(jù)統(tǒng)一管理問題之一
GooDs需要將各種格式的數(shù)據(jù)以同一種形式展示給用戶
數(shù)據(jù)集的類型和大小不同或者元數(shù)據(jù)的類型不同园匹,抽離元數(shù)據(jù)的成本也會不同
GooDs系統(tǒng)在推斷元數(shù)據(jù)的時候,需要考量元數(shù)據(jù)的成本和收益
多樣性也體現(xiàn)在數(shù)據(jù)集的相互關(guān)系中帅矗,而數(shù)據(jù)集的相互關(guān)系反過來影響元數(shù)據(jù)在GooDs目錄的計算和存儲
2.3 目錄條目(Catalog Entries)的變動
GooDs目錄條目中偎肃,每天約有5%左右的數(shù)據(jù)集被刪除
優(yōu)先計算哪些數(shù)據(jù)集的元數(shù)據(jù),將哪些數(shù)據(jù)集加入目錄浑此,都會受到新舊數(shù)據(jù)集交替的影響
生存周期time-to-live(TTL)長的數(shù)據(jù)集相對比較重要
短周期數(shù)據(jù)集可能關(guān)聯(lián)長周期數(shù)據(jù)集累颂,所以GooDs系統(tǒng)不可能排除短周期數(shù)據(jù)集
2.4 元數(shù)據(jù)的不確定性
GooDs系統(tǒng)采取事后(post-hoc)非侵入(non-invasive)的方式,無法全程把握數(shù)據(jù)集的產(chǎn)生
GooDs根據(jù)已有數(shù)據(jù)推斷和計算出的元數(shù)據(jù)凛俱,在一定程度并不精準
2.5 計算數(shù)據(jù)集重要性
推算數(shù)據(jù)集對使用者的重要性和在網(wǎng)頁檢索中推算網(wǎng)頁的重要性不同
網(wǎng)頁用于排序和檢索的許多特性(如錨文本anchor text)紊馏,數(shù)據(jù)集并不具備
不過數(shù)據(jù)集可以提供結(jié)構(gòu)性的上下文,這是網(wǎng)頁所沒有的
數(shù)據(jù)集之間的唯一聯(lián)系就是來源關(guān)聯(lián)蒲犬,而這種關(guān)聯(lián)并不能完全決定數(shù)據(jù)集的重要性
為哪些數(shù)據(jù)集優(yōu)先計算元數(shù)據(jù)朱监,也可以作為數(shù)據(jù)集重要性的一項參考
2.6 復(fù)原數(shù)據(jù)集語義
數(shù)據(jù)集的語義可以通俗地理解為數(shù)據(jù)集的某項內(nèi)容代表了什么
文中舉的例子是,從一個數(shù)據(jù)集中推斷出一批整型數(shù)值代表了地理坐標的ID
這樣的數(shù)據(jù)集語義原叮,在用戶檢索地理數(shù)據(jù)時就能排上用場
將無意義的原始數(shù)據(jù)升華為包含意義的內(nèi)容對推斷元數(shù)據(jù)非常有用
但是發(fā)現(xiàn)數(shù)據(jù)集語義本身也是一項非常困難的工作
3. GooDs系統(tǒng)的目錄(Catalog)
Google內(nèi)部每個存儲系統(tǒng)都可能維護著自己的catalog赫编,每個catalog還會有自己的metadata
數(shù)據(jù)在不同的數(shù)據(jù)集和存儲系統(tǒng)之間自由流轉(zhuǎn)是常態(tài)
GooDs所做的就是為所有存儲系統(tǒng)和數(shù)據(jù)集建立統(tǒng)一的目錄
Catalog上的一條記錄稱之為條目(entry),原則上每個entry對應(yīng)一個數(shù)據(jù)集(dataset)的元數(shù)據(jù)
當出現(xiàn)一些特征相似度高的集群時奋隶,GooDs會將它們歸并為一個集群(cluster)擂送,建立單個條目(entry)
集群的一個典型例子就是相同數(shù)據(jù)集的不同版本
3.1 元數(shù)據(jù)(Metadata)
- 概要
終于講到了GooDs系統(tǒng)的關(guān)鍵要素————元數(shù)據(jù)(metadata)
元數(shù)據(jù)(metadata)包含很多信息,總結(jié)起來就是用于描述數(shù)據(jù)集的信息唯欣,即"數(shù)據(jù)的數(shù)據(jù)"
- 元數(shù)據(jù)的來源
元數(shù)據(jù)的途徑有兩種:
第一種可以通過直接訪問獲揉诙帧:
GooDs系統(tǒng)在爬取數(shù)據(jù)集的時候,會順帶獲取一些元數(shù)據(jù)境氢,如數(shù)據(jù)集的大小蟀拷、所有者、訪問權(quán)限等
但是數(shù)據(jù)集并沒有保存所有的元數(shù)據(jù)信息萍聊,比如生成數(shù)據(jù)集的作業(yè)(jobs)问芬,數(shù)據(jù)集的訪問者等
不能從數(shù)據(jù)集直接獲取的元數(shù)據(jù)往往存在于日志中
第二種通過GooDs系統(tǒng)計算得出:
GooDs除了爬取獲得元數(shù)據(jù)外,還會通過推斷(inference)獲取元數(shù)據(jù)
[站外圖片上傳中...(image-774b58-1561642798984)]
Table2: 元數(shù)據(jù)(Metadata)和元數(shù)據(jù)組(Metadata Group)
- 基礎(chǔ)元數(shù)據(jù)(Basic Metadata)
包括時間戳寿桨、文件格式此衅、所有者、訪問權(quán)限等
基礎(chǔ)元數(shù)據(jù)一般由GooDs系統(tǒng)爬取存儲系統(tǒng)直接獲得牛隅,無需推斷
GooDs的其他模塊通常將基礎(chǔ)元數(shù)據(jù)作為行為依據(jù)之一
- 數(shù)據(jù)血緣/數(shù)據(jù)譜系(Provenance)
GooDs中的元數(shù)據(jù)血緣關(guān)系來自數(shù)據(jù)集的生產(chǎn)和消費過程炕柔、數(shù)據(jù)集上下游依賴
GooDs通過分析生產(chǎn)日志來確定元數(shù)據(jù)的血緣信息
GooDs用時間順序決定依賴關(guān)系,即晚發(fā)生的依賴于早發(fā)生的
在計算血緣關(guān)系時媒佣,GooDs為了效率可能會犧牲信息的完整性
- 結(jié)構(gòu)信息(Schema)
Google內(nèi)幾乎所有結(jié)構(gòu)化數(shù)據(jù)集都是基于serialized protocol buffer編碼的
推斷數(shù)據(jù)集使用了哪種形式的protocol buffer編碼會產(chǎn)生多個結(jié)論
GooDs系統(tǒng)把所有可能的protocol buffer形式都記錄在元數(shù)據(jù)中
- Content summary
Content summary按照字面直譯為內(nèi)容摘要反而不容易理解
實際上匕累,元數(shù)據(jù)記錄的content summary可以看成一套數(shù)據(jù)的關(guān)鍵字合集
文中舉了三個summary的例子:
a) 抽樣(sampling)產(chǎn)生的frequent token
b) 分析字段(fields)得出的鍵(key for data)
c) 有校驗和(checksums)的fingerprints
GooDs通過summary來判斷來自不同數(shù)據(jù)集的內(nèi)容或者字段是否相似和相等,
- 用戶注釋(User-provided annotations)
一般用戶做注釋都是為了明確告知數(shù)據(jù)集的使用者有必要知曉的信息
GooDs的元數(shù)據(jù)通過分析注釋來優(yōu)化排序或者規(guī)避數(shù)據(jù)隱私
- 語義學(xué)信息(Semantics)
數(shù)據(jù)集的語義學(xué)信息可以幫助理解數(shù)據(jù)集
如果數(shù)據(jù)集使用了特定的protocol buffer默伍,GooDs可以分析源碼提取有用的備注(comment)信息
本段中舉了個例子欢嘿,比如數(shù)據(jù)集中一個名為"mpn"的字段衰琐,通過分析備注,發(fā)現(xiàn)mpn是"http://Model Product Number"的縮寫
這就是獲取備注(comment)信息在語義學(xué)方面的作用
Google的知識圖譜可以作為一個資源庫炼蹦,GooDs系統(tǒng)將數(shù)據(jù)集內(nèi)容與知識圖譜匹配羡宙,識別不同字段中包含什么樣的條目信息(如位置信息,業(yè)務(wù)信息)
- 其他
除上述類型的元數(shù)據(jù)外掐隐,GooDs系統(tǒng)還會將以下信息作為元數(shù)據(jù)的內(nèi)容:
a) 獲取一個標識狗热,通過該標識可以確認擁有數(shù)據(jù)集的團隊(team)
b) 數(shù)據(jù)集所屬項目的描述
c) 數(shù)據(jù)集元數(shù)據(jù)的變更歷史
此外,GooDs允許團隊在目錄添加自定義的元數(shù)據(jù)虑省,從而為所有使用者提供統(tǒng)一管理元數(shù)據(jù)的平臺
3.2 數(shù)據(jù)集群(cluster)
- 數(shù)據(jù)集重復(fù)問題
GooDs目錄上的260億個數(shù)據(jù)集并非完全獨立匿刮,很多數(shù)據(jù)集存在內(nèi)容重復(fù),比如:
a) 相同數(shù)據(jù)集的不同版本
b) 相同數(shù)據(jù)集復(fù)制到不同的數(shù)據(jù)中心
c) 大數(shù)據(jù)集被切分為小數(shù)據(jù)集
...
- 數(shù)據(jù)集集群化的好處
針對上述問題探颈,將類似數(shù)據(jù)集歸納為集群有如下好處:
a) 為用戶提供合乎邏輯的數(shù)據(jù)集分組
b) 只需計算集群中的少量數(shù)據(jù)集的元數(shù)據(jù)熟丸,節(jié)約計算成本
- 集群化的技術(shù)考量
將數(shù)據(jù)集集群化的計算成本要足夠低,才值得使用
生成集群的計算成本不能高于重復(fù)計算相似數(shù)據(jù)集的成本
- 根據(jù)路徑(path)層級(hierarchies)生成集群
數(shù)據(jù)集的路徑可以提供劃分集群的思路
某個數(shù)據(jù)集路徑
dataset/2015-10-10/daily_scan
按天分類
dataset/2015-10-<day>/daily_scan
按月份和日期分類
dataset/2015-<month>-<day>/daily_scan
- 多粒度的半網(wǎng)格結(jié)構(gòu)(granularity semi-lattice)
[站外圖片上傳中...(image-484ea3-1561642798984)]
Figure 2展示了兩種層次的集群劃分:按天劃分和按版本號劃分
[站外圖片上傳中...(image-45cada-1561642798984)]
Table 3展示了構(gòu)建集群所依賴的數(shù)據(jù)集維度
從數(shù)據(jù)集的路徑抽離出不同維度(dimensions伪节,如日期光羞、版本號)
為每個數(shù)據(jù)集構(gòu)建一個半網(wǎng)格(semi-lattice)結(jié)構(gòu)
在Figure 2所示的半網(wǎng)格結(jié)構(gòu)中,非葉子節(jié)點代表了數(shù)據(jù)集的分組依據(jù)
- 集群的日常更新和重復(fù)映射問題
如果分組情況每天計算和更新怀大,可能造成用戶每天都看到不同的集群
為了解決這個問題纱兑,GooDs只為每個半網(wǎng)格的頂層元素創(chuàng)建條目(entry)
如Figure 2,目錄將只有頂層的條目/dataset/<date>/<version>叉寂,
對應(yīng)網(wǎng)格底層的三個數(shù)據(jù)集
采用這種方式可以保證每個數(shù)據(jù)集只映射到一個集群萍启,
總的集群條目數(shù)量也會下降
- 集群的元數(shù)據(jù)
[站外圖片上傳中...(image-d42c85-1561642798984)]
Figure 4 將3個數(shù)據(jù)集的元數(shù)據(jù)匯總成集群元數(shù)據(jù)
GooDs系統(tǒng)通過匯總集群中各個數(shù)據(jù)集的元數(shù)據(jù)总珠,生成該集群的元數(shù)據(jù)
集群的元數(shù)據(jù)以實時計算的方式產(chǎn)生屏鳍,用于區(qū)分通過分析推斷得出的元數(shù)據(jù)
- 數(shù)據(jù)集在集群中的分布
[站外圖片上傳中...(image-4268a3-1561642798984)]
Figure 3 用柱狀圖的方式展示了數(shù)據(jù)集在集群中的分布情況
集群化可以將"物理"集群壓縮為"邏輯"集群
極大地降低了元數(shù)據(jù)的計算成本
用戶可以通過集群更方便地查閱GooDs系統(tǒng)的目錄
4 后端實現(xiàn)(Backend Implementation)
本節(jié)主要討論:
GooDs系統(tǒng)目錄(catalog)的物理結(jié)構(gòu)
向目錄中不斷增加新模塊的方法
目錄數(shù)據(jù)的一致性
目錄的容錯機制
4.1 目錄存儲(Catalog storage)
- Bigtable的行存儲
a) 目錄使用Bigtable作為存儲中介
Bigtable是一種可伸縮的,鍵值對存儲系統(tǒng)
在目錄中局服,Bigtable中的一行代表一個數(shù)據(jù)集或一個集群
Bigtable提供了單行事務(wù)一致性(per-row transactional consistency)
數(shù)據(jù)集路徑或者集群路徑作為這一行的鍵
通過這種方式钓瞭,數(shù)據(jù)集對應(yīng)單行,無需查找多余信息
b) GooDs系統(tǒng)中與單行單個數(shù)據(jù)集處理方式相左的特性
數(shù)據(jù)集提取半網(wǎng)格結(jié)構(gòu)時淫奔,將多行信息整合到邏輯數(shù)據(jù)集中
累計同個集群中不同數(shù)據(jù)集的元數(shù)據(jù)
不過這種元數(shù)據(jù)累加并不需要強一致性
- Bigtable的列族(column families)
一張Bigtable表格包含多個獨立的列族
GooDs的Bigtable中還設(shè)置了一些獨立列族專門進行批量處理(高壓縮率山涡,非內(nèi)存駐留)
只能通過批處理任務(wù)訪問的數(shù)據(jù)就存在這些列族中
比如GooDs系統(tǒng)中最大的列族,就包含了用于計算血緣圖譜的原始血緣數(shù)據(jù)
這些血緣數(shù)據(jù)內(nèi)容不直接面向前端唆迁,僅為部分集群提供服務(wù)鸭丛,因而可以高度壓縮
- 元數(shù)據(jù)在Bigtable中的存儲
在目錄的Bigtable中,每行存儲兩種元數(shù)據(jù)信息:
a) 數(shù)據(jù)集的元數(shù)據(jù)
b) 狀態(tài)元數(shù)據(jù)(status metadata):對某個數(shù)據(jù)集處理后生成的結(jié)果
- 狀態(tài)元數(shù)據(jù)(status metadata)
狀態(tài)元數(shù)據(jù)列出了用于處理條目的(entry)每一個模塊
狀態(tài)元數(shù)據(jù)可能包含時間戳唐责,成功狀態(tài)鳞溉,錯誤信息等內(nèi)容
GooDs使用狀態(tài)元數(shù)據(jù)協(xié)調(diào)模塊的執(zhí)行
狀態(tài)元數(shù)據(jù)也可以檢測系統(tǒng),比如通過成功狀態(tài)觀察數(shù)據(jù)集鼠哥,收集出現(xiàn)次數(shù)最多的錯誤碼
與Bigtable的臨時數(shù)據(jù)模型配合熟菲,狀態(tài)元數(shù)據(jù)還能用于調(diào)試(debugging)
通過配置Bigtable看政,保留若干代的狀態(tài)元數(shù)據(jù)
這些代際數(shù)據(jù)能夠揭示模塊的歷史表現(xiàn)
4.2 批量任務(wù)的性能和調(diào)度(Batch job performance and scheduling)
- 任務(wù)分類和系統(tǒng)可擴展性
GooDs系統(tǒng)的任務(wù)可以分為兩大類
1) 數(shù)量龐大的各類批處理任務(wù)
2) 少數(shù)為前端和API提供服務(wù)的任務(wù)
GooDs系統(tǒng)具有可擴展性,為爬取新增資源提供了便利抄罕,如:
a) 新增的數(shù)據(jù)源
b) 血緣信息和其他元數(shù)據(jù)信息
c) 新的分析模塊
- GooDs系統(tǒng)對任務(wù)的安排
運行時間長達幾天的任務(wù)會被分配到距離數(shù)據(jù)集最近的地理位置
所有任務(wù)都獨立運行允蚣,不限制先后順序或是否并發(fā)
如果任務(wù)中斷,系統(tǒng)可以將其臨時下線
- 任務(wù)中的模塊(modules)
每個任務(wù)都可能包括一個或多個模塊呆贿,如爬蟲或分析器
模塊通常會依賴其他模塊嚷兔,如等待其他模塊的計算結(jié)果
模塊之間通過狀態(tài)元數(shù)據(jù)協(xié)調(diào)執(zhí)行順序,粒度精確到Bigtable中的一行
如果模塊A必須在模塊B之前處理某行數(shù)據(jù)做入,
模塊B會檢查該行的狀態(tài)元數(shù)據(jù)谴垫,是否標記為被模塊A成功處理
如果模塊A尚未處理,模塊B會跳過該行母蛛,在下次運行時再重新檢查翩剪,
如果模塊A重新處理了該行,模塊B也會重新處理彩郊,以保證元數(shù)據(jù)最新
模塊也會使用自身的狀態(tài)元數(shù)據(jù)以避免在設(shè)定時間窗口內(nèi)重復(fù)處理數(shù)據(jù)
大多數(shù)任務(wù)每天運行前弯,并在24小時候內(nèi)完工
GooDs會優(yōu)化超時運行的任務(wù),或者使用并行任務(wù)分攤工作量
這些額外添加的任務(wù)秫逝,以24小時為周期處理恕出,
專門處理新增目錄行或者重新處理超出時間窗口的數(shù)據(jù)
- 重要數(shù)據(jù)集優(yōu)先處理
在大量新數(shù)據(jù)集涌入系統(tǒng)的時候,
系統(tǒng)分析器(Schema Analyzer)作為最重量級的任務(wù)违帆,
往往需要幾天甚至幾周才能跟上進度浙巫,
為了保證最重要的數(shù)據(jù)集不被忽略,
那些用戶加注釋或者血緣集中度高的數(shù)據(jù)集標注被標注為"重要"
每個任務(wù)將分成兩個實例刷后,
一個實例只處理重要數(shù)據(jù)集的畴,
另一個實例處理所有數(shù)據(jù)集,并在一天的末尾處理一小部分重要數(shù)據(jù)集
實踐中尝胆,通過網(wǎng)絡(luò)爬取丧裁,保證最重要的那部分數(shù)據(jù)被充分覆蓋率并且持續(xù)更新,
足以應(yīng)對大多數(shù)的用戶場景
- 數(shù)據(jù)盲寫
負責(zé)爬取數(shù)據(jù)的任務(wù)通常使用盲寫(blind write)的方式向目錄添加數(shù)據(jù)
Bigtable不區(qū)分插入和更新
這種無指令(no-op)方式比讀取目錄后再進行反連接(anti-join)操作更高效
某些情形應(yīng)當禁用無指令存儲含衔,否則會導(dǎo)致依賴的模塊重新運行或者阻塞垃圾回收
4.3 容錯機制(Fault tolerance)
因為數(shù)據(jù)集數(shù)量龐大種類繁多煎娇,GooDs系統(tǒng)遇到了各種問題
- 獨立數(shù)據(jù)集和相互依賴的數(shù)據(jù)集
模塊處理相互獨立的數(shù)據(jù)集時:
錯誤信息會記錄在單個數(shù)據(jù)集的狀態(tài)元數(shù)據(jù)上;
如果狀態(tài)元數(shù)據(jù)顯示某個模塊錯誤終止贪染,將觸發(fā)一定次數(shù)的重試
模塊處理相互依賴的數(shù)據(jù)集時:
錯誤信息會記錄在任務(wù)(job)的狀態(tài)元數(shù)據(jù)上
例如:
有血緣關(guān)聯(lián)的模塊缓呛,
將一個數(shù)據(jù)集任務(wù)鏈接(dataset-job link)納入血緣圖譜前,
首先會查看這個任務(wù)鏈接的時間戳(timestamp)杭隙,
只有時間戳比模塊的最近成功執(zhí)行時間(last successful execution)更晚哟绊,
模塊才會整合該任務(wù)鏈接
上述方法有些保守,如果模塊的最近一次執(zhí)行有部分失敗寺渗,
系統(tǒng)可能會重復(fù)執(zhí)行一些Bigtable的錄入匿情;
但是這種方法能夠保證血緣圖譜的正確性兰迫,
因為Bigtable的錄入是冪等的;
同時這種方法允許系統(tǒng)將任務(wù)血緣信息記錄為"已消費"炬称,
"已消費"屬性在垃圾回收中非常重要
- 模塊依賴庫依賴造成的問題
一些用于檢測數(shù)據(jù)集內(nèi)容的模塊會使用各種庫(libraries)
每個庫都有可能專門用于處理特定的文件類型
庫有時會崩潰或者陷入死循環(huán)
但是由庫帶來的問題并不能徹底消除汁果,
因為系統(tǒng)不允許長時間運行的分析任務(wù)崩潰或掛起
一些危險的任務(wù)會被沙盒封裝到單獨的進程中,
看門狗線程會將長期停滯的任務(wù)轉(zhuǎn)為崩潰狀態(tài)玲躯,
這樣管線上的其他任務(wù)能夠繼續(xù)運轉(zhuǎn)
- 目錄(catalog)的多地冗余
系統(tǒng)會在不同的地理位置冗余多份目錄(catalog)
在master節(jié)點進行錄入時据德,會同步在其他地方復(fù)制
4.4 元數(shù)據(jù)的垃圾回收(metadata)
- 垃圾回收策略的演進
GooDs系統(tǒng)每天都會吸收和生產(chǎn)大量數(shù)據(jù),
其中相當一部分是臨時數(shù)據(jù)
只要模塊已經(jīng)消費了數(shù)據(jù)集關(guān)聯(lián)的元數(shù)據(jù)并更新了目錄跷车,
系統(tǒng)就可以刪除目錄上那些對應(yīng)數(shù)據(jù)集已經(jīng)被刪除的條目
系統(tǒng)初始階段棘利,系統(tǒng)使用了簡單保守的垃圾回收策略,
一條數(shù)據(jù)記錄一周不再更新才會被刪除
這種保守策略導(dǎo)致了若干起目錄嚴重臃腫的問題朽缴,
使我們意識到有必要采取激進的垃圾回收策略
早期曾有兩次善玫,系統(tǒng)被迫中止了所有的爬蟲和垃圾回收無關(guān)的分析模塊,
直到數(shù)天后才從故障中恢復(fù)
- 垃圾回收機制的三大約束條件(constraints)
在實踐中密强,GooDs系統(tǒng)垃圾回收系統(tǒng)的使用總結(jié)了一些實用經(jīng)驗
1) 對Bigtable中一行數(shù)據(jù)做刪除時茅郎,刪除條件最好的表達方式是說明性的斷言,
斷言中使用其他模塊對該行數(shù)據(jù)訪問和更新時記錄的元數(shù)據(jù)和狀態(tài)信息或渤;
如:該數(shù)據(jù)集已從存儲系統(tǒng)中刪除系冗,
血緣相關(guān)的另一個模塊(已成功結(jié)束)對其最近更新的血緣信息進行過處理。
2) 因為Bigtable不區(qū)分插入和更新薪鹦,從目錄中刪除一條記錄時掌敬,
必須保證其他正在運行的模塊沒有將這條數(shù)據(jù)的部分信息重新插入目錄,
這種情況被稱為"dangling rows"
3) 所有其他模塊都必須獨立于垃圾回收模塊池磁,并和垃圾回收同時運行
- 垃圾回收的非事務(wù)性(non-transactional)
Bigtable支持"conditional mutation"奔害,
即根據(jù)指定的條件斷言刪除或更新一條數(shù)據(jù),遵循事務(wù)原則
所有模塊的更新都要依賴未被刪除的單條記錄框仔,
Bigtable的conditional mutation帶來了極大的日志結(jié)構(gòu)讀取開銷
GooDs系統(tǒng)優(yōu)化了設(shè)計庸娱,允許所有垃圾回收以外的模塊進行非事務(wù)(non-transactional)的更新
垃圾回收在兩階段發(fā)生:
a) 第一階段冒滩,垃圾回收使用聲明斷言的方式刪除一條數(shù)據(jù),
此時數(shù)據(jù)并沒有真正刪除抽高,而是被標記了一個墓碑(tombstone)
b) 第二階段瘪匿,24小時之后跛梗,如果該行數(shù)據(jù)仍然符合刪除標準,
垃圾回收會真正刪除這行數(shù)據(jù)棋弥,否則將墓碑移除
與此同時核偿,其他模塊遵從下列規(guī)則:
a) 可以進行非事務(wù)更新
b) 更新時忽略標記了墓碑的數(shù)據(jù)
c) 模塊的單次迭代不能存活超過24小時
這種設(shè)計在保證了系統(tǒng)高效的同時,也能夠滿足垃圾回收的三大約束條件
5 GooDs系統(tǒng)的前端顽染,為目錄服務(wù)(Front end: serving the catalog)
前幾節(jié)內(nèi)容主要關(guān)注了GooDs系統(tǒng)目錄的創(chuàng)建和維護漾岳,
本節(jié)主要講述與元數(shù)據(jù)相關(guān)的服務(wù)
5.1 數(shù)據(jù)集基本信息頁(Dataset profile pages)
- 展示
輸入路徑轰绵,得到數(shù)據(jù)集或集群的元數(shù)據(jù)展示在HTML頁面
在本文第三節(jié)介紹的大部分元數(shù)據(jù)信息都會被展示
用戶可以通過編輯元數(shù)據(jù)的特定部分,討論或修改目錄中的元數(shù)據(jù)信息
- 信息量
展示在頁面的元數(shù)據(jù)信息必須兼顧完整性和合理的信息含量
為了不讓用戶被信息淹沒尼荆,同時避免大量數(shù)據(jù)的傳輸左腔,
GooDs系統(tǒng)使用本文3.2節(jié)介紹的機制,將血緣元數(shù)據(jù)離線壓縮
如果血緣數(shù)據(jù)的壓縮版本仍然很大捅儒,系統(tǒng)只能保留最新的記錄
- 與各類的工具的交叉關(guān)聯(lián)
數(shù)據(jù)集的信息頁會將元數(shù)據(jù)與其他工具交叉關(guān)聯(lián)
比如某個數(shù)據(jù)集的信息頁液样,會將血緣元數(shù)據(jù),
和任務(wù)中心(job-centric tools)的任務(wù)詳情頁相關(guān)聯(lián)巧还,
這些任務(wù)生產(chǎn)了當前數(shù)據(jù)集鞭莽,
任務(wù)中心就是管理任務(wù)的工具
又如架構(gòu)(schema)元數(shù)據(jù)會和代碼管理工具連接,
代碼管理工具中有當前架構(gòu)的定義
同時麸祷,這些工具又回鏈到GooDs系統(tǒng)澎怒,幫助用戶獲取數(shù)據(jù)集的更多信息
- 代碼段工具(access snippets)
信息頁同時提供了多語言的代碼段工具(access snippets)來訪問數(shù)據(jù)集的內(nèi)容
GooDs為特定數(shù)據(jù)集定制代碼段,
用戶可以復(fù)制粘貼代碼段到特定的開發(fā)環(huán)境
代碼段的目標是補充信息頁的元數(shù)據(jù)內(nèi)容:
元數(shù)據(jù)提供了數(shù)據(jù)集內(nèi)容的架構(gòu)級信息阶牍,
而代碼段提供了通過代碼快速訪問和分析數(shù)據(jù)集實際內(nèi)容的途徑
5.2 數(shù)據(jù)集搜索(Dataset search)
- 關(guān)鍵字查詢和索引
數(shù)據(jù)集檢索允許用戶通過簡單的關(guān)鍵字查詢找到數(shù)據(jù)集
搜索服務(wù)依賴常規(guī)的倒排索引實現(xiàn)文件檢索
每個數(shù)據(jù)集都被視為一個文件(document)丹拯,
系統(tǒng)從數(shù)據(jù)集的元數(shù)據(jù)子集中提取索引令牌(index token),
每個令牌都會關(guān)聯(lián)索引的特定部分荸恕,
如path開頭關(guān)聯(lián)的是索引的路徑
索引令牌的提取視查詢類型而定
以路徑為例乖酬,
數(shù)據(jù)集的路徑按分隔符拆分,每個令牌對應(yīng)它在路徑中的位置,
如"a/x/y/b"會映射到索引令牌"a","x","y","b"融求,并且順序不變
protocol buffer的名稱也用相同的方式索引咬像,
用戶可以搜索到schema匹配特定protocol buffer命名空間的所有數(shù)據(jù)集
- 打分函數(shù)(scoring function)
關(guān)鍵字搜索到數(shù)據(jù)集是第一步驟,
第二步驟是生成一個打分函數(shù)來為匹配的數(shù)據(jù)集排序
GooDs系統(tǒng)會根據(jù)用戶的使用經(jīng)驗不斷調(diào)整打分函數(shù)
打分函數(shù)的幾個設(shè)計經(jīng)驗:
a) 數(shù)據(jù)集的重要性依賴于它的類型:
比如打分系統(tǒng)認為Dremel Table比file dataset重要生宛,
因為Dremel Table需要用戶注冊县昂,使其對更多用戶可見
b) 關(guān)鍵字匹配的重要性依賴于索引的位置
比如匹配數(shù)據(jù)集路徑的關(guān)鍵字,
比匹配讀寫數(shù)據(jù)集任務(wù)的關(guān)鍵字重要性更強
c) 血緣譜系(lineage fan-out)是數(shù)據(jù)集重要性的重要指標
數(shù)據(jù)集的讀取任務(wù)越多陷舅,下游數(shù)據(jù)集越多倒彰,則數(shù)據(jù)集越重要;
這個準則有時會給一些數(shù)據(jù)集打出不合理的高分莱睁,
這些數(shù)據(jù)集可能只是被大量的內(nèi)部管線間接訪問待讳,
但是對大多數(shù)用戶沒用,比如Google的網(wǎng)頁爬取信息
d) 帶有用戶描述信息的數(shù)據(jù)集重要性更高
除了上述幾點仰剿,打分函數(shù)還會參考其他信號作為打分依據(jù)
- facet
在關(guān)鍵字檢索之外创淡,GooDs系統(tǒng)還會展示元數(shù)據(jù)的facets
如數(shù)據(jù)集的所有者,數(shù)據(jù)集的文件類型等
這些facet能幫助用戶構(gòu)建更好的搜索關(guān)鍵詞
5.3 團隊儀表板(Team dashboards)
GooDs系統(tǒng)的儀表板是一個可配置的一站式數(shù)據(jù)集展示窗口南吮,
能夠顯示某個團隊生成的所有數(shù)據(jù)集和每個數(shù)據(jù)集的元數(shù)據(jù)
GooDs系統(tǒng)自動更新儀表板的內(nèi)容
用戶可以將儀表板頁面嵌入其他文件并將儀表板與他人共享
GooDs系統(tǒng)還提供了監(jiān)控數(shù)據(jù)集特定屬性并警示的功能
用戶可以通過極少的操作自行設(shè)置需要監(jiān)控的屬性
除了預(yù)設(shè)的監(jiān)控屬性琳彩,GooDs系統(tǒng)還能夠通過分析趨勢,
自動監(jiān)控數(shù)據(jù)集的一些公共屬性
6 經(jīng)驗總結(jié)(lessons learned)
- 隨著使用不斷演進(evolve as you go)
GooDs系統(tǒng)期初的設(shè)計只是為數(shù)據(jù)集提供一個目錄,
隨著不斷使用露乏,GooDs系統(tǒng)也演化出各種用途:
1) 監(jiān)測protocol buffer
protocol buffer可能包含隱私信息
使用GooDs系統(tǒng)碧浊,工程師可以找到所有符合敏感protocol buffer的數(shù)據(jù)集
一旦有違規(guī),GooDs系統(tǒng)會提醒數(shù)據(jù)集所有者
2) 重新查找數(shù)據(jù)集(re-find datasets)
工程師經(jīng)常會生成一些測試數(shù)據(jù)集瘟仿,但是事后忘記了數(shù)據(jù)集路徑辉词,
通過GooDs系統(tǒng)的關(guān)鍵字查詢,能夠找回這些數(shù)據(jù)集
3) 讀懂老代碼(understand legacy code)
老代碼因缺乏最新的文檔而難讀
工程師通過GooDs系統(tǒng)提供的血緣圖譜猾骡,
能夠找到老代碼之前的執(zhí)行過程以及輸入輸出數(shù)據(jù)集瑞躺,
從而幫助理解老代碼的邏輯
4) 標注數(shù)據(jù)集(bookmark datasets)
數(shù)據(jù)集的信息頁可以作為數(shù)據(jù)集天然的信息展示窗口
用戶可以標注信息頁并將數(shù)據(jù)集與其他用戶共享
5) 注釋數(shù)據(jù)集(annotate datasets)
GooDs目錄類似中轉(zhuǎn)樞紐,數(shù)據(jù)集注釋得以在不同的團隊之間共享
- 在排序中使用某個領(lǐng)域特有的信號(use domain-specific signals for ranking)
本文第二節(jié)中提到兴想,數(shù)據(jù)集排序問題有自己的特性幢哨,
與其他領(lǐng)域的排序不同(如網(wǎng)頁排序)
根據(jù)GooDs系統(tǒng)的使用經(jīng)驗,
不同數(shù)據(jù)集之間的血緣關(guān)系就為排序提供了領(lǐng)域特有的信號
比如很多團隊會為主數(shù)據(jù)集(master dataset)生成多個非規(guī)范化(denomalized)的版本
這些非規(guī)范化版本的數(shù)據(jù)集和主數(shù)據(jù)集匹配相同的關(guān)鍵字
但是顯而易見嫂便,GooDs系統(tǒng)會在常規(guī)查詢或者元數(shù)據(jù)提取中給主數(shù)據(jù)集更高的排序
- 預(yù)見并處理非常規(guī)數(shù)據(jù)集(expect and handle unusual datasets)
目錄中龐大的數(shù)據(jù)集數(shù)量在GooDs系統(tǒng)早期產(chǎn)生了許多意外場景
在經(jīng)驗中GooDs系統(tǒng)形成了處理非常規(guī)數(shù)據(jù)集的策略:
首先提供最簡單的特定問題解決方案捞镰,
接著在必要時歸納出同一類問題的總體解決方案
- 按需導(dǎo)出數(shù)據(jù)(export data as required)
GooDs目錄的存儲中介是鍵值對存儲系統(tǒng),
搜索服務(wù)依賴的是傳統(tǒng)倒排索引毙替,
二者均不適合對血緣圖譜可視化或者執(zhí)行復(fù)雜的路徑查詢
為了滿足上述需求岸售,
GooDs系統(tǒng)會將目錄數(shù)據(jù)按主謂賓的三元組結(jié)構(gòu)(subject-predicate-object triples)導(dǎo)出
GooDs系統(tǒng)會將這項元組數(shù)據(jù)導(dǎo)入到一個基于圖形的存儲系統(tǒng),
支持路徑查詢并暴露更適合可視化的API
如果用戶需要更強大的查詢能力厂画,現(xiàn)有存儲系統(tǒng)無法支持凸丸,
最簡單的方式就是將目錄數(shù)據(jù)導(dǎo)出到一個合適的專門引擎中
- 保證可恢復(fù)性(ensure recoverability)
從數(shù)以十億計的數(shù)據(jù)集提取元數(shù)據(jù)的計算成本非常高
穩(wěn)定狀態(tài)下,GooDs系統(tǒng)在單日內(nèi)處理一天量的新數(shù)據(jù)集
丟失或損毀目錄的重要部分可能需要數(shù)周恢復(fù)袱院,
而且部分元數(shù)據(jù)在數(shù)據(jù)丟失后無法重現(xiàn)計算
為了保證可恢復(fù)性屎慢,GooDs系統(tǒng)將Bigtable設(shè)置為保留若干天內(nèi)的滾動窗口快照
GooDs系統(tǒng)自身也有有量身定制的恢復(fù)方案:
a) 新設(shè)一個進程,在獨立的目錄忽洛,專門為重要的數(shù)據(jù)集拍攝快照
b) 另一個進程則備份目錄中提供信息頁的子集腻惠,
在主目錄掉線時數(shù)據(jù)集信息頁服務(wù)仍然可用
c) 此外,GooDs自身也啟用了數(shù)據(jù)集監(jiān)控服務(wù)欲虚,
保證盡早檢測到數(shù)據(jù)損毀或丟失
上述措施都是在修復(fù)目錄的經(jīng)驗中總結(jié)出的方案集灌,
其中有一些曾導(dǎo)致用戶交互服務(wù)出現(xiàn)嚴重中斷事故
7 相關(guān)研究(related work)
這一節(jié)列舉了一些類似的數(shù)據(jù)管理系統(tǒng)
這些系統(tǒng)中的某些用途和GooDs系統(tǒng)差不多,
但是GooDs系統(tǒng)還需要從各方面解決自身面臨的需求痛點
- 數(shù)據(jù)湖(data lake)
GooDs系統(tǒng)可以看做一個數(shù)據(jù)湖复哆,一種用于存儲海量數(shù)據(jù)且訪問便捷的倉庫欣喧,
數(shù)據(jù)在生成的時候無需重新分類
GooDs是用于組織和索引數(shù)據(jù)湖的系統(tǒng),這個數(shù)據(jù)湖包含了Google內(nèi)部所有的數(shù)據(jù)集
其他公司也有類似的系統(tǒng)寂恬,
Google與之不同的地方在于數(shù)據(jù)湖的規(guī)模和post-hoc的元數(shù)據(jù)推斷方式
- 元數(shù)據(jù)的生成方式不同
DataHub, Microsoft Azure Marketplace等數(shù)據(jù)集版本管理系統(tǒng)中续誉,
數(shù)據(jù)集所有者可以選擇主動參與元數(shù)據(jù)的生成
GooDs系統(tǒng)采用了post-hoc方式生成目錄,
工程師在生成和維護數(shù)據(jù)集的時候無需考慮GooDs系統(tǒng)的存在
- 數(shù)據(jù)集與網(wǎng)頁表格的不同
有一些系統(tǒng)可以從html頁面中提取表格
GooDs系統(tǒng)處理的數(shù)據(jù)集和這些表格中的數(shù)據(jù)結(jié)構(gòu)不同
這些表格數(shù)據(jù)沒有元數(shù)據(jù)初肉,而元數(shù)據(jù)對于數(shù)據(jù)集又想當重要
- 快速和高效的搜索
Spyglass等系統(tǒng)提供了強大的基于元數(shù)據(jù)的搜索功能
GooDs系統(tǒng)處理的數(shù)據(jù)集不在一個存儲系統(tǒng)中,
沒有足夠多的現(xiàn)成元數(shù)據(jù)饰躲,
而且GooDs系統(tǒng)旨在提供比搜索更豐富的功能
- 對超大數(shù)據(jù)集進行索引和搜索
已經(jīng)有研究在探索對超大數(shù)據(jù)集進行索引和搜索
GooDs系統(tǒng)需要解決本文第二節(jié)中列舉的各類問題
如果GooDs要搜索數(shù)據(jù)集的實際內(nèi)容而不是元數(shù)據(jù)時牙咏,
這些研究或許相關(guān)性更大
- 血緣關(guān)系管理
PASS和Trio等系統(tǒng)也會維護文件的血緣關(guān)系臼隔,
但是前提是這些血緣信息都是已知的或者能夠從訪問數(shù)據(jù)的進程中獲得
GooDs系統(tǒng)需要依賴一些微弱的信號推斷血緣信息,
但是卻將血緣信息當做數(shù)據(jù)集排序的強信號
8 結(jié)論和展望(conclusions and future work)
- 總結(jié)
本文介紹的數(shù)據(jù)管理系統(tǒng)妄壶,可訪問企業(yè)內(nèi)部數(shù)以十億計的數(shù)據(jù)集的元數(shù)據(jù)
- 挑戰(zhàn)
1) 對數(shù)據(jù)集全排列摔握,鑒別重要數(shù)據(jù)集,數(shù)據(jù)集的排序方法是否和網(wǎng)頁排序方法類似
2) 完善元數(shù)據(jù)需要依賴各種資源和信息
3) 理解隱含在數(shù)據(jù)集中的語義信息能為用戶提供更有效的搜索服務(wù)丁寄,
而對語義的理解也需要借助其他資源比如Google的知識圖譜(Knowledge Graph)
4) 數(shù)據(jù)集產(chǎn)生的時候就在GooDs上注冊能夠保持目錄更新氨淌,
而這種方式需要修改現(xiàn)有的存儲系統(tǒng),與GooDs非侵入式的理念沖突伊磺,
如何結(jié)合非侵入式和侵入式仍然有待解決
- 期望
希望類似GooDs的數(shù)據(jù)管理系統(tǒng)能夠助推數(shù)據(jù)導(dǎo)向型公司培養(yǎng)一種數(shù)據(jù)文化
企業(yè)將數(shù)據(jù)當作企業(yè)核心資產(chǎn)盛正,發(fā)展出類似"代碼規(guī)約"的"數(shù)據(jù)規(guī)約(data discipline)"