MapReduce 的數據壓縮
hive 的數據壓縮
hive 支持的文件格式
hive日志分析,各種壓縮的對比
一: mapreduce 的壓縮
- mapreduce 壓縮 主要是在shuffle階段的優化。
shuffle 端的
--partition (分區)
-- sort (排序)
-- combine (合並)
-- compress (壓縮)
-- group (分組)
在mapreduce 優化shuffle 從本質上是解決磁盤的IO 與網絡IO 問題。
減少 集群件的文件傳輸處理。
二: hive 的壓縮:
壓縮的和解壓需要cpu的,hive 的常見的壓縮格式:
bzip2,gzip,lzo,snappy等
cdh 默認采用的壓縮是snappy
壓縮比:bzip2 > gzip > lzo bzip2 最節省存儲空間。
注意: sanppy 的並不是壓縮比最好的
解壓速度: lzo > gzip > bzip2 lzo 解壓速度是最快的。
注意:追求壓縮速率最快的sanppy
壓縮的和解壓需要cpu 損耗比較大。
集群分: cpu 的密集型 (通常是計算型的網絡)
hadoop 是 磁盤 IO 和 網絡IO 的密集型, 網卡的雙網卡綁定。
三: hadoop 的檢查 是否支持壓縮命令
bin/hadoop checknative
3.1 安裝使支持壓縮:
tar -zxvf 2.5.0-native-snappy.tar.gz -C /home/hadoop/yangyang/hadoop/lib/native
3.2 命令檢測:
bin/hadoop checknative
3.3 mapreduce 支持的壓縮:
CodeName:
zlib : org.apache.hadoop.io.compress.DefaultCodec
gzip : org.apache.hadoop.io.compress.GzipCodec
gzip2: org.apache.hadoop.io.compress.Bzip2Codec
lzo : org.apache.hadoop.io.compress.LzoCodec
lz4 : org.apache.hadoop.io.compress.Lz4Codec
snappy: org.apache.hadoop.io.compress.SnappyCodec
3.4 mapreduce 執行作業臨時支持壓縮兩種方法:
1.在執行命令時候運行。
-Dmapreduce.map.output.compress=true
-Dmapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.DefaultCodec
如:
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount -Dmapreduce.map.output.compress=true -Dmapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.DefaultCodec /input/dept.txt /output1
可以在bin 的前面加一個time, 會在查看運行的時間
測試job 的任務:
-
測運行job 的總時間
-
查看壓縮的頻率,壓縮后的文件大小。
-
更改配置文件:
更改mapred-site.xml 文件mapreduce.map.output.compress true mapreduce.map.output.compress.codec org.apache.hadoop.io.compress.DefaultCodec
更改完成之后重新啟動服務就可以
四. hive的支持壓縮
4.1 更改臨時參數使其生效
hive > set ---> 查看所有參數
hive > set hive.exec.compress.intermediate=true -- 開啟中間 壓縮
> set mapred.map.output.compression.codec = CodeName
> set hive.exec.compress.output=true
> set mapred.map.output.compression.type = BLOCK/RECORD
在hive-site.xml 中去增加相應參數使其永久生效
4.2:hive 支持的文件類型:
4.2.1 行存儲與列式存儲區別
數據庫列存儲不同於傳統的關系型數據庫,其數據在表中是按行存儲的,列方式所帶來的重要好處之一就是,由於查詢中的選擇規則是通過列來定義的,因 此整個數據庫是自動索引化的。
按列存儲每個字段的數據聚集存儲,在查詢只需要少數幾個字段的時候,能大大減少讀取的數據量,一個字段的數據聚集存儲,那就 更容易為這種聚集存儲設計更好的壓縮/解壓算法。
image_1ak7j9l59fq1k819ek15eeqq9.png-173kB
4.2.2 hive 支持的文件類型:
修改hive 的默認文件系列參數:
set hive.default.fileformat=Orc
TextFile:默認的類型,行存儲
rcfile:按行塊,每塊再按列存儲
avro:二進制
ORC rcfile:的升級版,默認是zlib,支持snappy 其格式不支持
parquet
4.2.3 ORC格式(hive/shark/spark支持)
image_1ak7jnb7p1ko3128h2u9b0kqulm.png-108.9kB
使用方法:
create table Adress (
name string,
street string,
city string,
state double,
zip int
)stored as orc tblproperties ("orc.compress"="NONE") --->指定壓縮算法
row format delimited fields terminated by '\t';
4.2.4 PARQUET格式(twitter+cloudera開源,Hive、Spark、drill,Impala、
Pig等支持)
image_1ak7k27pbsvu1lmo1hp6tus9e013.png-124.4kB
使用方法:
create table Adress (
name string,
street string,
city string,
state double,
zip int
)stored as parquet ---> 指定文本類型
row format delimited fields terminated by '\t';
五:hive日志分析,各種壓縮的對比
5.1 在hive 上面創建表結構:
5.1.1 textfile 類型:
create table page_views_textfile(
track_time string,
url string,
session_id string,
refere string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
STORED AS textfile ; ---> 指定表的文件類型
image_1ak7u3id314bq57q11rhp60dhh9.png-17.9kB
加載數據到表中
load data local inpath '/home/hadoop/page_views.data' into table page_views_textfile ;
image_1ak7u5tbjqql1mfv1ic61ffquqam.png-12.5kB
5.1.2 orc 類型:
create table page_views_orc(
track_time string,
url string,
session_id string,
refere string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
STORED AS orc ;
image_1ak7ulou44mhq501efc1jktboa13.png-17.5kB
插入數據:
insert into table page_views_orc select * from page_views_textfile ;
image_1ak7urdk31sf97971edt1it81qtm1g.png-54.7kB
5.1.3 parquet 類型
create table page_views_parquet(
track_time string,
url string,
session_id string,
refere string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
STORED AS parquet ;
image_1ak7uu3rmgd5umk5sleh1t2a1t.png-17.1kB
插入數據:
insert into table page_views_parquet select * from page_views_textfile ;
image_1ak7uuuuh1e31iktc1g1q971pg22a.png-62.1kB
六:比較:
6.1 文件大小統計
hive (yangyang)> dfs -du -h /user/hive/warehouse/yangyang.db/page_views_textfile ;
hive (yangyang)> dfs -du -h /user/hive/warehouse/yangyang.db/page_views_orc ;
hive (yangyang)> dfs -du -h /user/hive/warehouse/yangyang.db/page_views_parquet ;
image_1ak7vb3havvabfa1mdsien1g282n.png-21.2kB
從上面可以看出orc 上生成的表最小。
6.2 查找時間測試比較:
hive (yangyang)> select count(session_id) from page_views_textfile ;
hive (yangyang)> select count(session_id) from page_views_orc;
hive (yangyang)> select count(session_id) from page_views_parquet;
6.3 textfile 文件類型:
image_1ak800moc1ov711mhkk11nk44eo3u.png-7.2kB
image_1ak801ugb1n2v1mhk3f1qshems4b.png-6.8kB
6.4 orc 文件類型:
image_1ak8056dcd8o1ei83vp9hupo84o.png-22.9kB
image_1ak807ni71fi3dpm1ccb18an155755.png-6.7kB
6.5 parquet 類型:
image_1ak8091ilmeqing1qunurc5to5i.png-15.9kB
image_1ak80a3441aj99hih2u7n6fd25v.png-6.6kB
七 hive 創建表與指定壓縮:
7.1 orc+snappy 格式:
create table page_views_orc_snappy(
track_time string,
url string,
session_id string,
refere string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
STORED AS orc TBLPROPERTIES("orc.compression"="Snappy");
image_1ak81oqnp1sd01nq01tj6htdnh06c.png-21kB
插入數據:
insert into table page_views_orc_snappy select * from page_views_textfile ;
image_1ak81sl3k1pa16un267186g1uu96p.png-34.8kB
7.2 parquet+snappy 格式:
set parquet.compression=Snappy ;
set hive.exec.compress.output=true ;
create table page_views_parquet_snappy(
track_time string,
url string,
session_id string,
refere string,
ip string,
end_user_id string,
city_id string
)
row format delimited fields terminated by '\t'
STORED AS parquet ;
image_1ak826m0hu73195t97i4qrj680.png-24kB
插入數據:
insert into table page_views_parquet_snappy select * from page_views_textfile ;
image_1ak8277pv12vi16unbag10q01sfm8d.png-62.9kB
7.3 對比測試:
7.3.1 文件大小對比:
hive (yangyang)> dfs -du -h /user/hive/warehouse/yangyang.db/page_views_orc_snappy ;
hive (yangyang)> dfs -du -h /user/hive/warehouse/yangyang.db/page_views_parquent_snappy ;
image_1ak82jdklbniq9bhei129b1hde8q.png-15.4kB
7.3.2 查詢對比:
hive (yangyang)> select count(session_id) from page_views_orc_snappy;
hive (yangyang)> select count(session_id) from page_views_parquet_snappy;
image_1ak832dfdg2v1vvm15umjmd4us97.png-58.7kB
image_1ak833gls106i1hjg1sg1ljn1ud39k.png-58.7kB