Hive從0.14版本開始支持事務和行級更新,但缺省是不支持的,需要一些附加的配置。要想支持行級insert、update、delete,需要配置Hive支持事務。
Hive具有ACID語義事務的使用場景
1. 流式接收數據。
許多用戶使用諸如Apache Flume、Apache Storm或Apache Kafka這樣的工具將流數據灌入Hadoop集群。當這些工具以每秒數百行的頻率寫入時,Hive也許只能每15分鐘到1小時添加一個分區,因為過于頻繁地添加分區很快就會使一個表中的分區數量難以維護。而且這些工具還可能向已存在的分區中寫數據,但是這樣將會產生臟讀(可能讀到查詢開始時間點以后寫入的數據),還在這些分區的所在目錄中遺留大量小文件,進而給NameNode造成壓力。在這個使用場景下,事務支持可以獲得數據的一致性視圖同時避免產生過多的文件。
2. 緩慢變化維。
在一個典型的星型模式數據倉庫中,維度表隨時間的變化很緩慢。例如,一個零售商開了一家新商店,需要將新店數據加到商店表,或者一個已有商店的營業面積或其它需要跟蹤的特性改變了。這些改變會導致插入或修改個別記錄。從0.14版本開始,Hive支持行級更新。
3. 數據重述。
有時發現數據集合有錯誤并需要更正。或者當前數據只是個近似值(如只有全部數據的90%,得到全部數據會滯后)。或者業務業務規則可能需要根據后續事務重述特定事務(打個比方,一個客戶購買了一些商品后又購買了一個會員資格,此時可以享受折扣價格,包括先前購買的商品)。或者一個客戶可能按照合同在終止了合作關系后要求刪除他們的客戶數據。從Hive 0.14開始,這些使用場景可以通過INSERT、UPDATE和DELETE支持。
配置Hive支持事務(Hive 2.0版)
1. 在hive-site.xml文件中添加如下配置項
添加Hive元數據(使用mysql存儲)
INSERTINTONEXT_LOCK_IDVALUES(1);
INSERTINTONEXT_COMPACTION_QUEUE_IDVALUES(1);
INSERTINTONEXT_TXN_IDVALUES(1);
COMMIT;