国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

大數(shù)據(jù)開發(fā)之Hive(壓縮和存儲)

這篇具有很好參考價值的文章主要介紹了大數(shù)據(jù)開發(fā)之Hive(壓縮和存儲)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

第 9 章:壓縮和存儲

Hive不會強制要求將數(shù)據(jù)轉(zhuǎn)換成特定的格式才能使用。利用Hadoop的InputFormat API可以從不同數(shù)據(jù)源讀取數(shù)據(jù),使用OutputFormat API可以將數(shù)據(jù)寫成不同的格式輸出。
對數(shù)據(jù)進行壓縮雖然會增加額外的CPU開銷,但是會節(jié)約客觀的磁盤空間,并且通過減少內(nèi)存的數(shù)據(jù)量而提高I/O吞吐量會更加提高網(wǎng)絡傳輸性能。
原則上Hadoop的job時I/O密集型的話就可以采用壓縮可以提高性能,如果job是CPU密集型的話,那么使用壓縮可能會降低執(zhí)行性能。

9.1 Hadoop壓縮配置

9.1.1 MR支持的壓縮編碼

壓縮格式 算法 文件擴展名 是否可切分
Deflate Deflate .deflate
Gzip Deflate .gz
Bzip2 Bzip2 .bz2
Lzo Lzo .lzo
Snappy Snappy .snappy

為了支持多種壓縮/解壓縮算法,Hadoop引入了編碼/解碼器,如下表所示:

壓縮格式 對應的編碼/解碼器
Deflate org.apache.hadoop.io.compress.DefaultCodec
Gzip org.apache.hadoop.io.compress.GzipCodec
Bzip2 org.apache.hadoop.io.compress.BZip2Codec
Lzo com.hadoop.compression.lzo.LzopCodec
Snappy org.apache.hadoop.io.compress.SnappyCodec

為什么需要這么多的壓縮方案呢?
每一個壓縮方案都在壓縮和解壓縮速度和壓縮率間進行權衡。
如下是壓縮性能的比較

壓縮算法 原始文件大小 壓縮文件大小 壓縮速度 解壓速度
gzip 8.3GB 1.8GB 17.5MB/s 58MB/s
bzip2 8.3GB 1.1GB 2.4MB/s 9.5MB/s
LZO 8.3GB 2.9GB 49.3MB/s 74.6MB/s

9.1.2 壓縮參數(shù)配置

要在Hadoop中啟用壓縮,可以配置如下參數(shù)(mapred-site.xml文件中):

參數(shù) 默認值 階段 建議
io.compression.codecs (在core-site.xml中配置) org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.Lz4Codec 輸出壓縮 Hadoop使用文件擴展名判斷是否支持某種編解碼器
mapreduce.map.output.compress false mapper輸出 這個參數(shù)為true啟動壓縮
mapreduce.map.output.compress.codec org.apache.hadoop.io.compress.DefaultCodec mapper輸出 使用LZO、LZ4或snappy編解碼器在此階段壓縮數(shù)據(jù)
mapreduce.output.fileoutputformat.compress false reducer輸出 這個參數(shù)設為true啟動壓縮
mapreduce.output.fileoutputformat.compress.codec org.apache.hadoop.io.compress. DefaultCodec reducer輸出 使用標準工具或者編碼器,如gzip和bzip2
mapreduce.output.fileoutputformat.compress.type RECORD reducer輸出 SequenceFile輸出使用的壓縮類型:NONE和BLOCK

9.2 開啟Map輸出階段壓縮

開啟map輸出階段壓縮可以減少job中map和Reduce task間數(shù)據(jù)傳輸量。
1、具體配置如下:
1)開啟hive中間傳輸數(shù)據(jù)壓縮功能

set hive.exec.compress.intermediate =true;

2)開啟mapreduce中map輸出壓縮功能

set mapreduce.map.output.compress=true;

3)設置mapreduce中map輸出數(shù)據(jù)的壓縮方式

set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;

4)執(zhí)行查詢語句

select count(ename) name from emp;

5)觀察yarn執(zhí)行的job的map階段日志可看到如下內(nèi)容
大數(shù)據(jù)開發(fā)之Hive(壓縮和存儲),大數(shù)據(jù),hive,hadoop

9.3 開啟Reduce輸出階段壓縮

當Hive將輸出寫入到表中時可以通過屬性hive.exec.compress.output,對輸出內(nèi)容進行壓縮。當hive.exec.compress.output=false,這樣輸出就是非壓縮的純文本文件了。將hive.exec.compress.output=true,來開啟輸出結(jié)果壓縮功能。
1、設置步驟如下:
1)開啟hive最終輸出數(shù)據(jù)壓縮功能

set hive.exec.compress.output=true;

2)開啟mapreduce最終輸出數(shù)據(jù)壓縮

set mapreduce.output.fileoutputformat.compress=true;

3)設置mapreduce最終數(shù)據(jù)輸出壓縮方式

set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;

4)設置mapreduce最終數(shù)據(jù)輸出壓縮為塊壓縮

set mapreduce.output.fileoutputformat.compress.type=BLOCK;

5)測試以下輸出結(jié)果是否為壓縮文件

 insert overwrite local directory
 '/opt/module/hive/datas/distribute-result' select * from emp distribute by deptno sort by empno desc;

6)查看目錄/opt/module/hive/datas/distribute-result下文件

distribute-result]$ ll
總用量 4
-rw-r--r--. 1 atguigu atguigu 493 10月 21 22:56 000000_0.snappy

9.4 文件存儲格式

Hive支持的存儲數(shù)據(jù)的格式主要有:TEXTFILE、SEQUENCEFILE、ORC、PARQUET。

9.4.1 列式存儲和行式存儲

大數(shù)據(jù)開發(fā)之Hive(壓縮和存儲),大數(shù)據(jù),hive,hadoop
如圖所示,左邊為邏輯表,右邊第一個是行式存儲,第二個式列式存儲。

9.4.2 TextFile格式

默認格式,數(shù)據(jù)不做壓縮,磁盤開銷大,數(shù)據(jù)解析開銷大。
可結(jié)合Gzip,Bzip2使用,但使用Gzip這種方式,hive不會對數(shù)據(jù)進行切分,從而無法對數(shù)據(jù)進行并行操作。

9.4.3 Orc格式

Orc是Hive 0.11版里引入的新的存儲格式。
如下圖所示可以看到每個Orc文件由1個或多個stripe組成,每個stripe一般為HDFS的塊大小,每一個stripe包含多條記錄,這些記錄按照列進行獨立存儲,對應到Parquet中的row group的概念。每個Stripe里有三部分組成,分別是Index Data, Row Data,Stripe Footer;
大數(shù)據(jù)開發(fā)之Hive(壓縮和存儲),大數(shù)據(jù),hive,hadoop
1、Index Data:一個輕量級的index,默認是每隔1W行做一個索引。這里做的索引應該只是記錄某行的各字段在Row Data中的offset。
2、Row Data:存的是具體的數(shù)據(jù),先取部分行,然后對這些行按列進行存儲。對每個列進行了編碼,分成多個Stream來存儲。
3、Stripe Footer:存的是各個Stream的類型,長度等信息。每個文件有一個File Footer,這里面存的是每個Stripe的行數(shù),每個Column的數(shù)據(jù)類型信息等;每個文件的尾部是一個PostScript,這里面記錄了整個文件的壓縮類型以及FileFooter的長度信息等。在讀取文件時,會seek到文件尾部讀PostScript,從里面解析到File Footer長度,再讀FileFooter,從里面解析到各個Stripe信息,再讀各個Stripe,即從后往前讀。

9.4.4 Parquet格式

Parquet文件是以二進制方式存儲的,所以是不可以直接讀取的。文件中包括該文件的數(shù)據(jù)和元數(shù)據(jù),因此Parquet格式文件是自解析的。
1、行組(Row Group):每一個行組包含一定的行數(shù),在一個HDFS文件中至少存儲一個行組,類似于orc的stripe的概念。
2、列塊(Column Chunk):在一個行組中每一列保持在一個列塊中,行組中的所有列連續(xù)的存儲在這個行組文件中。一個列塊中的值都是相同類型的,不同列塊可能使用不同的算法進行壓縮。
3、頁(Page):每一個列塊劃分為多個頁,一個頁是最小的編碼的單位,在同一個列塊的不同頁可能使用不同的編碼方式。
通常情況下,在存儲Parquet數(shù)據(jù)的時候會按照Block大小設置行組的大小,由于一般情況下每一個Mapper任務處理數(shù)據(jù)的最小單位是一個Block,這樣可以把每一個行組由一個Mapper任務處理,增大任務執(zhí)行并行度。
大數(shù)據(jù)開發(fā)之Hive(壓縮和存儲),大數(shù)據(jù),hive,hadoop
上圖展示了一個Parquet文件的內(nèi)容,一個文件中可以存儲多個行組,文件的首位都是該文件的Magic Code,用于校驗它是否是一個Parquet文件,F(xiàn)ooter length記錄了文件元數(shù)據(jù)的大小,通過該值和文件長度可以計算出元數(shù)據(jù)的偏移量,文件的元數(shù)據(jù)中包括每一個行組的元數(shù)據(jù)信息和該文件存儲數(shù)據(jù)的Schema信息。除了文件中每一個行組的元數(shù)據(jù),每一頁的開始都會存儲該頁的元數(shù)據(jù),在Parquet中,有三中類型的頁:數(shù)據(jù)頁、字典頁和索引頁。數(shù)據(jù)頁用于存儲當前行組中該列的值,字典頁存儲該列值的編碼字典,每一個列塊中最多包含一個字典頁,索引頁用來存儲當前行組下該列的索引,目前Parquet中還不支持索引頁。

9.4.5 主流存儲文件格式對比

1、TextFile
1)創(chuàng)建log_text,設置其存儲數(shù)據(jù)格式為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)向表中加載數(shù)據(jù)

load data local inpath '/opt/module/hive/datas/log.data' into table log_text ;

3)查看表中數(shù)據(jù)大小

dfs -du -h /user/hive/warehouse/log_text;
18.1 M  54.4 M  /user/hive/warehouse/log_text/log.data

4)采用TextFile格式存儲,文件大小為18.1M
2、ORC
1)創(chuàng)建表loc_orc,存儲數(shù)據(jù)格式是ORC

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
tblproperties("orc.compress"="NONE"); // 由于ORC格式時自帶壓縮的,這設置orc存儲不使用壓縮

2)向表中插入數(shù)據(jù)

insert into table log_orc select * from log_text ;

3)查看表中數(shù)據(jù)大小

dfs -du -h /user/hive/warehouse/log_orc/ ;
7.7 M  23.1 M  /user/hive/warehouse/log_orc/000000_0

4)采用ORC(非壓縮)格式存儲,文件大小為7.7M
3、Parquet
1)創(chuàng)建表log_parquet,設置其存儲數(shù)據(jù)格式為parquet

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)向表中插入數(shù)據(jù)

insert into table log_parquet select * from log_text ;

3)查看表中數(shù)據(jù)大小

dfs -du -h /user/hive/warehouse/log_parquet/ ;
13.1 M  39.3 M  /user/hive/warehouse/log_parquet/000000_0

4)采用Parquet格式存儲,文件大小為13.1M
4、存儲文件的對比總結(jié):
ORC>Parquet>textFile
5、存儲文件的查詢速度測試:
1)TextFile

insert overwrite local directory '/opt/module/hive/data/log_text' select substring(url,1,4) from log_text ;
No rows affected (10.522 seconds)

2)ORC

insert overwrite local directory '/opt/module/hive/data/log_orc' select substring(url,1,4) from log_orc ;
No rows affected (11.495 seconds)

3)Parquet

insert overwrite local directory '/opt/module/hive/data/log_parquet' select substring(url,1,4) from log_parquet ;
No rows affected (11.445 seconds)

存儲文件的查詢速度總結(jié):查詢速度相近

9.5 存儲和壓縮結(jié)合

9.5.1 測試存儲和壓縮

1、創(chuàng)建一個ZLIB壓縮的ORC存儲方式
1)創(chuàng)建表log_orc_zlib表,設置其使用ORC文件格式,并使用ZLIB壓縮

 create table log_orc_zlib(
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"="ZLIB");

2)向表log_orc_zlib插入數(shù)據(jù)

insert into log_orc_zlib select * from log_text;

3)查看插入后數(shù)據(jù)文件大小

dfs -du -h /user/hive/warehouse/log_orc_zlib/ ;
2.8 M  8.3 M  /user/hive/warehouse/log_orc_zlib/000000_0

4)采用ORC文件格式,并使用ZLIB壓縮時,文件大小2.8M
2、創(chuàng)建一個SNAPP壓縮的ORC存儲方式
1)創(chuàng)建表log_orc_snappy表,設置其使用ORC文件格式,并使用snappy壓縮

 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");

2)插入數(shù)據(jù)

insert into log_orc_snappy select * from log_text;

3)查看插入后數(shù)據(jù)

dfs -du -h /user/hive/warehouse/log_orc_snappy/ ;
3.7 M  11.2 M  /user/hive/warehouse/log_orc_snappy/000000_1

4)采用ORC文件格式,并使用SNAPPY壓縮時,文件大小3.7M
ZLIB比Snappy壓縮的還小。原因是ZLIB采用的是deflate壓縮算法。比snappy壓縮的壓縮率高。
3、創(chuàng)建一個SNAPPY壓縮的parquet存儲方式
1)創(chuàng)建表log_parquet_snappy,設置其使用Parquet文件格式,并使用SNAPPY壓縮

create table log_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
tblproperties("parquet.compression"="SNAPPY");

2)向表log_parquet_snappy插入數(shù)據(jù)

insert into log_parquet_snappy select * from log_text;

3)查看插入后數(shù)據(jù)

dfs -du -h /user/hive/warehouse/log_parquet_snappy / ;
6.4 M  19.2 M  /user/hive/warehouse/log_parquet_snappy/000000_0

4)采用Parquet文件格式,并使用SNAPPY壓縮時,文件大小6.4MB
4、存儲方式和壓縮總結(jié)
在實際的項目開發(fā)當中:
1)hive表的數(shù)據(jù)存儲格式一般選擇:orc或parquet
2)壓縮方式一般選擇snappy,lzo文章來源地址http://www.zghlxwxcb.cn/news/detail-798178.html

到了這里,關于大數(shù)據(jù)開發(fā)之Hive(壓縮和存儲)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 大數(shù)據(jù)開發(fā)之電商數(shù)倉(hadoop、flume、hive、hdfs、zookeeper、kafka)

    大數(shù)據(jù)開發(fā)之電商數(shù)倉(hadoop、flume、hive、hdfs、zookeeper、kafka)

    1.1.1 數(shù)據(jù)倉庫概念 1、數(shù)據(jù)倉庫概念: 為企業(yè)制定決策,提供數(shù)據(jù)支持的集合。通過對數(shù)據(jù)倉庫中數(shù)據(jù)的分析,可以幫助企業(yè),改進業(yè)務流程、控制成本,提高產(chǎn)品質(zhì)量。 數(shù)據(jù)倉庫并不是數(shù)據(jù)的最終目的地,而是為數(shù)據(jù)最終的目的地做好準備,這些準備包括對數(shù)據(jù)的:清洗、

    2024年01月22日
    瀏覽(120)
  • 【Hadoop-OBS-Hive】利用華為云存儲對象 OBS 作為兩個集群的中間棧 load 文件到 Hive

    本次需求:想將一個集群上的 csv 文件 load 到另一個集群的 Hive 表中,由于兩個集群的網(wǎng)絡不通,所以利用華為云存儲對象 OBS 作為中間棧,從而實現(xiàn)。 服務器A上 /home/test/ 目錄下找到測試文件進行壓縮,實際生產(chǎn)中不排除單個文件很大,導致上傳至存儲對象速度慢,所以壓縮

    2024年02月02日
    瀏覽(23)
  • 【項目實戰(zhàn)】基于Hadoop大數(shù)據(jù)電商平臺用戶行為分析與可視化系統(tǒng)Hive、Spark計算機程序開發(fā)

    【項目實戰(zhàn)】基于Hadoop大數(shù)據(jù)電商平臺用戶行為分析與可視化系統(tǒng)Hive、Spark計算機程序開發(fā)

    注意:該項目只展示部分功能,如需了解,評論區(qū)咨詢即可。 在當今數(shù)字化時代,電商行業(yè)成為全球商業(yè)生態(tài)系統(tǒng)的關鍵組成部分,電商平臺已經(jīng)深入各行各業(yè),影響了人們的購物方式和消費習慣。隨著互聯(lián)網(wǎng)技術的不斷發(fā)展,電商平臺產(chǎn)生了大量的用戶數(shù)據(jù),包括點擊、購

    2024年02月04日
    瀏覽(111)
  • Hadoop+Hive+Spark+Hbase開發(fā)環(huán)境練習

    Hadoop+Hive+Spark+Hbase開發(fā)環(huán)境練習

    1.練習一 1. 數(shù)據(jù)準備 在hdfs上創(chuàng)建文件夾,上傳csv文件 [root@kb129 ~]# hdfs dfs -mkdir -p /app/data/exam 查看csv文件行數(shù) [root@kb129 ~]# hdfs dfs -cat /app/data/exam/meituan_waimai_meishi.csv | wc -l 2. 分別使用 RDD和 Spark SQL 完成以下分析(不用考慮數(shù)據(jù)去重) 開啟spark shell [root@kb129 ~]# spark-shell (1)加載

    2024年02月03日
    瀏覽(26)
  • 《黑馬程序員2023新版黑馬程序員大數(shù)據(jù)入門到實戰(zhàn)教程,大數(shù)據(jù)開發(fā)必會的Hadoop、Hive,云平臺實戰(zhàn)項目》學習筆記總目錄

    本文是對《黑馬程序員新版大數(shù)據(jù)入門到實戰(zhàn)教程》所有知識點的筆記進行總結(jié)分類。 學習視頻:黑馬程序員新版大數(shù)據(jù) 學習時總結(jié)的學習筆記以及思維導圖會在后續(xù)更新,請敬請期待。 前言:配置三臺虛擬機,為集群做準備(該篇章請到原視頻進行觀看,不在文章內(nèi)詳細

    2024年02月03日
    瀏覽(101)
  • (10)Hive的相關概念——文件格式和數(shù)據(jù)壓縮

    (10)Hive的相關概念——文件格式和數(shù)據(jù)壓縮

    目錄 一、文件格式 1.1?列式存儲和行式存儲 1.1.1 行存儲的特點 1.1.2 列存儲的特點 1.2?TextFile 1.3?SequenceFile 1.4??Parquet 1.5?ORC 二、數(shù)據(jù)壓縮? 2.1?數(shù)據(jù)壓縮-概述 ?2.1.1 壓縮的優(yōu)點 ?2.1.2 壓縮的缺點 2.2?Hive中壓縮配置 2.2.1?開啟Map輸出階段壓縮(MR 引擎) 2.2.2?開啟Reduce輸出階

    2024年02月22日
    瀏覽(21)
  • 大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive

    大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive

    Hive 是一個構建在 Hadoop 之上的數(shù)據(jù)倉庫,它可以將結(jié)構化的數(shù)據(jù)文件映射成表,并提供類 SQL 查詢功能,用于查詢的 SQL 語句會被轉(zhuǎn)化為 MapReduce 作業(yè),然后提交到 Hadoop 上運行。 特點: 簡單、容易上手 (提供了類似 sql 的查詢語言 hql),使得精通 sql 但是不了解 Java 編程的人也

    2024年02月01日
    瀏覽(28)
  • 【大數(shù)據(jù)之Hive】四、配置Hive元數(shù)據(jù)存儲到MySQL

    【大數(shù)據(jù)之Hive】四、配置Hive元數(shù)據(jù)存儲到MySQL

    需求: ??把Hive元數(shù)據(jù)寫道MySQL的metastore數(shù)據(jù)庫中(MySQL默認沒有metastore數(shù)據(jù)庫,需要提前創(chuàng)建:create database metastore;) ??連接地址:jdbc:mysql//hadoop102:3306/metastore ??驅(qū)動:com.mysql.cj.jdbc.Driver ??用戶名:root ??密碼:123456 (1)新建元數(shù)據(jù)庫: (2)把MySQL的JDBC驅(qū)動拷

    2024年02月09日
    瀏覽(18)
  • HDFS 跨集群數(shù)據(jù)同步(hive,hadoop)

    兩個不同的HDFS 集群數(shù)據(jù)遷移( A集群的數(shù)據(jù) - B 集群) 采用的是 SHELL 腳本 ?按表進行; 日期分區(qū)進行; #!/bin/bash ##################### #創(chuàng)建人:DZH #創(chuàng)建日期: 2020-04 #內(nèi)容: 數(shù)據(jù)遷移 ##################### ##################################### [ \\\"$#\\\" -ne 0 ] FILE=$1 path=$(cd `dirname $0`; pwd) ############## 獲取執(zhí)

    2024年04月27日
    瀏覽(104)
  • 大數(shù)據(jù)技術之Hadoop學習(七)——Hive數(shù)據(jù)倉庫

    大數(shù)據(jù)技術之Hadoop學習(七)——Hive數(shù)據(jù)倉庫

    目錄 素材 一、數(shù)據(jù)倉庫簡介 1、數(shù)據(jù)倉庫的認識 (1)數(shù)據(jù)倉庫是面向主題的。 (2)數(shù)據(jù)倉庫是隨時間變化的。 (3)數(shù)據(jù)倉庫相對穩(wěn)定 (4)OLTP和OLAP 2、數(shù)據(jù)倉庫的結(jié)構 (1)數(shù)據(jù)源 (2)數(shù)據(jù)存儲及管理 (3)OLAP 服務器 (4)前端工具 3、數(shù)據(jù)倉庫的數(shù)據(jù)模型 (1)星狀模

    2024年02月17日
    瀏覽(59)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包