最新版本的Hive 0.13發布,增加ACID特性

2021-01-11 CSDN技術社區

【編者按】近日發布的Hive 0.13中採用了ACID語義的事務機制,在分區層保證事務原子性、一致性和持久性,並通過開啟ZooKeeper或內存中的鎖機制保證事務隔離性。數據流攝取、緩慢變化維、數據重述這些新的用例在新版本中成為了可能,當然新版Hive中也還存在一些不足,Hive新版本具體帶來哪些改變呢?作者Alan Gates為我們帶來了精彩分析。

以下為原文:

什麼是ACID,有什麼作用?

ACID代表資料庫事務中的4個特性,原子性(任何一個資料庫操作要麼被完整執行,要麼完全不執行)、一致性(一旦應用程式執行了一個操作,操作的結果對於每一個之後的操作都是可見的)、隔離性(一個用戶的操作不會對其他用戶產生意料之外的副作用)、持久性(一旦一個操作被完成,這些操作也將被記錄下來,即使機器或者系統出現故障,也要保證這些記錄的完整性)。這些特性一直被認為是事務功能的重要組成部分。

在最近發布的Hive 0.13中,事務的原子性、一致性和持久性在分區層得到保證,隔離性則通過開啟ZooKeeper或內存中可用的鎖機制來保證。通過在Hive 0.13中加入事務,實現在行級提供全部的ACID語義,這樣的話,一個應用程式可以添加行,而另一個應用程式可以從同一分區中讀取數據,互相之間不會產生幹擾。

採用ACID語義的事務機制被添加到Hive中來處理以下的用例:

數據流攝取( streaming ingest of data)。許多用戶都會使用Apache Flume、Apache Storm或Apache Kafka之類的工具,這些工具可以將數據寫入到Hadoop集群,寫入數據的速率達到每秒數百行,而Hive可以每隔15分鐘到1個小時添加一個分區,然而,添加太多分區也經常會造成表的混亂。這些工具也可以將數據寫入到現有分區中,但這又可能會導致讀取數據時產生髒讀(他們讀取的數據在執行查詢之後被修改了),而且在他們的目錄中會產生的許多小文件,對NameNode造成壓力。有了數據流攝取這一新功能,用例將允許讀者得到數據的一致視圖,同時避免產生過多的文件。緩慢變化維(slow changing dimensions)。在一個典型星型架構的數據倉庫中,隨著時間推移,維度表變化的很慢。例如,一家零售商新開一個商店時,那這個商店就需要添加「商店表」中,但也有可能只是對現有商店進行擴充,也許還會添加一些新的服務。這些變化會導致向數據倉庫中插入一些新的記錄或者對已有記錄進行更改(具體取決於選擇的策略)。Hive目前無法支持這些操作,只要INSERT ... VALUES、UPDATE和DELETE這些操縱被支持,緩慢變化維將成為可能。數據重述(data restatement)。有時候收集到的數據不正確,需要一些修正,有可能數據的第一個實例已經近似(90%的伺服器報告)稍後提供的完整數據,有可能某些事務由於後續事務還需要被重述(例如:在一次交易中,客戶可能會購買會員資格,並因此有權享受折扣價,包括之前的交易也需要享受這個折扣價),還有可能用戶會在他們交易關係終止時,會根據合同要求刪除他們的用戶數據。只要INSERT ... VALUES、UPDATE和DELETE這些操作被支持,數據重述也將成為可能。

不足:

在Hive 0.13中,還不支持INSERT……VALUES、UPDATE和DELETE等操作,BEGIN、COMMIT和ROLLBACK等操作也還沒有得到支持,這些功能計劃在下一個版本中實現。在Hive 0.13的第一版本中還只能支持ORC文件格式。事務能否被任何存儲格式使用決定了更新或刪除操作如何應用於基礎記錄(實際上,基礎記錄中有顯式或隱式的行id),但到目前為止,整合工作還只能用ORC格式完成。流攝取接口(見下文)還不能與Hive中已有的INSERT INTO操作很好的整合。如果表使用流攝取接口,那通過INSERT INTO添加的任何數據都會丟失。不過INSERT OVERWRITE仍然可用,而且能用於流攝取,它通過流攝取刪除插入數據就像是通過其他方式將數據寫入到該分區一樣。在Hive 0.13中,事務默認是被關閉的。請參閱下面的配置部分,Hive中的一些關鍵項需要進行手動配置。表必須被bucketed以更好地利用這些功能。同一個系統中沒有使用事務和ACID的表不需要被bucket。僅能支持快照級別隔離。當給定的查詢啟動後,將會產生一致的數據快照。不支持髒讀、已提交讀取、可重複讀取,以及串行化。引入BEGIN後,將支持快照隔離事務,為的是保證事務持久性,而不僅僅為了完成一次查詢。其他隔離級別可以根據用戶要求添加。現有的Zookeeper和內存鎖管理器與事務不兼容。目前還沒有打算解決這一問題,要想了解如何為事務存儲鎖,請參見下面的基礎設計。

流攝入接口

有關使用流數據攝入的詳細信息,請參閱StreamingDataIngest。

語法變化

多個新命令被添加到Hive的DDL中以支持ACID和事務,一些現有的DDL也被做了一些修改。

例如:新加入的SHOW TRANSACTIONS命令,有關該命令的詳細信息,請參閱ShowTransactions。

SHOW COMPACTIONS也是一個新加入的命令,詳細信息請參閱ShowCompactions。

原有的SHOW LOCKS命令被修改,以提供與事務相關的新鎖信息。如果你正在使用ZooKeeper或者內存鎖命令,你會注意到這條命令在輸出上並沒有多大改變,詳細信息請參閱ShowLocks。

ALTER TABLE中添加了一個新的選項,用來壓縮表或分區。一般用戶不需要去請求壓縮,因為系統會檢測到他們的需求,然後自動啟動壓縮。但是,如果一個表壓縮被意外終止或者一個用戶想要去手動壓縮表,ALTER TABLE可以滿足用戶,提供手動啟動壓縮,有關詳細信息,請參閱AlterTable/PartitionCompact。ALTER TABLE會將請求排入隊列、壓縮並返回請求,如果用戶想看到壓縮的進展情況,可以使用SHOW COMPACTIONS命令。

基礎設計

HDFS不支持對文件進行更改。在寫入者向文件進行寫入操作,同時文件被其他用戶讀取這種情況下,它無法保證讀取的一致性。為了在HDFS上提供這一功能,我們採用在其他數據倉庫工具使用的標準方法,將表或分區數據存儲在一組基礎文件中,將新記錄、更新和刪除操作存儲在delta文件中。 為每個事務創建一組新delta文件(或者在流代理如:Flume或Storm中,為每一批事務創建一組新delta文件),更改表或分區。在讀取時,讀取器將基礎文件和delta文件合併,應用更新和刪除操作。

有時這些變化需要合併成基礎文件,一組線程必須添加到Hive metastore中。他們確定什麼時候需要壓縮,然後執行壓縮,最後進行清理(刪除舊文件)。壓縮的類型分兩種,次要的和主要的。次要壓縮採用一組現有的delta文件,並為每一次bucket重寫一個delta文件。主要壓縮則要為每個bucket寫一個或多個delta文件,為每一次bucket重寫一個新基礎文件。所有壓縮都在後臺完成,並不妨礙數據的並發讀取和寫入。在一次壓縮後,系統會等待直到所有舊文件的讀取結束,然後刪除舊的文件。

以前一個分區(或如果沒有分區表的表)的所有文件都放在單個目錄中。因為這些變化,所有採用ACID思想寫入的分區都將有一個基礎文件的目錄,以及delta文件集目錄。

新鎖管理器DbLockManager也添加到了Hive中。該鎖管理器將所有鎖信息存儲在metastore中,此外所有事務也存儲在metastore中。這意味著事務和鎖即使在伺服器出現故障時也能保證持久性,為了避免客戶端死機、離開或者鎖掛起,鎖持有者和事務啟動器需要向metastore發出心跳信號(heartbeat),如果在給定的時間內伺服器沒有收到客戶端發出的心跳信號,該鎖或事務將被中止。

配置

許多新配置關鍵項被添加到系統用以支持事務。 

配置關鍵項

默認值

事務啟動值

注釋

hive.txn.manager      

org.apache.hadoop.

hive.ql.lockmgr.

DummyTxnManager

org.apache.hadoop.

hive.ql.lockmgr.

DbTxnManager

DummyTxnManager延用了Hive 0.13之前的做法,不提供事務。

hive.txn.timeout 

300

如果在這段時間內,客戶端沒有發出心跳信號,事務就會被宣告終止。

hive.txn.max.

open.batch

1000

事務的最大數量,可以用open_txns()獲取。

hive.compactor.

initiator.on

false

true (for exactly one instance of the Thrift metastore service)

是否在該metastore實例上運行啟動器和垃圾清理線程。

hive.compactor.

worker.threads

0

> 0 on at least one instance of the Thrift metastore service

有多少工作線程在該metastore實例上運行。

hive.compactor.

worker.timeout

86400

壓縮作業在該時間內未完成將被宣布失敗,壓縮操作被重新排入隊列。

hive.compactor.

check.interval

300

檢查是否有分區需要被壓縮。

hive.compactor.

delta.num.threshold

10

delta目錄的數目,達到該數後將觸發次要壓縮。

hive.compactor.

delta.pct.threshold

0.1

與基礎文件中delta文件的百分比,達到該值會觸發主要壓縮。(1 = 100%)

hive.compactor.

abortedtxn.threshold

1000

給定分區中已中止事務的數目,達到該數會也會觸發主要壓縮。

hive.txn.max.open.batch控制多個事務流代理,如Flume或Storm。流代理將多個詞條寫到單個文件中(每個Flume代理或每個Storm螺栓)。因此,增加該值可以減少流代理創建的文件數,但增加此值也增加了開放事務的數目(Hive需要追蹤),這可能會影響讀取的性能。

工作線程為壓縮操作產生了許多MapReduce作業,而它們自身並沒有做壓縮。確定進行表壓縮後,增加工作線程的數目會減少表壓縮的時間。隨著更多的MapReduce作業在後臺運行,Hadoop集群的後臺負載也在增加。

減小此值將減少壓縮表或分區的時間。當然,首先得檢查壓縮是否必要,這需要為每個表或分區調用多個NameNode,降低此值可以減少NameNode的負載。

表屬性

如果表的所有者不希望系統自動確定何時要壓縮,那麼可以手動設置表屬性NO_AUTO_COMPACTION,用來阻止所有的自動壓縮操作。

原文連結:

ACID and Transactions in Hive (翻譯/毛夢琪 責編/魏偉)

以「 雲計算大數據 推動智慧中國 」為主題的 第六屆中國雲計算大會 將於5月20-23日在北京國家會議中心隆重舉辦。產業觀察、技術培訓、主題論壇、行業研討,內容豐富,乾貨十足。票價優惠,馬上 報名 ! 

本文為CSDN原創文章,未經允許不得轉載,如需轉載請聯繫market#csdn.net(#換成@)

相關焦點

  • HBase 2.0版本正式發布
    - 0.92.0版本於2012年1月23日發布,共包含695個Issues。- 0.94.0版本於2012年5月14日發布,共包含423個Issues。- 0.96.0版本於2013年10月19日發布,共包含290個Issues。- 0.98.0版本於2014年2月16日發布,共包含1307個Issues。
  • 大數據實踐HIVE詳解
    事務有四大特性:A、C、I、D (原子性、一致性、隔離性、持久性) Atomicity: 不可再分割的工作單位,事務中的所有操作要麼都發,要麼都不發。Consistency: 事務開始之前和事務結束以後,資料庫的完整性約束沒有被破壞。這是說資料庫事務不能破壞關係數據的完整性以及業務邏輯上的 一致性。
  • KingRoot 5.0版本正式發布
    大家好,我們已於11月16日正式對外發布了KingRoot 5.0正式版!
  • 夜神安卓模擬器V3.6.0.0最新版本震撼來襲
    日前,夜神安卓模擬器強勢發布最新版本V3.6.0.0版本正式發布,全新功能震撼上線繼續領跑安卓模擬器市場。據了解,最新發布的夜神安卓模擬器V3.6.0.0版本在設計、產品性能等方面均有大幅度提高,主要針對高畫質遊戲卡頓和卡死、部分手遊登入、網絡連接問題等問題進行了集中解決和優化,並針對用戶的意見反饋開發了雙指操控等新功能。新增雙指操控功能體驗手機操作快感
  • OBS Studio | 26.0版本新特性說明
    當前 OBS Studio 最新版本已經來到了 26.0.2,最新版 OBS 為我們帶來了哪些新功能特性,是否值得升級?大家一起看過來。
  • 《寶可夢Home》V1.2.1更新版本發布:增加大量新功能!
    《寶可夢Home》於8月17日發布了V1.2.1更新版本,改善了寶可夢的篩選功能,追加了大量新功能,同時修復了一些之前版本中存在的BUG。部落菌為大家提供了最新版本的下載地址,一起來看看吧~V1.2.1版本更新內容:・改善GTS內「搜索寶可夢」後得到的搜索結果的篩選功能。-將「傳說及幻之寶可夢」更改為「傳說及幻之寶可夢等特別的寶可夢」。-可篩選自己寄放到《Pokémon HOME》裡的寶可夢。・可同時往奇蹟盒子裡寄放複數寶可夢。
  • QQ郵箱發布Android版本6.0.0:增加日程邀請,地理位置
    玩懂手機網資訊,QQ 郵箱發布 Android 版本 V6.0.0,新的版本可以在寫郵件時,可以將日程邀請,地理位置以及在線文檔增加到郵件中,在寫郵件和記事時,可隨時將窗口收為浮窗,方便切換,日曆功能更新,可以便捷的為自己添加日曆提醒,調整了設置入口的位置。
  • 360極速瀏覽器論壇體驗版更新至 13.0.1106.0版本
    玩懂手機網資訊,360 極速瀏覽器論壇體驗版更新至 13.0.1106.0 版本。新的 360 極速瀏覽器 13 版本將內核升級至 Chromium 86,給用戶帶來了更優質、更安全的網頁瀏覽體驗。極速瀏覽器升級 Chromium 86 後的新特性:加入了將 Java 在後臺網站限制每分鐘只可喚醒一次的功能。
  • SpringBoot 增強庫 yue-library 2.1.0 發布,提供更多特性支持
    本次發布是一次歷時9個月的大版本發布,雖然yue-library一直在不斷的更新,但這次大版本的發布意味著yue-library看到了更遠也能走得更遠,為後續多租戶、國產化、數據脫敏等趨勢需求打下了堅定基礎。本次更新分離了響應式編程與阻塞式編程,對Auth認證模塊也做了相應的拆分與優化,同時從此版本開始對開發文檔進行了進一步支持,區分各大本版文檔說明,增加歷史文檔專區。
  • Android Studio啟用新代號,新版本Arctic Fox(白狐)重點新特性一覽!
    Android Studio 的最新穩定版本為4.1,4.2版本也已經發布到Beta渠道。但是4.2 版本將會是Android Studio 數字命名的最後一個版本了,此後,Google 將採用新的命名規則來為Android Studio 命名。
  • 最新版PS,ACR13.0解鎖調色新姿勢!
    我9月份的時候更新了一次Adobe 2020全家桶,因為2021馬上就要在10月份發布正式版了,以為2020不會再有新的更新了!結果Adobe官方在10月1日雙節臨時更新了一次,長工昨晚整到資源,下載測試完畢,現在分享給大家!主要更新了PS,Dn、Acrobat DC、Xd,其他的就不做贅述了,PS更新版本至21.2.4
  • 《寶可夢Home》V1.2.0更新版本發布:新增劍盾DLC新寶可夢!
    《寶可夢Home》於6月17日發布了V1.2.0更新版本,新增了《寶可夢劍盾:DLC鎧之孤島》的數據,同時修復了一些之前版本中存在的部落菌為大家提供了最新版本的下載地址,一起來看看吧~V1.2.0版本更新內容:・支持了《寶可夢 劍/盾 擴展票》第1彈「鎧之孤島」。・將GTS中「想要的寶可夢」的指定條件修復為無法以不可能實現的條件來指定。・改善了寶可夢盒的標籤功能。・修復了其他錯誤。
  • Android Studio 3.0 Canary 版本發布
    Google I/O 舉辦之際,Android Studio 3.0 迎來 Canary 版本的發布。AS 發燒友們可以前往官方下載更新啦,提前感受新功能的使用。在此之前,不妨簡單看看都有哪些實用的更新吧。Kotlin 程式語言:AS 3.0 內部支持 Kotlin 語言,開發人員不用再藉助 Gradle 插件手動配置。
  • 華為Mate30系列新特性版本內測開啟 新增HMS服務應用以及深色模式
    打開APP 華為Mate30系列新特性版本內測開啟 新增HMS服務應用以及深色模式 花信之年 發表於 2020-02-24 09:15:13
  • Bitcoin Core 0.16.0版本正式發布:都有哪些新功能?
    在今天正式發行,這是9年前由中本聰發布出的軟體客戶端之後的的第16代比特幣的客戶端版本。在Bitcoin Core 維護者Wladimir van der Laan的監督下,這個最新的主要版本是由大約100個貢獻者在5個月的時間裡開發出來的。與普通的新版本一樣,Bitcoin Core 0.16.0包括了性能的改進、bug修復和其他優化。這個版本特別包括了錢包界面的幾個新增功能。
  • Hive 源碼 -- ParseUtils.parse 和 sem.analyze詳解
    && parser.errors.size() == 0) { LOG.debug("Parse Completed"); } else if (lexer.getErrors().size() !
  • Manjaro Linux17.1.0版本發布
    導讀趕在2018元旦之前,Manjaro Linux也發布了
  • 又升了,CameraRaw最新版13.0,附下載地址
    Camera Raw又不得不更新了,現在最新版本是13。
  • Spring Framework 5.0 新特性總結!!!
    是自 2013年12月版本 4 發布之後 Spring Framework 的第一個主發行版。因此 Spring Framework 5.0 對環境的最低要就就是 Java 8。這一點實際上對框架而言非常重要。而作為開發者的我們而言,則已經能夠去藉此來享受到現代 Java 發行版中的所有新特性了。而框架版本還背負這支持已經不被建議使用的 Java 發行版的任務。現在,框架的最低要求是 Java 8.
  • 蘋果iOS 13.4和iPadOS 13.4發布了行動作業系統的最新版本
    蘋果公司以iOS 13.4和iPadOS 13.4的形式發布了其行動作業系統的最新版本。iOS 13.4還包括對CarPlay儀錶板上的第三方導航應用程式的支持。已經支持Google Maps,但這應該為驅動程序提供比Apple Maps更多的選擇。在此版本中,Apple修復了Mail應用程式中的一個令人討厭的問題,該問題已導致人們由於iOS 13中按鈕位置的更改而意外將新郵件推送到垃圾箱。