Hive壓縮測試
Hive儲存格式
操作方式:
可以在建表的時候指定表的儲存格式:stored as orc tblproperties ("orc.compress"="SNNAPY"),不指定表屬性則預設壓縮採用ZLIB。
比如:
create table Addresses (
name string,
street string,
city string,
state string,
zip int
) stored as orc;
或者:
create table Addresses (
name string,
street string,
city string,
state string,
zip int
) stored as orc tblproperties ("orc.compress"="SNNAPY");
注意點:
不能直接通過
ALTER TABLE table_name [PARTITION partition_spec] SET FILEFORMAT file_format;
方式來修改原先是text格式的表為orc格式,那只是修改了表屬性,而檔案儲存格式還是text的,所以查詢會出現解析錯誤。要使用orc格式,可以新建新表,指定儲存格式為orc,然後從原先的text表insert到新表中即可。
另外load方式載入資料,只是一個移動資料的過程,不會修改資料的格式,所以使用load載入資料要注意。
測試對比:
6000萬資料,50個欄位(name1…name50)
空間佔用
text格式佔用空間:10.8g
orc格式採用zlib壓縮(預設壓縮方式)佔用空間:1.4g
orc格式採用snnapy壓縮,佔用空間:1.5g
查詢效能
1. select count(*) from table;
text,花費:34.202 seconds
orc格式採用zlib壓縮,花費:33.576 seconds
orc格式採用snnapy壓縮,花費:33.038 seconds
2. select count(*) from table where field = value ;
text,花費:37.311 seconds
orc格式採用zlib
orc格式採用snnapy壓縮,花費:33.698 seconds
從上的對比可以看出,使用orc格式的儲存,可以極大程度降低儲存佔用,而查詢效率上也不會差。經過多次測試和對比,orc格式中,zlib和snnapy對比,zlib壓縮率會略高,但是查詢效率略低於snnapy。建議使用orc的snnapy壓縮。另外由於資料壓縮,資料量變小,所以job啟動後生成的map/reduce數目也會變少(但單個map處理的資料就會增大,所以以前設定的很多記憶體引數比如-Xmx256就會太小,應該設大,不然出現大量溢寫,計算效率不會好),佔用的container就會少,所以變相增加了叢集的計算能力。
Hive執行的臨時目錄
操作方法:
在啟動hiveserver2的時候,指定臨時目錄,--hiveconf hive.exec.scratchdir=配置的目錄A(而實際的臨時目錄會是:A/登陸使用者名稱),該預設值是/tmp/hive/使用者名稱,如下:
nohup hive --service hiveserver2 --hiveconf hive.server2.thrift.port=10000 --hiveconf hive.log.dir=/e3base/e3base550/hive/logs/server2_10000 --hiveconf hive.metastore.uris='thrift://192.168.10.37:9083' -- hiveconf hive.exec.scratchdir=配置的目錄 &
對比如下:
不加配置,預設:
加配置,使用--hiveconf hive.exec.scratchdir=/user/e3base/tmpdata