91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive中如何優化配置參數

發布時間:2021-12-10 11:45:22 來源:億速云 閱讀:190 作者:小新 欄目:大數據

這篇文章主要介紹Hive中如何優化配置參數,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1. 創建一個普通表

table test_user1(id int, name string,code string,code_id string ) ROW FORMAT DELIMITED FIELDS TERMINATED  BY ',';

2. 查看這張表的信息

DESCRIBE FORMATTED  test_user1;

Hive中如何優化配置參數

我們從該表的描述信息介紹建表時的一些可優化點。

2.1 表的文件數

numFiles表示表中含有的文件數,當文件數過多時可能意味著該表的小文件過多,這時候我們可以針對小文件的問題進行一些優化,HDFS本身提供了解決方案:

(1)Hadoop Archive/HAR:將小文件打包成大文件。

(2)SEQUENCEFILE格式:將大量小文件壓縮成一個SEQUENCEFILE文件。

(3)CombineFileInputFormat:在map和reduce處理之前組合小文件。

(4)HDFS Federation:HDFS聯盟,使用多個namenode節點管理文件。

除此之外,我們還可以通過設置hive的參數來合并小文件。

(1)輸入階段合并

需要更改Hive的輸入文件格式,即參數hive.input.format,默認值是org.apache.hadoop.hive.ql.io.HiveInputFormat,我們改成org.apache.hadoop.hive.ql.io.CombineHiveInputFormat。這樣比起上面對mapper數的調整,會多出兩個參數,分別是mapred.min.split.size.per.node和mapred.min.split.size.per.rack,含義是單節點和單機架上的最小split大小。如果發現有split大小小于這兩個值(默認都是100MB),則會進行合并。具體邏輯可以參看Hive源碼中的對應類。

(2)輸出階段合并

直接將hive.merge.mapfiles和hive.merge.mapredfiles都設為true即可,前者表示將map-only任務的輸出合并,后者表示將map-reduce任務的輸出合并,Hive會額外啟動一個mr作業將輸出的小文件合并成大文件。另外,hive.merge.size.per.task可以指定每個task輸出后合并文件大小的期望值,hive.merge.size.smallfiles.avgsize可以指定所有輸出文件大小的均值閾值,默認值都是1GB。如果平均大小不足的話,就會另外啟動一個任務來進行合并。

2.2 表的存儲格式

通過InputFormat和OutputFormat可以看出表的存儲格式是TEXT類型,Hive支持TEXTFILE, SEQUENCEFILE, AVRO, RCFILE, ORC,以及PARQUET文件格式,可以通過兩種方式指定表的文件格式:

(1)CREATE TABLE ... STORE AS <file_format>:在建表時指定文件格式,默認是TEXTFILE

(2)ALTER TABLE ... [PARTITION partition_spec] SET FILEFORMAT <file_format>:修改具體表的文件格式

如果要改變創建表的默認文件格式,可以使用set hive.default.fileformat=<file_format>進行配置,適用于所有表。同時也可以使用set hive.default.fileformat.managed = <file_format>進行配置,僅適用于內部表或外部表。

擴展:不同存儲方式的情況

TEXT, SEQUENCE和 AVRO文件是面向行的文件存儲格式,不是最佳的文件格式,因為即便只查詢一列數據,使用這些存儲格式的表也需要讀取完整的一行數據。另一方面,面向列的存儲格式(RCFILE, ORC, PARQUET)可以很好地解決上面的問題。關于每種文件格式的說明,如下:

(1)TEXTFILE

創建表時的默認文件格式,數據被存儲成文本格式。文本文件可以被分割和并行處理,也可以使用壓縮,比如GZip、LZO或者Snappy。然而大部分的壓縮文件不支持分割和并行處理,會造成一個作業只有一個mapper去處理數據,使用壓縮的文本文件要確保文件不要過大,一般接近兩個HDFS塊的大小。

(2)SEQUENCEFILE

key/value對的二進制存儲格式,sequence文件的優勢是比文本格式更好壓縮,sequence文件可以被壓縮成塊級別的記錄,塊級別的壓縮是一個很好的壓縮比例。如果使用塊壓縮,需要使用下面的配置:set hive.exec.compress.output=true; set io.seqfile.compression.type=BLOCK

(3)AVRO

二進制格式文件,除此之外,avro也是一個序列化和反序列化的框架。avro提供了具體的數據schema。

(4)RCFILE

全稱是Record Columnar File,首先將表分為幾個行組,對每個行組內的數據進行按列存儲,每一列的數據都是分開存儲,即先水平劃分,再垂直劃分。

(5)ORC

全稱是Optimized Row Columnar,從hive0.11版本開始支持,ORC格式是RCFILE格式的一種優化的格式,提供了更大的默認塊(256M)

(6)PARQUET

另外一種列式存儲的文件格式,與ORC非常類似,與ORC相比,Parquet格式支持的生態更廣,比如低版本的impala不支持ORC格式。

配置同樣數據同樣字段的兩張表,以常見的TEXT行存儲和ORC列存儲兩種存儲方式為例,對比執行速度。

TEXT存儲方式

Hive中如何優化配置參數

Hive中如何優化配置參數

總結:從上圖中可以看出列存儲在對指定列進行查詢時,速度更快,建議在建表時設置列存儲的存儲方式

2.3 表的壓縮

對Hive表進行壓縮是常見的優化手段,一些存儲方式自帶壓縮選擇,比如SEQUENCEFILE支持三種壓縮選擇:NONE,RECORD,BLOCK。Record壓縮率低,一般建議使用BLOCK壓縮;

ORC支持三種壓縮選擇:NONE,ZLIB,SNAPPY。我們以TEXT存儲方式和ORC存儲方式為例,查看表的壓縮情況。

配置同樣數據同樣字段的四張表,一張TEXT存儲方式,另外三張分別是默認壓縮方式的ORC存儲、SNAPPY壓縮方式的ORC存儲和NONE壓縮方式的ORC存儲,查看在hdfs上的存儲情況:

TEXT存儲方式

Hive中如何優化配置參數

默認壓縮ORC存儲方式

Hive中如何優化配置參數

SNAPPY壓縮的ORC存儲方式

Hive中如何優化配置參數

NONE壓縮的ORC存儲方式

Hive中如何優化配置參數

總結:可以看到ORC存儲方式將數據存放為兩個block,默認壓縮大小加起來134.69M,SNAPPY壓縮大小加起來196.67M,NONE壓縮大小加起來247.55M,TEXT存儲方式的文件大小為366.58M,且默認block兩種存儲方式分別為256M和128M,ORC默認的壓縮方式比SNAPPY壓縮得到的文件還小,原因是ORZ默認的ZLIB壓縮方式采用的是deflate壓縮算法,比Snappy壓縮算法得到的壓縮比高,壓縮的文件更小。ORC不同壓縮方式之間的執行速度,經過多次測試發現三種壓縮方式的執行速度差不多,所以建議采用ORC默認的存儲方式進行存儲數據。

2.4 分桶分區

Num Buckets表示桶的數量,我們可以通過分桶和分區操作對Hive表進行優化:

對于一張較大的表,可以將它設計成分區表,如果不設置成分區表,數據是全盤掃描的,設置成分區表后,查詢時只在指定的分區中進行數據掃描,提升查詢效率。要注意盡量避免多級分區,一般二級分區足夠使用。常見的分區字段:

(1)日期或者時間,比如year、month、day或者hour,當表中存在時間或者日期字段時,可以使用些字段。

(2)地理位置,比如國家、省份、城市等

(3)業務邏輯,比如部門、銷售區域、客戶等等

與分區表類似,分桶表的組織方式是將HDFS上的一張大表文件分割成多個文件。分桶是相對分區進行更細粒度的劃分,分桶將整個數據內容按照分桶字段屬性值得hash值進行區分,分桶可以加快數據采樣,也可以提升join的性能(join的字段是分桶字段),因為分桶可以確保某個key對應的數據在一個特定的桶內(文件),所以巧妙地選擇分桶字段可以大幅度提升join的性能。通常情況下,分桶字段可以選擇經常用在過濾操作或者join操作的字段。

創建分桶表

create table test_user_bucket(id int, name string,code string,code_id string ) clustered by(id) into 3 buckets ROW FORMAT DELIMITED FIELDS TERMINATED  BY ',';

查看描述信息

DESCRIBE FORMATTED test_user_bucket

Hive中如何優化配置參數

查看該表的hdfs

Hive中如何優化配置參數

同樣的數據查看普通表和分桶表查詢效率

普通表

Hive中如何優化配置參數

分桶表

Hive中如何優化配置參數

普通表是全表掃描,分桶表在按照分桶字段的hash值分桶后,根據join字段或者where過濾字段在特定的桶中進行掃描,效率提升。

以上是“Hive中如何優化配置參數”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江口县| 故城县| 无棣县| 微山县| 屯留县| 麻江县| 黔东| 桓台县| 梓潼县| 岳西县| 湛江市| 墨江| 玉龙| 连云港市| 嘉禾县| 安岳县| 临沧市| 木里| 子长县| 大理市| 酒泉市| 漯河市| 佛冈县| 万安县| 巴林左旗| 库伦旗| 从江县| 延津县| 霍林郭勒市| 达拉特旗| 兰坪| 南康市| 叶城县| 焦作市| 巴塘县| 通河县| 东兴市| 嘉峪关市| 宁武县| 泸溪县| 射洪县|