国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

提升 Apache Hudi Upsert 性能的三個(gè)建議

這篇具有很好參考價(jià)值的文章主要介紹了提升 Apache Hudi Upsert 性能的三個(gè)建議。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Apache Hudi 社區(qū)一直在快速發(fā)展,各公司正在尋找方法來(lái)利用其強(qiáng)大的功能來(lái)有效地?cái)z取和管理大規(guī)模數(shù)據(jù)集。 每周社區(qū)都會(huì)收到一些常見(jiàn)問(wèn)題,最常見(jiàn)的問(wèn)題與 Hudi 如何執(zhí)行更新插入有關(guān),以確保以低延遲訪問(wèn)最新數(shù)據(jù)。

選擇合適的存儲(chǔ)表類(lèi)型

快速更新插入的主要考慮因素之一是選擇正確的存儲(chǔ)表類(lèi)型。 Hudi 支持兩種不同的存儲(chǔ)表類(lèi)型——Copy-On-Write (COW) 和 Merge-On-Read (MOR)。 由于處理數(shù)據(jù)更新的方法不同,每種表類(lèi)型都會(huì)對(duì) upsert 性能產(chǎn)生不同的影響。

COW表

與 MOR 表相比,COW 表的操作更簡(jiǎn)單,因?yàn)樗懈露紝?xiě)入 Apache Parquet 格式的基礎(chǔ)文件。不需要運(yùn)行像壓縮這樣的單獨(dú)服務(wù)來(lái)管理任何日志文件以提高讀取或存儲(chǔ)效率。COW通過(guò)完全重寫(xiě)文件以生成新版本的基本文件來(lái)處理更新。 因此 COW 表表現(xiàn)出更高的寫(xiě)放大,因?yàn)閯?chuàng)建新的基本文件版本會(huì)進(jìn)行同步合并。 然而 COW 表的一個(gè)關(guān)鍵優(yōu)勢(shì)是它們的零讀取放大,因?yàn)樗袛?shù)據(jù)都在基礎(chǔ)文件中可用,隨時(shí)可以讀取。 查詢(xún)所需的磁盤(pán)讀取很少,因?yàn)樗鼈儾恍枰x取多個(gè)位置或合并數(shù)據(jù)。

MOR表

與 COW 表相比,MOR 表具有更高的操作復(fù)雜性。 MOR 不會(huì)重寫(xiě)整個(gè)文件,而是將更新寫(xiě)入單獨(dú)的日志文件,然后這些日志文件稍后與基本文件合并為一個(gè)新的文件版本,這是通過(guò)壓縮服務(wù)完成的。 需要壓縮來(lái)限制日志文件的增長(zhǎng),這樣查詢(xún)性能就不會(huì)下降并優(yōu)化存儲(chǔ)。

直接寫(xiě)入日志文件避免了多次重寫(xiě)整個(gè)基本文件,從而降低了寫(xiě)入放大——如果正在處理流數(shù)據(jù),這種差異就會(huì)變得很明顯,也就是說(shuō) MOR 表進(jìn)行了寫(xiě)入優(yōu)化。 但是由于需要讀取基本文件和日志文件并動(dòng)態(tài)合并數(shù)據(jù),MOR 表在壓縮之間對(duì)快照查詢(xún)有更高的讀取放大。

COW 和 MOR 表的注意事項(xiàng)

如果更新插入比率很高并且對(duì)攝取延遲很敏感,那么更適合使用 MOR 表。 如流數(shù)據(jù)源——通常會(huì)希望更快地根據(jù)洞察采取行動(dòng),以便為用戶提供相關(guān)和及時(shí)的信息。 但是如果工作負(fù)載更多地基于插入,并且可以容忍合理的攝取延遲,那么更適合使用 COW 表。

根據(jù)記錄鍵選擇正確的索引類(lèi)型

通過(guò)利用索引,Hudi 在更新插入期間查找記錄時(shí)避免全表掃描,這比較耗費(fèi)時(shí)間和資源。 Hudi 的索引層將記錄鍵映射到相應(yīng)的文件位置,索引層是可插拔的,有多種索引類(lèi)型可供選擇。 需要考慮的是索引延遲取決于多種因素,例如正在攝取多少數(shù)據(jù)、表中有多少數(shù)據(jù)、是否有分區(qū)表或非分區(qū)表、選擇的索引類(lèi)型、工作負(fù)載的更新程度和記錄鍵的時(shí)間特性。 根據(jù)所需的性能和唯一性保證,Hudi 提供了不同的開(kāi)箱即用的索引策略,可以分為全局或非全局索引。

全局與非全局索引

  • 非全局索引:Hudi 確保一對(duì)分區(qū)路徑和記錄鍵在整個(gè)表中是唯一的。 索引查找性能與正在攝取的傳入記錄之間的匹配分區(qū)的大小成正比。 ?

  • 全局索引:該索引策略在表的所有分區(qū)中強(qiáng)制執(zhí)行鍵的唯一性,即保證對(duì)于給定的記錄鍵,表中恰好存在一條記錄。 全局索引提供了更強(qiáng)的保證,但是更新/刪除成本隨著表的大小而增長(zhǎng)。

由于唯一性保證的差異,全局與非全局之間的主要考慮因素之一與索引查找延遲有關(guān):
非全局索引僅查找匹配的分區(qū):例如如果有 100 個(gè)分區(qū)并且傳入的批處理僅包含最后 2 個(gè)分區(qū)的記錄,則只會(huì)查找屬于這 2 個(gè)分區(qū)的文件組。 對(duì)于大規(guī)模的更新插入工作負(fù)載可能需要考慮非全局索引,例如非全局布隆、非全局簡(jiǎn)單索引和桶索引。
全局索引查看所有分區(qū)中的所有文件組:例如如果有 100 個(gè)分區(qū)并且傳入的記錄批次中有最后 2 個(gè)分區(qū)的記錄,則將查找所有 100 個(gè)分區(qū)中的所有文件組(因?yàn)?Hudi 必須保證整個(gè)表中只有一個(gè)版本的記錄鍵)。 這會(huì)增加大規(guī)模更新插入工作負(fù)載的延遲。

Hudi 提供開(kāi)箱即用的索引類(lèi)型

  • 布隆索引:這是一種索引策略,可以有效地管理文件組中的更新插入和記錄查找。 該索引利用布隆過(guò)濾器,這是一種概率數(shù)據(jù)結(jié)構(gòu),有助于確定給定記錄鍵是否存在于特定文件組中。適用于全局和非全局索引。

  • 簡(jiǎn)單索引:這是一種索引策略,它提供了一種將記錄鍵映射到其相應(yīng)文件組的直接方法。它針對(duì)從存儲(chǔ)表中提取的鍵執(zhí)行傳入更新/刪除記錄的連接。適用于全局和非全局索引。

  • HBase索引:該索引策略使用HBase存儲(chǔ)索引來(lái)映射記錄鍵及其在文件組中對(duì)應(yīng)的文件位置。 適用于全局索引。

  • 桶索引:這是一種索引策略,它使用散列將記錄路由到靜態(tài)分配的文件組。 適用于非全局索引。

  • 一致性哈希桶索引:這是一種索引策略,是桶索引的高級(jí)版本。 雖然桶索引需要為每個(gè)分區(qū)預(yù)先分配文件組,但使用一致的哈希索引可以根據(jù)負(fù)載動(dòng)態(tài)地增加或收縮每個(gè)分區(qū)的文件組。 適用于非全局索引。

更新密集型工作負(fù)載要考慮的索引類(lèi)型

  • Bloom 索引:如果記錄鍵按某些標(biāo)準(zhǔn)(例如基于時(shí)間戳)排序并且更新與最近的數(shù)據(jù)集相關(guān),那么這對(duì)于更新繁重的工作負(fù)載是一個(gè)很好的索引策略。 例如如果記錄鍵是根據(jù)時(shí)間戳排序的,并且我們?cè)谧罱鼛滋旄聰?shù)據(jù)。
    • Bloom 索引用例:假設(shè)每 10 分鐘就會(huì)攝取一批新數(shù)據(jù)。 我們假設(shè)新批次包含最近 3 天內(nèi)的數(shù)據(jù)更新。 Hudi 根據(jù)布隆索引,識(shí)別出文件組中的候選更新記錄,并從基礎(chǔ)文件頁(yè)腳中獲取布隆過(guò)濾器,進(jìn)一步裁剪文件組中每個(gè)文件中要查找的記錄。 如果沒(méi)有找到記錄則被視為插入。?
  • 簡(jiǎn)單索引:如果偶爾更新整個(gè)表范圍內(nèi)的文件并且記錄鍵是隨機(jī)的,即不基于時(shí)間戳,那么這對(duì)于更新繁重的工作負(fù)載是一個(gè)很好的索引策略。
    • 簡(jiǎn)單索引用例:如果有一個(gè)維度表,其中記錄鍵是旅行 ID(隨機(jī) UUID)并且分區(qū)是按城市 ID。 如果我們要更新分布在一系列城市的 10000 條行程,Hudi 首先根據(jù)傳入的城市 ID 識(shí)別相關(guān)分區(qū)。 Hudi 通過(guò)執(zhí)行連接有效地找到包含記錄的文件。
  • 桶索引:如果每個(gè)分區(qū)存儲(chǔ)的數(shù)據(jù)總量在所有分區(qū)中都相似,這是一個(gè)很好的索引策略。 每個(gè)分區(qū)的桶(或文件組)數(shù)量必須預(yù)先為給定的表定義。更多細(xì)節(jié)參考如下文檔。
    • 桶索引用例:當(dāng)定義桶數(shù)量后,Hudi會(huì)對(duì)記錄鍵應(yīng)用一個(gè)哈希函數(shù)來(lái)將記錄均勻地分布在桶中。 哈希函數(shù)將每個(gè)記錄 ID 分配給一個(gè)桶號(hào),當(dāng)更新時(shí) Hudi 將哈希函數(shù)應(yīng)用于記錄 ID 并確定相應(yīng)的桶,然后 Hudi 將寫(xiě)入委托給相應(yīng)的桶(文件組)。

分區(qū)路徑粒度

分區(qū)是一種技術(shù),用于根據(jù)數(shù)據(jù)集中的某些屬性或列將大型數(shù)據(jù)集拆分為較小的、易于管理的部分。 這可以大大提高查詢(xún)性能,因?yàn)樵诓樵?xún)期間只需要掃描數(shù)據(jù)的一個(gè)子集。 然而分區(qū)的有效性在很大程度上取決于分區(qū)的粒度。

一個(gè)常見(jiàn)的誤區(qū)是將分區(qū)設(shè)置得過(guò)于精細(xì),例如按 <city>/<day>/<hour> 劃分分區(qū)。 根據(jù)工作負(fù)載每小時(shí)粒度的數(shù)據(jù)可能不足,從而導(dǎo)致許多只有幾千字節(jié)的小文件。 如果小文件越多,磁盤(pán)尋道成本就越高,查詢(xún)性能就會(huì)下降。 其次在攝取方面,小文件也會(huì)影響索引查找,因?yàn)樾藜舨幌嚓P(guān)文件需要更長(zhǎng)的時(shí)間。 根據(jù)正在使用的索引策略,這可能會(huì)影響寫(xiě)入性能。因此建議用戶始終從較粗糙的分區(qū)方案開(kāi)始,如 / 以避免小文件的問(wèn)題,如果仍然覺(jué)得需要粒度分區(qū),可以根據(jù)查詢(xún)模式重新評(píng)估分區(qū)方案和/或可以潛在地利用Clustering服務(wù)來(lái)平衡攝取和查詢(xún)性能。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-452663.html

到了這里,關(guān)于提升 Apache Hudi Upsert 性能的三個(gè)建議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Apache Hudi初探(十)(與spark的結(jié)合)--hudi的Compaction操作

    在之前的文章Apache Hudi初探(六)(與spark的結(jié)合) 中,我們沒(méi)有過(guò)多的解釋Spark中 hudi Compaction 的實(shí)現(xiàn),在這里詳細(xì)說(shuō)一下 注意:在hudi中有同步,異步Compaction的概念,為了保證寫(xiě)入的及時(shí)性和數(shù)據(jù)讀取的時(shí)效性,hudi在一步compaction的過(guò)程中會(huì)引入一個(gè)后臺(tái)線程進(jìn)行compaction,所以異

    2024年02月15日
    瀏覽(30)
  • Apache hudi 核心功能點(diǎn)分析

    Apache hudi 核心功能點(diǎn)分析

    文中部分代碼對(duì)應(yīng) 0.14.0 版本 初始的需求是Uber公司會(huì)有很多記錄級(jí)別的更新場(chǎng)景,Hudi 在Uber 內(nèi)部主要的一個(gè)場(chǎng)景,就是乘客打車(chē)下單和司機(jī)接單的匹配,乘客和司機(jī)分別是兩條數(shù)據(jù)流,通過(guò) Hudi 的 Upsert 能力和增量讀取功能,可以分鐘級(jí)地將這兩條數(shù)據(jù)流進(jìn)行拼接,得到乘客

    2024年02月02日
    瀏覽(23)
  • Apache Hudi Timeline Server介紹

    Hudi 有一個(gè)中央時(shí)間線服務(wù)器,在驅(qū)動(dòng)程序節(jié)點(diǎn)中運(yùn)行并作為 Rest 服務(wù)。它有多種好處,第一個(gè)用例是提供 FileSystemView api。 Hudi 的核心是維護(hù)一個(gè) TableFileSystemView,它暴露 API 來(lái)獲取給定數(shù)據(jù)集的文件狀態(tài),驅(qū)動(dòng)程序和執(zhí)行程序?qū)⒃趯?xiě)入和表服務(wù)生命周期的不同時(shí)間點(diǎn)查詢(xún)?cè)摖?/p>

    2024年02月12日
    瀏覽(25)
  • Apache Hudi初探(五)(與flink的結(jié)合)--Flink 中hudi clean操作

    本文主要是具體說(shuō)說(shuō)Flink中的clean操作的實(shí)現(xiàn) 在flink中主要是 CleanFunction 函數(shù): open函數(shù) writeClient =FlinkWriteClients.createWriteClient(conf, getRuntimeContext()) 創(chuàng)建FlinkWriteClient,用于寫(xiě)hudi數(shù)據(jù) this.executor = NonThrownExecutor.builder(LOG).waitForTasksFinish(true).build(); 創(chuàng)建一個(gè)只有一個(gè)線程的線程池,改

    2024年02月06日
    瀏覽(30)
  • Apache Hudi初探(一)(與flink的結(jié)合)

    和 Spark 的使用方式不同, flink 結(jié)合 hudi 的方式,是以 SPI 的方式,所以不需要像使用 Spark 的方式一樣, Spark 的方式如下: (這里不包括 org.apache.spark.sql.sources.DataSourceRegister ) Flink 結(jié)合 Hudi 的方式,只需要引入了對(duì)應(yīng)的jar包即可,以 SPI 的方式: 其中 HoodieTableFactory 是讀寫(xiě) H

    2024年02月16日
    瀏覽(21)
  • Apache Hudi初探(二)(與flink的結(jié)合)--flink寫(xiě)hudi的操作(JobManager端的提交操作)

    Apache Hudi初探(二)(與flink的結(jié)合)--flink寫(xiě)hudi的操作(JobManager端的提交操作)

    在Apache Hudi初探(一)(與flink的結(jié)合)中,我們提到了 Pipelines.hoodieStreamWrite 寫(xiě)hudi文件 ,這個(gè)操作真正寫(xiě)hudi是在 Pipelines.hoodieStreamWrite 方法下的 transform(opName(\\\"stream_write\\\", conf), TypeInformation.of(Object.class), operatorFactory) ,具體分析一下寫(xiě)入的過(guò)程。 對(duì)于 transform(opName(\\\"stream_write\\\", conf), Ty

    2024年02月12日
    瀏覽(23)
  • Apache Hudi初探(三)(與flink的結(jié)合)--flink寫(xiě)hudi的操作(真正的寫(xiě)數(shù)據(jù))

    在之前的文章中Apache Hudi初探(二)(與flink的結(jié)合)–flink寫(xiě)hudi的操作(JobManager端的提交操作) 有說(shuō)到寫(xiě)hudi數(shù)據(jù)會(huì)涉及到 寫(xiě)hudi真實(shí)數(shù)據(jù) 以及 寫(xiě)hudi元數(shù)據(jù) ,這篇文章來(lái)說(shuō)一下具體的實(shí)現(xiàn) 這里的操作就是在 HoodieFlinkWriteClient.upsert 方法: initTable 初始化HoodieFlinkTable preWrite 在這里幾乎沒(méi)

    2024年02月10日
    瀏覽(19)
  • Apache Hudi 1.x 版本重磅功能展望與討論

    Apache Hudi 社區(qū)正在對(duì)Apache Hudi 1.x版本功能進(jìn)行討論,歡迎感興趣同學(xué)參與討論,PR鏈接:https://github.com/apache/hudi/pull/8679/files 此 RFC 提議對(duì) Hudi 中的事務(wù)數(shù)據(jù)庫(kù)層進(jìn)行令人興奮和強(qiáng)大的重構(gòu),以推動(dòng)未來(lái)幾年整個(gè)社區(qū)的持續(xù)創(chuàng)新。 在過(guò)去的幾年里,社區(qū)成長(zhǎng)(https://git-contributo

    2024年02月07日
    瀏覽(19)
  • Hudi集成Hive時(shí)的異常解決方法 java.lang.ClassNotFoundException: org.apache.hudi.hadoop.HoodieParquetInputFormat

    使用 Hive CLI 連接 Hive 3.1.2 并查詢(xún)對(duì)應(yīng)的 Hudi 映射的 Hive 表,發(fā)現(xiàn)如下異常: 根據(jù)報(bào)錯(cuò)信息 Caused by: java.lang.ClassNotFoundException: org.apache.hudi.hadoop.HoodieParquetInputFormat 推斷時(shí)缺少相應(yīng)的 Jar 包所導(dǎo)致的異常。 翻看 Hudi 0.10.0 集成 Hive 的文檔,文檔鏈接,可以看到需要將 hudi-hadoop-m

    2024年02月01日
    瀏覽(30)
  • Apache Hudi 在袋鼠云數(shù)據(jù)湖平臺(tái)的設(shè)計(jì)與實(shí)踐

    Apache Hudi 在袋鼠云數(shù)據(jù)湖平臺(tái)的設(shè)計(jì)與實(shí)踐

    在大數(shù)據(jù)處理中,實(shí)時(shí)數(shù)據(jù)分析是一個(gè)重要的需求。隨著數(shù)據(jù)量的不斷增長(zhǎng),對(duì)于實(shí)時(shí)分析的挑戰(zhàn)也在不斷加大,傳統(tǒng)的批處理方式已經(jīng)不能滿足實(shí)時(shí)數(shù)據(jù)處理的需求,需要一種更加高效的技術(shù)來(lái)解決這個(gè)問(wèn)題。Apache Hudi(Hadoop Upserts Deletes and Incremental Processing)就是這樣一種

    2024年02月06日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包