日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 最新版本的Hive 0.13發布,增加ACID特性

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

來源:程序員人生   發布時間:2014-09-07 05:20:14 閱讀次數:3273次

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

以下為原文:

什么是ACID,有什么作用?

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

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

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

  1. 數據流攝取 streaming ingest of data)。許多用戶都會使用Apache Flume、Apache Storm或Apache Kafka之類的工具,這些工具可以將數據寫入到Hadoop集群,寫入數據的速率達到每秒數百行,而Hive可以每隔15分鐘到1個小時添加一個分區,然而,添加太多分區也經常會造成表的混亂。這些工具也可以將數據寫入到現有分區中,但這又可能會導致讀取數據時產生臟讀(他們讀取的數據在執行查詢之后被修改了),而且在他們的目錄中會產生的許多小文件,對NameNode造成壓力。有了數據流攝取這一新功能,用例將允許讀者得到數據的一致視圖,同時避免產生過多的文件。
  2. 緩慢變化維(slow changing dimensions)。在一個典型星型架構的數據倉庫中,隨著時間推移,維度表變化的很慢。例如,一家零售商新開一個商店時,那這個商店就需要添加“商店表”中,但也有可能只是對現有商店進行擴充,也許還會添加一些新的服務。這些變化會導致向數據倉庫中插入一些新的記錄或者對已有記錄進行更改(具體取決于選擇的策略)。Hive目前無法支持這些操作,只要INSERT ... VALUES、UPDATE和DELETE這些操縱被支持,緩慢變化維將成為可能。
  3. 數據重述(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日在北京國家會議中心隆重舉辦。產業觀察、技術培訓、主題論壇、行業研討,內容豐富,干貨十足。票價優惠,馬上 報名 ! 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品久久久久久久久潘金莲 | 国产精品久久久久久 | 国产一区精品 | 欧美日韩一级二级三级 | 日韩不卡在线 | 亚洲国产精品一区二区第一页 | www.色网 | 久久久久久久久91 | 日韩免费在线电影 | 麻豆视频国产 | 亚洲美女性视频 | 亚洲一区图片 | 福利电影在线观看 | 美女被免费喷白浆视频 | 乱视频在线观看 | 四虎影院最新地址 | 久久久亚洲一区 | 国内精品一区二区三区视频 | 欧美在线日韩在线 | 黄色片a | 国产日产久久高清欧美一区 | 澳门永久av免费网站 | 欧美无乱码久久久免费午夜一区 | 国产精品久久久久久久妇 | 欧美日韩免费做爰视频 | 精品国产免费久久久久久尖叫 | 亚洲视频在线一区 | 99在线观看视频 | 国产91久久精品一区二区 | 伊人9| 精品福利视频一区二区三区 | 成人精品一区二区三区 | 久久免费视频在线 | 伊人网站| 精品一区二区三区在线视频 | 久久黄色一级电影 | 午夜日韩视频 | 日韩免费在线观看 | 色综合久久88色综合天天 | 亚洲一区中文字幕 | 天堂аⅴ在线最新版在线 |