<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Apache Hudi將流處理帶到巨量資料,相比傳統批次處理效率高一個數量級,提供了更新鮮的資料。在資料湖/倉庫中,需要在攝取速度和查詢效能之間進行權衡,資料攝取通常更喜歡小檔案以改善並行性並使資料儘快可用於查詢,但很多小檔案會導致查詢效能下降。在攝取過程中通常會根據時間在同一位置放置資料,但如果把查詢頻繁的資料放在一起時,查詢引擎的效能會更好,大多數系統都傾向於支援獨立的優化來提高效能,以解決未優化的資料佈局的限制。本部落格介紹了一種稱為Clustering[RFC-19]的服務,該服務可重新組織資料以提高查詢效能,也不會影響攝取速度。
Hudi通過其寫入使用者端API提供了不同的操作,如insert/upsert/bulk_insert來將資料寫入Hudi表。為了能夠在檔案大小和攝取速度之間進行權衡,Hudi提供了一個hoodie.parquet.small.file.limit
設定來設定最小檔案大小。使用者可以將該設定設定為0
以強制新資料寫入新的檔案組,或設定為更高的值以確保新資料被"填充"到現有小的檔案組中,直到達到指定大小為止,但其會增加攝取延遲。
為能夠支援快速攝取的同時不影響查詢效能,我們引入了Clustering服務來重寫資料以優化Hudi資料湖檔案的佈局。
Clustering服務可以非同步或同步執行,Clustering會新增了一種新的REPLACE
操作型別,該操作型別將在Hudi後設資料時間軸中標記Clustering操作。
總體而言Clustering分為兩個部分:
•排程Clustering:使用可插拔的Clustering策略建立Clustering計劃。•執行Clustering:使用執行策略處理計劃以建立新檔案並替換舊檔案。
排程Clustering會有如下步驟
•識別符合Clustering條件的檔案:根據所選的Clustering策略,排程邏輯將識別符合Clustering條件的檔案。•根據特定條件對符合Clustering條件的檔案進行分組。每個組的資料大小應為targetFileSize
的倍數。分組是計劃中定義的"策略"的一部分。此外還有一個選項可以限制組大小,以改善並行性並避免混排大量資料。•最後將Clustering計劃以avro後設資料格式儲存到時間線。
•讀取Clustering計劃,並獲得clusteringGroups
,其標記了需要進行Clustering的檔案組。•對於每個組使用strategyParams範例化適當的策略類(例如:sortColumns),然後應用該策略重寫資料。•建立一個REPLACE
提交,並更新HoodieReplaceCommitMetadata中的後設資料。
Clustering服務基於Hudi的MVCC設計,允許繼續插入新資料,而Clustering操作在後臺執行以重新格式化資料佈局,從而確保並行讀寫者之間的快照隔離。
注意:現在對錶進行Clustering時還不支援更新,將來會支援並行更新。
使用Spark可以輕鬆設定內聯Clustering,參考如下範例
import org.apache.hudi.QuickstartUtils._</code><code>import scala.collection.JavaConversions._</code><code>import org.apache.spark.sql.SaveMode._</code><code>import org.apache.hudi.DataSourceReadOptions._</code><code>import org.apache.hudi.DataSourceWriteOptions._</code><code>import org.apache.hudi.config.HoodieWriteConfig._</code><code>val df = //generate data frame</code><code>df.write.format("org.apache.hudi").</code><code> options(getQuickstartWriteConfigs).</code><code> option(PRECOMBINE_FIELD_OPT_KEY, "ts").</code><code> option(RECORDKEY_FIELD_OPT_KEY, "uuid").</code><code> option(PARTITIONPATH_FIELD_OPT_KEY, "partitionpath").</code><code> option(TABLE_NAME, "tableName").</code><code> option("hoodie.parquet.small.file.limit", "0").</code><code> option("hoodie.clustering.inline", "true").</code><code> option("hoodie.clustering.inline.max.commits", "4").</code><code> option("hoodie.clustering.plan.strategy.target.file.max.bytes", "1073741824").</code><code> option("hoodie.clustering.plan.strategy.small.file.limit", "629145600").</code><code> option("hoodie.clustering.plan.strategy.sort.columns", "column1,column2"). //optional, if sorting is needed as part of rewriting data</code><code> mode(Append).</code><code> save("dfs://location");
對於設定更高階的非同步Clustering管道,參考此處範例。
我們使用生產環境表的一個分割區建立了一個資料集,該表具有約2000萬條記錄,約200GB,資料集具有多個session_id
的行。使用者始終使用對談謂詞查詢資料,單個對談的資料會分佈在多個資料檔案中,因為資料攝取會根據到達時間對資料進行分組。下面實驗表明通過對對談進行Clustering可以改善資料區域性性並將查詢執行時間減少50%以上。
查詢SQL如下
spark.sql("select * from table where session_id=123")
查詢花費了2.2分鐘。請注意查詢計劃的"掃描parquet"部分中的輸出行數包括表中的所有2000W行。
查詢計劃與上面類似,但由於改進了資料區域性性和謂詞下推,Spark可以修剪很多行。進行Clustering後,相同的查詢在掃描parquet檔案時僅輸出11萬行(2000萬行中的),這將查詢時間從2.2分鐘減少到不到一分鐘。
下表總結了使用Spark3執行的實驗對查詢效能的改進
Table State | Query runtime | Num Records Processed | Num files on disk | Size of each file |
Unclustered | 130,673 ms | ~20M | 13642 | ~150 MB |
Clustered | 55,963 ms | ~110K | 294 | ~600 MB |
Clustering後查詢執行時間減少了60%,在其他樣本資料集上也觀察到了類似的結果,請參閱範例查詢計劃和RFC-19效能評估上的更多詳細資訊。
我們希望大型表能夠大幅度提高速度,與上面的範例不同,查詢執行時間幾乎完全由實際I/O而不是查詢計劃決定。
使用Clustering,我們可以通過以下方式提高查詢效能:
利用空間填充曲線之類的概念來適應資料湖佈局並減少查詢讀取的資料量。
將小檔案合併成較大的檔案以減少查詢引擎需要掃描的檔案總數。
Clustering使得巨量資料進行流處理,攝取可以寫入小檔案以滿足流處理的延遲要求,可以在後臺使用Clustering將這些小檔案重寫成較大的檔案並減少檔案數。
除此之外,Clustering框架還提供了根據特定要求非同步重寫資料的靈活性,我們預見到許多其他用例將採用帶有自定義可插拔策略的Clustering框架來按需管理資料湖資料,如可以通過Clustering解決如下一些用例:
重寫資料並加密資料。
從表中修剪未使用的列並減少儲存空間。
以上就是Apache Hudi資料佈局黑科技降低一半查詢時間的詳細內容,更多關於Apache Hudi資料佈局查詢的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45