【Hive筆記】8.3——Hive主流文件存儲格式對比實驗

每種存儲格式都有自己的用處,這裏從存儲文件的壓縮比和查詢速度兩個方面對比

存儲文件壓縮比測試

測試數據爲18.1M的日誌文件。

  1. TextFile格式
    (1) 創建表,存儲格式爲TextFile
    create table log_text (
    track_time string,
    url string,
    session_id string,
    referer string,
    ip string,
    end_user_id string,
    city_id string
    )
    row format delimited fields terminated by '\t'
    stored as textfile ;
    
    結果截圖:在這裏插入圖片描述
    (2) 導入數據
    load data local inpath '/opt/module/datas/log.data' into table log_text ;
    在這裏插入圖片描述
    (3) 查看數據大小
    dfs -du -h /user/hive/warehouse/log_text;
    顯示的是18.1M 在這裏插入圖片描述
  2. ORC格式
    (1) 建表語句
    create table log_orc(
    track_time string,
    url string,
    session_id string,
    referer string,
    ip string,
    end_user_id string,
    city_id string
    )
    row format delimited fields terminated by '\t'
    stored as orc ;
    
    (2) 導入數據
    導入數據不能直接使用load data local ,否則還是一個18M的文件,使用insert 纔會是orc格式。
    insert into table log_orc select * from log_text;
    在這裏插入圖片描述
    (3) 查看數據大小
    dfs -du -h /user/hive/warehouse/log_orc;
    可以看到是2.6M,相比較textFile小了很多
    在這裏插入圖片描述
  3. Parquet 格式
    (1) 建表語句
    create table log_parquet(
    track_time string,
    url string,
    session_id string,
    referer string,
    ip string,
    end_user_id string,
    city_id string
    )
    row format delimited fields terminated by '\t'
    stored as parquet ;	
    
    
    (2) 導入數據
    導入數據不能直接使用load data local ,否則還是一個18M的文件,使用insert 纔會是orc格式。
    insert into table log_parquet select * from log_text;
    在這裏插入圖片描述
    (3) 查看數據大小
    dfs -du -h /user/hive/warehouse/log_orc;
    是13.1M,相比較ORC壓縮效率沒有呢麼高
    在這裏插入圖片描述
    所以存儲文件的壓縮比總結:
    ORC > Parquet > textFile

存儲文件的查詢速度測試

執行語句都是爲select count(*) from log_XXX; 每次查詢三次記錄查詢時間

  1. TextFile
select count(*) from log_text

100000
Time taken: 47.122 seconds, Fetched: 1 row(s)
100000
Time taken: 28.92 seconds, Fetched: 1 row(s)
100000
Time taken: 27.693 seconds, Fetched: 1 row(s)
  1. ORC
select count(*) from log_orc

100000
Time taken: 25.844 seconds, Fetched: 1 row(s)
100000
Time taken: 28.264 seconds, Fetched: 1 row(s)
100000
Time taken: 27.214 seconds, Fetched: 1 row(s)
  1. Parquet
select count(*) from log_parquet

100000
Time taken: 35.83 seconds, Fetched: 1 row(s)
100000
Time taken: 26.94 seconds, Fetched: 1 row(s)
100000
Time taken: 27.853 seconds, Fetched: 1 row(s)

結果就是查詢速度是相近的,但是存儲orc佔據優勢,所以orc格式比較流行。

ORC的格式壓縮

其實在ORC格式是自帶有壓縮的(ZLIB壓縮),而且比snappy壓縮的小,所以我們在使用ORC的時候可以使用自帶的格式。

但是在hadoop壓縮格式類型中沒有ZLIB格式,所以一般都是搭配其他壓縮格式。
在創建orc文件格式的時候可以指定壓縮格式:

create table log_orc_snappy(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
stored as orc tblproperties ("orc.compress"="SNAPPY");

tblproperties (“orc.compress”=“SNAPPY”); 可以指定壓縮格式,當然也可以取消壓縮 tblproperties (“orc.compress”=“NONE”);

在實際的項目開發當中,hive表的數據存儲格式一般選擇:orc或parquet。壓縮方式一般選擇snappy,lzo。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章