深入理解hive之事務處理

2022-08-01 04:00:16 字數 2903 閱讀 2165

1.automicity:原子性

2.consistency:一致性

3. isolation:獨立性

4.durability:永續性

5.支援事務有幾個條件需要滿足:1.所有的事務都支援自動提交;2.只支援orc格式的資料;3.桶表

7.配置hive的引數使其支援事務:

在hive-site.xml檔案中進行如下的配置

hive.support.concurrency

true

hive.exec.dynamic.partition.mode

nonstrict

hive.txn.manager

org.apache.hadoop.hive.ql.lockmgr.dbtxnmanager

hive.compactor.initiator.on

true

hive.compactor.worker.threads

1hive.enforce.bucketing

true

對幾個重要的屬性做闡述:

hive.exec.dynamic.partition.mode: 

可選值有:strict, nonstric. 

strict嚴格模式下,必須制定乙個partition為靜態分割槽,目的是為了防止誤操作其他partition. 

在乙個事務中,可能不止會更新乙個partition, 而且更新時也無法控制到底哪些partition會被操作到,因此為了支援事務,必須使用 nonstrict.

hive.compactor.initiator.on 

預設值是 false, 因為預設的情況連事務都不開啟。 

這個屬性很重要的原因是回答之前我們的乙個問題,如果 delta 檔案過多,對namenode造成了影響,我們改如何改善系統效能?(在thrift metaserver 上)開啟了這個屬性之後,會使得在 metastore 例項上執行   initiator, cleaner 程序。initiator 程序負責查詢哪些表或者分割槽的 delta 檔案需要被壓縮,cleaner 程序負責刪除已經不再需要的 delta 檔案。接下來看看幾個hive的事務性操作

$hive>create table tx(id int,name string,age int) clustered by (id) into 3 buckets row format delimited fields terminated by '

,' stored as orc ;//

建立桶表,儲存格式為orc使其支援事務

$hive>desc formatted tx ;  //

檢視tx表的結構

$hive>insert into tx values(1,'

tom',23); //

向桶表中來插入資料

hive分割槽的概念與傳統關係型資料庫分割槽不同。

傳統資料庫的分割槽方式:就oracle而言,分割槽獨立存在於段裡,裡面儲存真實的資料,在資料進行插入的時候自動分配分割槽。

hive的分割槽方式:由於hive實際是儲存在hdfs上的抽象,hive的乙個分割槽名對應乙個目錄名,子分割槽名就是子目錄名,並不是乙個實際字段。所以我們在插入資料的時候指定分割槽,就是新建乙個目錄或者子目錄,或者在原來目錄的基礎上來新增資料。對於hive分割槽而言,可以分為靜態分割槽和動態分割槽這兩個類

$hive>create table customers(id int,name string ,age int ) partitioned by(year int,month int) row format delimited  fields terminated by ','; //建立靜態分割槽表

$hive>alter table customers add partition(year=2014,month=11) partition(year=2014,month=12);//在靜態分割槽表中來新增分割槽

$hive>desc customers;//檢視表結構

$hive>show partitions customers ;   //檢視customers表的分割槽結構

$hive>load data local inpath '/data/customers.txt' into table customers  partition(year=2014,year=11); //從外部表載入資料到靜態分割槽表的指定分割槽中來,這是檔案的複製操作

$hive>dfs -lsr /;  //檢視檔案系統的檔案結構

$hive>select  * from customers where year=2014 and  month=11;

新建表的時候定義的分割槽順序,決定了檔案目錄順序(誰是父目錄誰是子目錄),正因為有了這個層級關係,當我們查詢所有year=1024的時候,2014以下的所有日期下的資料都會被查出來。如果只查詢月份分割槽,但父目錄都有該日期的資料,那麼hive會對輸入路徑進行修剪,從而只掃瞄日期分割槽,性別分割槽不作過濾(即查詢結果包含了所有性別)。

在使用靜態分割槽的時候,我們首先要知道有什麼分割槽型別,然後每個分割槽來進行資料的載入,這個操作過程比較麻煩;而動態分割槽不會有這些不必要的操作,動態分割槽可以根據查詢得到的資料動態地分配到分割槽中去,動態分割槽與靜態分割槽最大的區別是不指定分割槽目錄,由系統自己進行過選擇。

動態分割槽模式可以分為嚴格模式(strict)和非嚴格模式(non-strict),二者的區別是:嚴格模式在進行插入的時候至少指定乙個靜態分割槽,而非嚴格模式在進行插入的時候可以不指定靜態分割槽

首先啟動動態分割槽的功能:

$hive>set hive.exec.dynamic.partition=true;

再設定分割槽模式為非嚴格模式

$hive>set hive.exec.dynamic.partition.mode=nonstrict

JDBC之事務處理

try catch 首先開啟事務,然後執行dml操作,如果所有的dml操作都正確執行,則使用commit提交事務 如果有的dml操作不能正確執行,則捕獲該異常,跳過commit語句,在catch語句塊中使用rollback回滾事務。public class test catch exception ...

MySQL之事務處理

原子性 atomicity 原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。一致性 consistency 事務前後資料的完整性必須保持一致。隔離性 isolation 事務的隔離性是多個使用者併發訪問資料庫時,資料庫為每乙個使用者開啟的事務,不能被其他事務的運算元據所...

myrocks之事務處理

mysql目前支援的事務引擎有innodb,tokudb.rocksdb加入mysql陣營後,mysql支援的事務引擎增長至3個。myrocks目前支援的事務隔離級別有read committed和repeatable read.同innodb一樣,myrocks也支援mvcc機制。可以說,myro...