日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hive 结构metastone_深入理解hive之事务处理

發(fā)布時間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hive 结构metastone_深入理解hive之事务处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

事務(wù)的四個特性

1.automicity:原子性

2.consistency:一致性

3. isolation:獨立性

4.durability:持久性

5.支持事務(wù)有幾個條件需要滿足:1.所有的事務(wù)都支持自動提交;2.只支持ORC格式的數(shù)據(jù);3.桶表

7.配置hive的參數(shù)使其支持事務(wù):

在hive-site.xml文件中進(jìn)行如下的配置

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

1

hive.enforce.bucketing

true

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

hive.exec.dynamic.partition.mode:

可選值有:strict, nonstric.

strict嚴(yán)格模式下,必須制定一個partition為靜態(tài)分區(qū),目的是為了防止誤操作其他partition.

在一個事務(wù)中,可能不止會更新一個Partition, 而且更新時也無法控制到底哪些partition會被操作到,因此為了支持事務(wù),必須使用 Nonstrict.

hive.compactor.initiator.on

默認(rèn)值是 false, 因為默認(rèn)的情況連事務(wù)都不開啟。

這個屬性很重要的原因是回答之前我們的一個問題,如果 delta 文件過多,對namenode造成了影響,我們改如何改善系統(tǒng)性能?(在thrift metaserver 上)開啟了這個屬性之后,會使得在 metaStore 實例上運行   Initiator, cleaner 進(jìn)程。initiator 進(jìn)程負(fù)責(zé)查找哪些表或者分區(qū)的 delta 文件需要被壓縮,cleaner 進(jìn)程負(fù)責(zé)刪除已經(jīng)不再需要的 delta 文件。接下來看看幾個hive的事務(wù)性操作

$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 ;//創(chuàng)建桶表,存儲格式為orc使其支持事務(wù)

$hive>desc formatted tx ;  //查看tx表的結(jié)構(gòu)

$hive>insert into tx values(1,'tom',23); //向桶表中來插入數(shù)據(jù)

hive分區(qū)

Hive分區(qū)的概念與傳統(tǒng)關(guān)系型數(shù)據(jù)庫分區(qū)不同。

傳統(tǒng)數(shù)據(jù)庫的分區(qū)方式:就oracle而言,分區(qū)獨立存在于段里,里面存儲真實的數(shù)據(jù),在數(shù)據(jù)進(jìn)行插入的時候自動分配分區(qū)。

Hive的分區(qū)方式:由于Hive實際是存儲在HDFS上的抽象,Hive的一個分區(qū)名對應(yīng)一個目錄名,子分區(qū)名就是子目錄名,并不是一個實際字段。所以我們在插入數(shù)據(jù)的時候指定分區(qū),就是新建一個目錄或者子目錄,或者在原來目錄的基礎(chǔ)上來添加數(shù)據(jù)。對于hive分區(qū)而言,可以分為靜態(tài)分區(qū)和動態(tài)分區(qū)這兩個類

1.靜態(tài)分區(qū)

$hive>create table customers(id int,name string ,age int ) partitioned by(year int,month int) row format delimited? fields terminated by ','; //創(chuàng)建靜態(tài)分區(qū)表

$hive>alter table customers add partition(year=2014,month=11) partition(year=2014,month=12);//在靜態(tài)分區(qū)表中來添加分區(qū)

$hive>desc customers;//查看表結(jié)構(gòu)

$hive>show partitions customers ;?  //查看customers表的分區(qū)結(jié)構(gòu)

$hive>load data local inpath '/data/customers.txt' into table customers? partition(year=2014,year=11); //從外部表加載數(shù)據(jù)到靜態(tài)分區(qū)表的指定分區(qū)中來,這是文件的復(fù)制操作

$hive>dfs -lsr /;  //查看文件系統(tǒng)的文件結(jié)構(gòu)

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

新建表的時候定義的分區(qū)順序,決定了文件目錄順序(誰是父目錄誰是子目錄),正因為有了這個層級關(guān)系,當(dāng)我們查詢所有year=1024的時候,2014以下的所有日期下的數(shù)據(jù)都會被查出來。如果只查詢月份分區(qū),但父目錄都有該日期的數(shù)據(jù),那么Hive會對輸入路徑進(jìn)行修剪,從而只掃描日期分區(qū),性別分區(qū)不作過濾(即查詢結(jié)果包含了所有性別)。

2.動態(tài)分區(qū)

在使用靜態(tài)分區(qū)的時候,我們首先要知道有什么分區(qū)類型,然后每個分區(qū)來進(jìn)行數(shù)據(jù)的加載,這個操作過程比較麻煩;而動態(tài)分區(qū)不會有這些不必要的操作,動態(tài)分區(qū)可以根據(jù)查詢得到的數(shù)據(jù)動態(tài)地分配到分區(qū)中去,動態(tài)分區(qū)與靜態(tài)分區(qū)最大的區(qū)別是不指定分區(qū)目錄,由系統(tǒng)自己進(jìn)行過選擇。

動態(tài)分區(qū)模式可以分為嚴(yán)格模式(strict)和非嚴(yán)格模式(non-strict),二者的區(qū)別是:嚴(yán)格模式在進(jìn)行插入的時候至少指定一個靜態(tài)分區(qū),而非嚴(yán)格模式在進(jìn)行插入的時候可以不指定靜態(tài)分區(qū)

首先啟動動態(tài)分區(qū)的功能:

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

再設(shè)置分區(qū)模式為非嚴(yán)格模式

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

總結(jié)

以上是生活随笔為你收集整理的hive 结构metastone_深入理解hive之事务处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。