概述
本文通過使用Hadoop的數據倉庫工具Hive中的不同存儲格式,比較按行存儲和按列存儲的不同。按列存儲使用的是企業中最長見的ORC和PARQUET。
這裏不講解對於Hive的使用。
Columnar VS Row-based
-
行存儲和列存儲的存儲區別
-
優缺點比較
- 按行存儲:
優點:insert和update更加容易
缺點:查詢某幾列時,所有數據也都會被讀取
- 按列存儲:
優點:查詢時只有涉及到的列會被讀取;投影很高效;任何列都能作爲索引
缺點:insert/update會比較麻煩
- 按行存儲:
-
不同存儲格式的壓縮比較
企業中更多的業務場景是對列數據進行操作,如果按行存儲,需要把每行數據加載到內存中,在從每行去獲取數據。
ORC和PARQUET
ORC
Hive使用orc格式時,默認使用ZLIB壓縮
Parquet
實驗準備
創建數據庫
- Hive官網建庫示例
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
- 建庫
create database if not exists web_analysis location "/user/hive/warehouse/web_analysis";
創建表和加載數據
準備好存放了100000條數據page_views.data數據文件。
- 創建表page_views_txt,格式:行存儲,TEXTFILE格式
create table web_analysis.page_views_txt(
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;
- 加載數據
load data local inpath '/opt/datas/page_views.data' into table page_views_txt;
- 獲取表page_views_txt條數
select count(1) from page_views_txt;
Hive通過跑MR之後獲取到page_views_txt的條數是100000。
- 創建表page_views_orc,格式:orc,按列存儲
create table web_analysis.page_views_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;
- 創建表page_views_parquet,格式:parquet,按列存儲
create table web_analysis.page_views_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;
- 從已有表插入數據
insert into table page_views_parquet select * from page_views_txt ;
insert into table page_views_orc select * from page_views_txt ;
比較表的大小
- TEXTFILE格式
在hive命令行中輸入
dfs -du -h /user/hive/warehouse/web_analysis/page_views_txt;
得到以下結果,說明page_views_txt有18.1M
- PARQUET格式
在hive命令行中輸入
dfs -du -h /user/hive/warehouse/web_analysis/page_views_parquet;
得到以下結果,說明page_views_parquet有13.1M
- ORC格式
在hive命令行中輸入
dfs -du -h /user/hive/warehouse/web_analysis/page_views_orc;
得到以下結果,說明page_views_orc只有2.6M
存儲格式+壓縮
ORC
ORC格式默認ZLIB壓縮,這裏設置爲snappy
create table page_views_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");
PARQUET
set parquet.compression=SNAPPY ;
create table page_views_parquet_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 parquet;