1.automicity:原子性
2.consistency:一致性
3. isolation:獨立性
4.durability:永續性
5.支援事務有幾個條件需要滿足:1.所有的事務都支援自動提交;2.只支援orc格式的資料;3.桶表
7.配置hive的引數使其支援事務:
在hive-site.xml檔案中進行如下的配置
hive.support.concurrencytrue
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...