1. 程式人生 > >Hive壓縮測試

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,然後從原先的textinsert到新表中即可。

另外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

壓縮,花費:35.847 seconds

orc格式採用snnapy壓縮,花費:33.698 seconds

從上的對比可以看出,使用orc格式的儲存,可以極大程度降低儲存佔用,而查詢效率上也不會差。經過多次測試和對比,orc格式中,zlibsnnapy對比,zlib壓縮率會略高,但是查詢效率略低於snnapy。建議使用orcsnnapy壓縮。另外由於資料壓縮,資料量變小,所以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