国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

一文搞懂Hive的數(shù)據(jù)存儲(chǔ)與壓縮

共 18732字,需瀏覽 38分鐘

 ·

2021-09-23 15:39

  • 行存儲(chǔ)與列存儲(chǔ)

    • 行存儲(chǔ)的特點(diǎn)

    • 列存儲(chǔ)的特點(diǎn)

  • 常見的數(shù)據(jù)格式

    • TextFile

    • SequenceFile

    • RCfile

    • ORCfile

    • Parquet

  • 測(cè)試

    • 準(zhǔn)備測(cè)試數(shù)據(jù)

    • 存儲(chǔ)空間大小

    • 測(cè)試SQL 執(zhí)行效率

  • 總結(jié)

  • Hive 壓縮

    • Hive中間數(shù)據(jù)壓縮

    • 最終輸出結(jié)果壓縮

    • 常見的壓縮格式

    • 演示

  • 總結(jié)


行存儲(chǔ)與列存儲(chǔ)

  • 當(dāng)今的數(shù)據(jù)處理大致可分為兩大類,聯(lián)機(jī)事務(wù)處理 OLTP(on-line transaction processing)聯(lián)機(jī)分析處理 OLAP(On-Line Analytical Processing)=,OLTP 是傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的主要應(yīng)用來執(zhí)行一些基本的、日常的事務(wù)處理比如數(shù)據(jù)庫(kù)記錄的增、刪、改、查等等而OLAP則是分布式數(shù)據(jù)庫(kù)的主要應(yīng)用它對(duì)實(shí)時(shí)性要求不高,但處理的數(shù)據(jù)量大通常應(yīng)用于復(fù)雜的動(dòng)態(tài)報(bào)表系統(tǒng)上

所以一般OLTP 都是使用行式存儲(chǔ)的,因?yàn)閷?shí)時(shí)性要求高,而且有大量的更新操作,OLAP 都是使用列式存儲(chǔ)的,因?yàn)閷?shí)時(shí)性要求不高,主要是要求性能好

行存儲(chǔ)的特點(diǎn)

  • 查詢滿足條件的一整行數(shù)據(jù)的時(shí),只需要找到其中一個(gè)值,其余的值都在相鄰地方,所以此時(shí)行存儲(chǔ)查詢的速度更快。
  • 傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),如 Oracle、DB2、MySQL、SQL SERVER 等采用行式存儲(chǔ)法(Row-based),在基于行式存儲(chǔ)的數(shù)據(jù)庫(kù)中, 數(shù)據(jù)是按照行數(shù)據(jù)為基礎(chǔ)邏輯存儲(chǔ)單元進(jìn)行存儲(chǔ)的, 一行中的數(shù)據(jù)在存儲(chǔ)介質(zhì)中以連續(xù)存儲(chǔ)形式存在。
  • TEXTFILE和SEQUENCEFILE的存儲(chǔ)格式都是基于行存儲(chǔ)的
  • 這種存儲(chǔ)格式比較方便進(jìn)行INSERT/UPDATE操作,不足之處就是如果查詢只涉及某幾個(gè)列,它會(huì)把整行數(shù)據(jù)都讀取出來,不能跳過不必要的列讀取。當(dāng)然數(shù)據(jù)比較少,一般沒啥問題,如果數(shù)據(jù)量比較大就比較影響性能,還有就是由于每一行中,列的數(shù)據(jù)類型不一致,導(dǎo)致不容易獲得一個(gè)極高的壓縮比,也就是空間利用率不高

列存儲(chǔ)的特點(diǎn)

  • 查詢時(shí),只有涉及到的列才會(huì)被查詢,不會(huì)把所有列都查詢出來,即可以跳過不必要的列查詢,在查詢只需要少數(shù)幾個(gè)字段的時(shí)候,能大大減少讀取的數(shù)據(jù)量;因?yàn)槊恳涣械臄?shù)據(jù)都是存儲(chǔ)在一起的,每個(gè)字段的數(shù)據(jù)類型一定是相同的,列式存儲(chǔ)可以針對(duì)性的設(shè)計(jì)更好的設(shè)計(jì)壓縮算法,高效的壓縮率,不僅節(jié)省儲(chǔ)存空間也節(jié)省計(jì)算內(nèi)存和CPU

  • 不足之處是INSERT/UPDATE很麻煩或者不方便,不適合掃描小量的數(shù)據(jù)

  • 列式存儲(chǔ)(Column-based)是相對(duì)于行式存儲(chǔ)來說的,新興的Hbase、HPVertica、EMCGreenplum等分布式數(shù)據(jù)庫(kù)均采用列式存儲(chǔ)。在基于列式存儲(chǔ)的數(shù)據(jù)庫(kù)中, 數(shù)據(jù)是按照列為基礎(chǔ)邏輯存儲(chǔ)單元進(jìn)行存儲(chǔ)的,一列中的數(shù)據(jù)在存儲(chǔ)介質(zhì)中以連續(xù)存儲(chǔ)形式存在。

列存儲(chǔ)的特點(diǎn):因?yàn)槊總€(gè)字段的數(shù)據(jù)聚集存儲(chǔ),在查詢只需要少數(shù)幾個(gè)字段的時(shí)候,能大大減少讀取的數(shù)據(jù)量;每個(gè)字段的數(shù)據(jù)類型一定是相同的,列式存儲(chǔ)可以針對(duì)性的設(shè)計(jì)更好的設(shè)計(jì)壓縮算法。ORC和PARQUET是基于列式存儲(chǔ)的。

舉個(gè)例子吧不然還是太抽象,假設(shè)一個(gè)表有10億行數(shù)據(jù),按照列式存儲(chǔ)的定義,應(yīng)該先將某個(gè)字段的10億條數(shù)據(jù)存儲(chǔ)完之后,再存儲(chǔ)其他字段。

常見的數(shù)據(jù)格式

Hive 支持一下幾種存儲(chǔ)格式,下面我們會(huì)對(duì)每種格式的特點(diǎn)進(jìn)行簡(jiǎn)單介紹

  1. Text File
  2. SequenceFile
  3. RCFile
  4. Avro Files
  5. ORC Files
  6. Parquet
  7. Custom INPUTFORMAT and OUTPUTFORMAT(用戶自定義格式)

Hive 默認(rèn)使用的實(shí)Text File,也就是說當(dāng)你建表的時(shí)候不指定文件的存儲(chǔ)格式的時(shí)候,它就使用的就是Text File,Hive 是支持指定默認(rèn)存儲(chǔ)格式的

<property>
  <name>hive.default.fileformat</name>
  <value>TextFile</value>
  <description>
    Expects one of [textfile, sequencefile, rcfile, orc, parquet].
    Default file format for CREATE TABLE statement. Users can explicitly override it by CREATE TABLE ... STORED AS [FORMAT]
  </description>
</property>

TextFile

存儲(chǔ)方式:行存儲(chǔ)

默認(rèn)的存儲(chǔ)格式,數(shù)據(jù)不做壓縮,磁盤開銷大,數(shù)據(jù)解析開銷大??山Y(jié)合Gzip、Bzip2使用(系統(tǒng)自動(dòng)檢查,執(zhí)行查詢時(shí)自動(dòng)解壓),但使用這種方式,壓縮后的文件不支持split,Hive不會(huì)對(duì)數(shù)據(jù)進(jìn)行切分,從而無法對(duì)數(shù)據(jù)進(jìn)行并行操作。

并且在反序列化過程中,必須逐個(gè)字符判斷是不是分隔符和行結(jié)束符,因此反序列化開銷會(huì)比SequenceFile高幾十倍。

SequenceFile

SequenceFile是Hadoop API提供的一種二進(jìn)制文件支持,,存儲(chǔ)方式為行存儲(chǔ),其具有使用方便、可分割、可壓縮的特點(diǎn)。

壓縮數(shù)據(jù)文件可以節(jié)省磁盤空間,但Hadoop中有些原生壓縮文件的就是不支持分割,所以Hadoop 猜提供了SequenceFile 這種格式,支持分割的文件可以并行的有多個(gè)mapper程序處理大數(shù)據(jù)文件,大多數(shù)文件不支持可分割是因?yàn)檫@些文件只能從頭開始讀。

SequenceFile支持三種壓縮選擇:NONE,RECORD,BLOCK。Record壓縮率低,一般建議使用BLOCK壓縮,RECORD是默認(rèn)選項(xiàng),通常BLOCK會(huì)帶來較RECORD更好的壓縮性能。

SequenceFile的優(yōu)勢(shì)是文件和hadoop api中的MapFile是相互兼容的。

:建表使用這個(gè)格式,導(dǎo)入數(shù)據(jù)時(shí)會(huì)直接把數(shù)據(jù)文件拷貝到hdfs上不進(jìn)行處理。SequenceFile、RCFile、ORC格式的表不能直接從本地文件導(dǎo)入數(shù)據(jù),數(shù)據(jù)要先導(dǎo)入到TextFile格式的表中,然后再?gòu)腡extFile表中用insert導(dǎo)入到SequenceFile、RCFile表中

RCfile

存儲(chǔ)方式:數(shù)據(jù)按行分塊,每塊按列存儲(chǔ)

Record Columnar的縮寫,是Hadoop中第一個(gè)列式存儲(chǔ)格式。能夠很好的壓縮和快速的查詢性能,但是不支持模式演進(jìn)。是一種行列存儲(chǔ)相結(jié)合的存儲(chǔ)方式。

首先,其將數(shù)據(jù)按行分塊,保同一行的數(shù)據(jù)位于同一個(gè)塊上,避免讀一個(gè)記錄需要讀取多個(gè)block。其次,塊數(shù)據(jù)列式存儲(chǔ),有利于數(shù)據(jù)壓縮和快速的列存取,并且能跳過不必要的列讀取

ORCfile

存儲(chǔ)方式:數(shù)據(jù)按行分塊 每塊按照列存儲(chǔ)(不是真正意義上的列存儲(chǔ),可以理解為分段列存儲(chǔ),你可以對(duì)照我們講的那個(gè)例子來理解)

ORC的全稱是(Optimized Row Columnar),ORC文件格式是一種Hadoop生態(tài)圈中的列式存儲(chǔ)格式,它的產(chǎn)生早在2013年初,最初產(chǎn)生自Apache Hive,用于降低Hadoop數(shù)據(jù)存儲(chǔ)空間和加速Hive查詢速度。和Parquet類似,它并不是一個(gè)單純的列式存儲(chǔ)格式,仍然是首先根據(jù)行組分割整個(gè)表,在每一個(gè)行組內(nèi)進(jìn)行按列存儲(chǔ)。

ORC文件是自描述的,它的元數(shù)據(jù)使用Protocol Buffers序列化,并且文件中的數(shù)據(jù)盡可能的壓縮以降低存儲(chǔ)空間的消耗,目前也被Spark SQL、Presto等查詢引擎支持,但是Impala對(duì)于ORC目前沒有支持,仍然使用Parquet作為主要的列式存儲(chǔ)格式。2015年ORC項(xiàng)目被Apache項(xiàng)目基金會(huì)提升為Apache頂級(jí)項(xiàng)目。

ORC文件特點(diǎn)是壓縮快 快速列存取,是rcfile的改良版本,相比RC能夠更好的壓縮,能夠更快的查詢,支持各種復(fù)雜的數(shù)據(jù)類型,比如datetime,decimal,以及復(fù)雜的struct是以二進(jìn)制方式存儲(chǔ)的,所以是不可以直接讀取,ORC文件也是自解析的,它包含許多的元數(shù)據(jù),這些元數(shù)據(jù)都是同構(gòu)ProtoBuffer進(jìn)行序列化的。

需要注意的是 ORC在讀寫時(shí)候需要消耗額外的CPU資源來壓縮和解壓縮,當(dāng)然這部分的CPU消耗是非常少的。

格式

ORC文件:保存在文件系統(tǒng)上的普通二進(jìn)制文件,一個(gè)ORC文件中可以包含多個(gè)stripe,每個(gè)Orc文件由1個(gè)或多個(gè)stripe組成,每個(gè)stripe一般為HDFS的塊大小,每一個(gè)stripe包含多條記錄,這些記錄按照列進(jìn)行獨(dú)立存儲(chǔ),對(duì)應(yīng)到Parquet中就是row group的概念。每個(gè)Stripe里有三部分組成,分別是Index Data,Row Data,Stripe Footer;

stripe:一組行形成一個(gè)stripe,每次讀取文件是以行組為單位的,一般為HDFS的塊大小,保存了每一列的索引和數(shù)據(jù)。

文件級(jí)元數(shù)據(jù):包括文件的描述信息PostScript、文件meta信息(包括整個(gè)文件的統(tǒng)計(jì)信息)、所有stripe的信息和文件schema信息。

stripe元數(shù)據(jù):保存stripe的位置、每一個(gè)列的在該stripe的統(tǒng)計(jì)信息以及所有的stream類型和位置。

row group:索引的最小單位,一個(gè)stripe中包含多個(gè)row group,默認(rèn)為10000個(gè)值組成。每次讀取文件是以行組為單位的,一般為HDFS的塊大小,保存了每一列的索引和數(shù)據(jù)。

在ORC文件中保存了三個(gè)層級(jí)的統(tǒng)計(jì)信息,分別為文件級(jí)別、stripe級(jí)別和row group級(jí)別的,他們都可以用來根據(jù)Search ARGuments(謂詞下推條件)判斷是否可以跳過某些數(shù)據(jù),在統(tǒng)計(jì)信息中都包含成員數(shù)和是否有null值,并且對(duì)于不同類型的數(shù)據(jù)設(shè)置一些特定的統(tǒng)計(jì)信息。

file level:在ORC文件的末尾會(huì)記錄文件級(jí)別的統(tǒng)計(jì)信息,會(huì)記錄整個(gè)文件中columns的統(tǒng)計(jì)信息。這些信息主要用于查詢的優(yōu)化,也可以為一些簡(jiǎn)單的聚合查詢比如max, min, sum輸出結(jié)果。

**stripe level:**ORC文件會(huì)保存每個(gè)字段stripe級(jí)別的統(tǒng)計(jì)信息,ORC reader使用這些統(tǒng)計(jì)信息來確定對(duì)于一個(gè)查詢語(yǔ)句來說,需要讀入哪些stripe中的記錄。比如說某個(gè)stripe的字段max(a)=10,min(a)=3,那么當(dāng)where條件為a >10或者a <3時(shí),那么這個(gè)stripe中的所有記錄在查詢語(yǔ)句執(zhí)行時(shí)不會(huì)被讀入

row level: 為了進(jìn)一步的避免讀入不必要的數(shù)據(jù),在邏輯上將一個(gè)column的index以一個(gè)給定的值(默認(rèn)為10000,可由參數(shù)配置)分割為多個(gè)index組。以10000條記錄為一個(gè)組,對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)。Hive查詢引擎會(huì)將where條件中的約束傳遞給ORC reader,這些reader根據(jù)組級(jí)別的統(tǒng)計(jì)信息,過濾掉不必要的數(shù)據(jù)。如果該值設(shè)置的太小,就會(huì)保存更多的統(tǒng)計(jì)信息,用戶需要根據(jù)自己數(shù)據(jù)的特點(diǎn)權(quán)衡一個(gè)合理的值

數(shù)據(jù)訪問

讀取ORC文件是從尾部開始的,第一次讀取16KB的大小,盡可能的將Postscript和Footer數(shù)據(jù)都讀入內(nèi)存。文件的最后一個(gè)字節(jié)保存著PostScript的長(zhǎng)度,它的長(zhǎng)度不會(huì)超過256字節(jié),PostScript中保存著整個(gè)文件的元數(shù)據(jù)信息,它包括文件的壓縮格式、文件內(nèi)部每一個(gè)壓縮塊的最大長(zhǎng)度(每次分配內(nèi)存的大小)、Footer長(zhǎng)度,以及一些版本信息。在Postscript和Footer之間存儲(chǔ)著整個(gè)文件的統(tǒng)計(jì)信息(上圖中未畫出),這部分的統(tǒng)計(jì)信息包括每一個(gè)stripe中每一列的信息,主要統(tǒng)計(jì)成員數(shù)、最大值、最小值、是否有空值等。

接下來讀取文件的Footer信息,它包含了每一個(gè)stripe的長(zhǎng)度和偏移量,該文件的schema信息(將schema樹按照schema中的編號(hào)保存在數(shù)組中)、整個(gè)文件的統(tǒng)計(jì)信息以及每一個(gè)row group的行數(shù)。

處理stripe時(shí)首先從Footer中獲取每一個(gè)stripe的其實(shí)位置和長(zhǎng)度、每一個(gè)stripe的Footer數(shù)據(jù)(元數(shù)據(jù),記錄了index和data的的長(zhǎng)度),整個(gè)striper被分為index和data兩部分,stripe內(nèi)部是按照row group進(jìn)行分塊的(每一個(gè)row group中多少條記錄在文件的Footer中存儲(chǔ)),row group內(nèi)部按列存儲(chǔ)。每一個(gè)row group由多個(gè)stream保存數(shù)據(jù)和索引信息。每一個(gè)stream的數(shù)據(jù)會(huì)根據(jù)該列的類型使用特定的壓縮算法保存。在ORC中存在如下幾種stream類型:

  • PRESENT:每一個(gè)成員值在這個(gè)stream中保持一位(bit)用于標(biāo)示該值是否為NULL,通過它可以只記錄部位NULL的值
  • DATA:該列的中屬于當(dāng)前stripe的成員值。
  • LENGTH:每一個(gè)成員的長(zhǎng)度,這個(gè)是針對(duì)string類型的列才有的。
  • DICTIONARY_DATA:對(duì)string類型數(shù)據(jù)編碼之后字典的內(nèi)容。
  • SECONDARY:存儲(chǔ)Decimal、timestamp類型的小數(shù)或者納秒數(shù)等。
  • ROW_INDEX:保存stripe中每一個(gè)row group的統(tǒng)計(jì)信息和每一個(gè)row group起始位置信息。

在初始化階段獲取全部的元數(shù)據(jù)之后,可以通過includes數(shù)組指定需要讀取的列編號(hào),它是一個(gè)boolean數(shù)組,如果不指定則讀取全部的列,還可以通過傳遞SearchArgument參數(shù)指定過濾條件,根據(jù)元數(shù)據(jù)首先讀取每一個(gè)stripe中的index信息,然后根據(jù)index中統(tǒng)計(jì)信息以及SearchArgument參數(shù)確定需要讀取的row group編號(hào),再根據(jù)includes數(shù)據(jù)決定需要從這些row group中讀取的列,通過這兩層的過濾需要讀取的數(shù)據(jù)只是整個(gè)stripe多個(gè)小段的區(qū)間,然后ORC會(huì)盡可能合并多個(gè)離散的區(qū)間盡可能的減少I/O次數(shù)。然后再根據(jù)index中保存的下一個(gè)row group的位置信息調(diào)至該stripe中第一個(gè)需要讀取的row group中。

使用ORC文件格式時(shí),用戶可以使用HDFS的每一個(gè)block存儲(chǔ)ORC文件的一個(gè)stripe。對(duì)于一個(gè)ORC文件來說,stripe的大小一般需要設(shè)置得比HDFS的block小,如果不這樣的話,一個(gè)stripe就會(huì)分別在HDFS的多個(gè)block上,當(dāng)讀取這種數(shù)據(jù)時(shí)就會(huì)發(fā)生遠(yuǎn)程讀數(shù)據(jù)的行為。如果設(shè)置stripe的只保存在一個(gè)block上的話,如果當(dāng)前block上的剩余空間不足以存儲(chǔ)下一個(gè)strpie,ORC的writer接下來會(huì)將數(shù)據(jù)打散保存在block剩余的空間上,直到這個(gè)block存滿為止。這樣,下一個(gè)stripe又會(huì)從下一個(gè)block開始存儲(chǔ)。

由于ORC中使用了更加精確的索引信息,使得在讀取數(shù)據(jù)時(shí)可以指定從任意一行開始讀取,更細(xì)粒度的統(tǒng)計(jì)信息使得讀取ORC文件跳過整個(gè)row group,ORC默認(rèn)會(huì)對(duì)任何一塊數(shù)據(jù)和索引信息使用ZLIB壓縮,因此ORC文件占用的存儲(chǔ)空間也更小

Parquet

Parquet能夠很好的壓縮,有很好的查詢性能,支持有限的模式演進(jìn)。但是寫速度通常比較慢。這中文件格式主要是用在Cloudera Impala上面的。Parquet文件是以二進(jìn)制方式存儲(chǔ)的,所以是不可以直接讀取的,文件中包括該文件的數(shù)據(jù)和元數(shù)據(jù),因此Parquet格式文件是自解析的。

Parquet的設(shè)計(jì)方案,整體來看,基本照搬了Dremel中對(duì)嵌套數(shù)據(jù)結(jié)構(gòu)的打平和重構(gòu)算法,通過高效的數(shù)據(jù)打平和重建算法,實(shí)現(xiàn)按列存儲(chǔ)(列組),進(jìn)而對(duì)列數(shù)據(jù)引入更具針對(duì)性的編碼和壓縮方案,來降低存儲(chǔ)代價(jià),提升計(jì)算性能。想要了解這一算法邏輯的,可以看Dremel的論文:Dremel: Interactive Analysis of WebScaleDatasets

測(cè)試

準(zhǔn)備測(cè)試數(shù)據(jù)

首先我們生成一份測(cè)試數(shù)據(jù),這是生成數(shù)據(jù)的測(cè)試代碼

public class ProduceTestData {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd HH:MM:ss");

    @Test
    public void testRandomName() throws IOException {
        Faker faker = new Faker(Locale.CHINA);
        final Name name = faker.name();
        final Address address = faker.address();
        Number number = faker.number();
        PhoneNumber phoneNumber = faker.phoneNumber();

        BufferedWriter out = new BufferedWriter(new FileWriter("/Users/liuwenqiang/access.log"));
        int num=0;
        while (num<10000000){
            int id = number.randomDigitNotZero();
            String userName = name.name();
            String time = simpleDateFormat.format(new Date(System.currentTimeMillis()));
            String city = address.city();
            String phonenum = phoneNumber.cellPhone();
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append(id);
            stringBuilder.append("\t");

            stringBuilder.append(userName);
            stringBuilder.append("\t");

            stringBuilder.append(city);
            stringBuilder.append("\t");

            stringBuilder.append(phonenum);
            stringBuilder.append("\t");

            stringBuilder.append(time);

            out.write(stringBuilder.toString());
            out.newLine();
        }
        out.flush();
        out.close();
    }

}

下面準(zhǔn)備三張表,分別是log_text、log_orc和log_parquet

create table log_text(
     id int,
     name string,
     city string,
     phone string,
     acctime string)
row format delimited fields terminated by '\t'
stored as textfile;
LOAD DATA LOCAL INPATH '/Users/liuwenqiang/access.log' OVERWRITE INTO TABLE ods.log_text;
create table log_orc(
     id int,
     name string,
     city string,
     phone string,
     acctime string)
row format delimited fields terminated by '\t'
stored as orc;
insert overwrite table ods.log_orc select * from ods.log_text;
create table log_parquet(
     id int,
     name string,
     city string,
     phone string,
     acctime string)
row format delimited fields terminated by '\t'
stored as parquet;
insert overwrite table ods.log_parquet select * from ods.log_text;

所有關(guān)于ORCFile的參數(shù)都是在Hive SQL語(yǔ)句的TBLPROPERTIES字段里面出現(xiàn)

KeyDefaultNotes
orc.compressZLIBhigh level compression (one of NONE, ZLIB, SNAPPY)
orc.compress.size262,144number of bytes in each compression chunk
orc.compress.size262,144number of bytes in each compression chunk
orc.row.index.stride10,000number of rows between index entries (must be >= 1000)
orc.create.indextruewhether to create row indexes

存儲(chǔ)空間大小

text

orc

parquet

測(cè)試SQL 執(zhí)行效率

測(cè)試SQL select city,count(1) as cnt from log_text group by city order by cnt desc;

text

orc

parquet

總結(jié)

  1. 介紹了行式存儲(chǔ)和列式存儲(chǔ)的特點(diǎn),以及適用場(chǎng)景
  2. 介紹了Hive 常見的存儲(chǔ)格式,Parquet 和 ORC都是二進(jìn)制存儲(chǔ)的,都是不可直接讀取的,Parquet和ORC 都是Apache 頂級(jí)項(xiàng)目,Parquet不支持ACID 不支持更新,ORC支持有限的ACID 和 更新
  3. 我們簡(jiǎn)單對(duì)比了一下Text、ORCfile 和Parquet的存儲(chǔ)占用和查詢性能,因?yàn)槲覀兊牟樵儽容^簡(jiǎn)單加上數(shù)據(jù)本身不是很大,所以查詢性能差異不是很大,但是占用空間存儲(chǔ)的差異還是很大的

Hive 壓縮

對(duì)于數(shù)據(jù)密集型任務(wù),I/O操作和網(wǎng)絡(luò)數(shù)據(jù)傳輸需要花費(fèi)相當(dāng)長(zhǎng)的時(shí)間才能完成。通過在 Hive 中啟用壓縮功能,我們可以提高 Hive 查詢的性能,并節(jié)省 HDFS 集群上的存儲(chǔ)空間。

HiveQL語(yǔ)句最終都將轉(zhuǎn)換成為hadoop中的MapReduce job,而MapReduce job可以有對(duì)處理的數(shù)據(jù)進(jìn)行壓縮。

首先說明mapreduce哪些過程可以設(shè)置壓縮:需要分析處理的數(shù)據(jù)在進(jìn)入map前可以壓縮,然后解壓處理,map處理完成后的輸出可以壓縮,這樣可以減少網(wǎng)絡(luò)I/O(reduce通常和map不在同一節(jié)點(diǎn)上),reduce拷貝壓縮的數(shù)據(jù)后進(jìn)行解壓,處理完成后可以壓縮存儲(chǔ)在hdfs上,以減少磁盤占用量。

Hive中間數(shù)據(jù)壓縮

提交后,一個(gè)復(fù)雜的 Hive 查詢通常會(huì)轉(zhuǎn)換為一系列多階段 MapReduce 作業(yè),這些作業(yè)將通過 Hive 引擎進(jìn)行鏈接以完成整個(gè)查詢。因此,這里的 ‘中間輸出’ 是指前一個(gè) MapReduce 作業(yè)的輸出,將會(huì)作為下一個(gè) MapReduce 作業(yè)的輸入數(shù)據(jù)。

可以通過使用 Hive Shell 中的 set 命令或者修改 hive-site.xml 配置文件來修改 hive.exec.compress.intermediate 屬性,這樣我們就可以在 Hive Intermediate 輸出上啟用壓縮。

hive.exec.compress.intermediate:默認(rèn)為false,設(shè)置true為激活中間數(shù)據(jù)壓縮功能,就是MapReduce的shuffle階段對(duì)mapper產(chǎn)生中間壓縮??梢允褂?set 命令在 hive shell 中設(shè)置這些屬性

set hive.exec.compress.intermediate=true
set mapred.map.output.compression.codec= org.apache.hadoop.io.compress.SnappyCodec
或者
set hive.exec.compress.intermediate=true
set mapred.map.output.compression.codec=com.hadoop.compression.lzo.LzoCodec

也可以在配置文件中進(jìn)行配置

<property>
   <name>hive.exec.compress.intermediate</name>
   <value>true</value>
   <description>
     This controls whether intermediate files produced by Hive between multiple map-reduce jobs are compressed.
     The compression codec and other options are determined from Hadoop config variables mapred.output.compress*
   </description>
</property>
<property>
   <name>hive.intermediate.compression.codec</name>
   <value>org.apache.hadoop.io.compress.SnappyCodec</value>
   <description/>
</property>

最終輸出結(jié)果壓縮

hive.exec.compress.output:用戶可以對(duì)最終生成的Hive表的數(shù)據(jù)通常也需要壓縮。該參數(shù)控制這一功能的激活與禁用,設(shè)置為true來聲明將結(jié)果文件進(jìn)行壓縮。

mapred.output.compression.codec:將hive.exec.compress.output參數(shù)設(shè)置成true后,然后選擇一個(gè)合適的編解碼器,如選擇SnappyCodec。設(shè)置如下(兩種壓縮的編寫方式是一樣的):

set hive.exec.compress.output=true 
set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec
或者
set mapred.output.compress=true
set mapred.output.compression.codec=org.apache.hadoop.io.compress.LzopCodec

同樣可以通過配置文件配置

<property>
  <name>hive.exec.compress.output</name>
  <value>true</value>
  <description>
    This controls whether the final outputs of a query (to a local/HDFS file or a Hive table) is compressed.
    The compression codec and other options are determined from Hadoop config variables mapred.output.compress*
  </description>
</property>

常見的壓縮格式

Hive支持的壓縮格式有bzip2、gzip、deflate、snappy、lzo等。Hive依賴Hadoop的壓縮方法,所以Hadoop版本越高支持的壓縮方法越多,可以在$HADOOP_HOME/conf/core-site.xml中進(jìn)行配置:

<property>  
    <name>io.compression.codecs</name>  
    <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.BZip2Codec
    </value>  
</property>  
<property>
 
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>

需要注意的是在我們?cè)趆ive配置開啟壓縮之前,我們需要配置讓Hadoop 支持,因?yàn)閔ive 開啟壓縮只是指明了使用哪一種壓縮算法,具體的配置還是需要在Hadoop 中配置

常見的壓縮格式有:

img

其中壓縮比bzip2 > zlib > gzip > deflate > snappy > lzo > lz4,在不同的測(cè)試場(chǎng)景中,會(huì)有差異,這僅僅是一個(gè)大概的排名情況。bzip2、zlib、gzip、deflate可以保證最小的壓縮,但在運(yùn)算中過于消耗時(shí)間。

從壓縮性能上來看:lz4 > lzo > snappy > deflate > gzip > bzip2,其中l(wèi)z4、lzo、snappy壓縮和解壓縮速度快,壓縮比低。

所以一般在生產(chǎn)環(huán)境中,經(jīng)常會(huì)采用lz4、lzo、snappy壓縮,以保證運(yùn)算效率。

壓縮格式對(duì)應(yīng)的編碼/解碼
DEFAULTorg.apache.hadoop.io.compress.DefaultCodec
Gziporg.apache.hadoop.io.compress.GzipCodec
Bziporg.apache.hadoop.io.compress.BzipCodec
Snappyorg.apache.hadoop.io.compress.SnappyCodec
Lzoorg.apache.hadoop.io.compress.LzopCodec

對(duì)于使用 Gzip or Bzip2 壓縮的文件我們是可以直接導(dǎo)入到text 存儲(chǔ)類型的表中的,hive 會(huì)自動(dòng)幫我們完成數(shù)據(jù)的解壓

CREATE TABLE raw (line STRING)
   ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';
 
LOAD DATA LOCAL INPATH '/tmp/weblogs/20090603-access.log.gz' INTO TABLE raw;

Native Libraries

Hadoop由Java語(yǔ)言開發(fā),所以壓縮算法大多由Java實(shí)現(xiàn);但有些壓縮算法并不適合Java進(jìn)行實(shí)現(xiàn),會(huì)提供本地庫(kù)Native Libraries補(bǔ)充支持。Native Libraries除了自帶bzip2, lz4, snappy, zlib壓縮方法外,還可以自定義安裝需要的功能庫(kù)(snappy、lzo等)進(jìn)行擴(kuò)展。而且使用本地庫(kù)Native Libraries提供的壓縮方式,性能上會(huì)有50%左右的提升。

使用命令可以查看native libraries的加載情況:

hadoop checknative -a

完成對(duì)Hive表的壓縮,有兩種方式:配置MapReduce壓縮、開啟Hive表壓縮功能。因?yàn)镠ive會(huì)將SQL作業(yè)轉(zhuǎn)換為MapReduce任務(wù),所以直接對(duì)MapReduce進(jìn)行壓縮配置,可以達(dá)到壓縮目的;當(dāng)然為了方便起見,Hive中的特定表支持壓縮屬性,自動(dòng)完成壓縮的功能。

Hive中的可用壓縮編解碼器

要在 Hive 中啟用壓縮,首先我們需要找出 Hadoop 集群上可用的壓縮編解碼器,我們可以使用下面的 set 命令列出可用的壓縮編解碼器。

hive> set io.compression.codecs;
io.compression.codecs=
  org.apache.hadoop.io.compress.GzipCodec,
  org.apache.hadoop.io.compress.DefaultCodec,
  org.apache.hadoop.io.compress.BZip2Codec,
  org.apache.hadoop.io.compress.SnappyCodec,
  com.hadoop.compression.lzo.LzoCodec,
  com.hadoop.compression.lzo.LzopCodec

演示

首先我們創(chuàng)建一個(gè)未經(jīng)壓縮的表tmp_no_compress

CREATE TABLE tmp_no_compress ROW FORMAT DELIMITED LINES TERMINATED BY '\n'
AS SELECT * FROM log_text;

我們看一下不設(shè)置壓縮屬性的輸出

在 Hive Shell 中設(shè)置壓縮屬性:

set hive.exec.compress.output=true;
set mapreduce.output.fileoutputformat.compress=true;
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec;
set mapreduce.output.fileoutputformat.compress.type=BLOCK;

根據(jù)現(xiàn)有表 tmp_order_id 創(chuàng)建一個(gè)壓縮后的表 tmp_order_id_compress:

CREATE TABLE tmp_compress ROW FORMAT DELIMITED LINES TERMINATED BY '\n'
AS SELECT * FROM log_text;

我們?cè)诳匆幌略O(shè)置壓縮屬性后輸出:

總結(jié)

  1. 數(shù)據(jù)壓縮可以發(fā)生在哪些階段 1 輸入數(shù)據(jù)可以壓縮后的數(shù)據(jù) 2 中間的數(shù)據(jù)可以壓縮 3 輸出的數(shù)據(jù)可以壓縮
  2. hive 僅僅是配置了開啟壓縮和使用哪種壓縮方式,真正的配置是在hadoop 中配置的,而數(shù)據(jù)的壓縮是在MapReduce 中發(fā)生的
  3. 對(duì)于數(shù)據(jù)密集型任務(wù),I/O操作和網(wǎng)絡(luò)數(shù)據(jù)傳輸需要花費(fèi)相當(dāng)長(zhǎng)的時(shí)間才能完成。通過在 Hive 中啟用壓縮功能,我們可以提高 Hive 查詢的性能,并節(jié)省 HDFS 集群上的存儲(chǔ)空間。

猜你喜歡
Hadoop3數(shù)據(jù)容錯(cuò)技術(shù)(糾刪碼)
Hadoop 數(shù)據(jù)遷移用法詳解
Flink實(shí)時(shí)計(jì)算topN熱榜
數(shù)倉(cāng)建模分層理論
數(shù)倉(cāng)建模方法論
大數(shù)據(jù)組件重點(diǎn)學(xué)習(xí)這幾個(gè)


瀏覽 33
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 97久久精品| 一级片日韩| 日批视频在线观看| 丁香天堂| 人人操人人操人人操人人操| 国产无遮挡又黄又爽又| 色秘乱码一区二区三区| 九九九国产| 国产福利精品视频| 国产黄色免费观看| 嫰BBB槡BBBB槡BBBB| 特一级黄片| 午夜精品一区二区三区在线成人| 999成人电影| 天天操天天干天天日| 色噜噜在线| 国产综合网站| 91麻豆精品无码| 91在线观看网站| 欧美成人精品A片免费一区99| 正在播放李彩斐被洋老外| 色中文字幕| 欧美AAA视频| AⅤ在线| 自拍视频国产| 亚洲成人在线免费| 中文字幕理论片| 黄色一级在线| 毛片在线看片| 人妻少妇av中文字幕乱码牛牛 | 天天操视频网站| 超碰天天干天天摸| 狼友视频在在观看| 成人无码www在线看免费| 色婷婷影院| 人成视频在线免费观看| 国产亚洲欧美精品综合在线| 河南乱子伦视频国产| 亚洲ww国产a大作| 欧洲AV片| 8090操逼网| 国产欧美一区二区三区国产幕精品 | 婷婷成人小说| 青青操首页| 国产精品国产自产拍高清AV| 日本无码一区二区| 影音先锋aV成人无码电影| 亚洲在线视频播放| 欧美成人在线网站| 亚洲精品成人视频| 97人人射| 亚洲自拍网站| 影音先锋av无码| 三级黄色视频在线观看| 亚洲日韩在线中文字幕| 中文字幕av久久爽爽| 男女福利视频| 亚洲男人av| 色婷婷在线视频播放| 欧洲激情网| 黄色视频网站国产| 97精品人妻一区二区三区在线| 亚洲免费黄| 一级黄色蜜芽视频| 日韩性视频| 亚洲综合小说| 9I成人免费版| 日韩高清无码一区二区| 国产女人18毛片18精品| 成人AV毛片| 国产精品永久| 国产欧美一区二区三区四区| A毛片| 日本三级中文字幕| 青草国产视频| 日韩欧美精品一区二区| 中文字幕国产精品| 狠狠躁日日躁夜夜躁2022麻豆| 成人V| 97人妻人人澡人人爽人人| 美日韩无码视频| www.午夜福利| 婷婷中文字幕亚洲| www.xxx国产| 国产成人三级视频| 在线无码中文字幕| 波多野结衣在线观看一区二区| 天天干天天操天天爽| 亚洲中文中出| 国产精品在线免费观看| 日批无码| 最近中文字幕无码| 特一级A片| 国产精品九九九九九九| 青青草黄色视频| 国产精品XXX视频| 国产精品天天| 各种BBwBBwBBwBBw| 久久精品视频一区| 色情一级AA片免费观看| 亚洲精品视频免费看| 嫩苞又嫩又紧AV无码| 中文字幕成人视频| 成人免费毛片蓝莓| 97精品在线| 91人妻无码精品一区二区| 少妇搡BBBB搡BBB搡造水爽| 人人操人人干人人摸| 骚逼av| 69视频网| 亚洲中文无码视频| 91在线视频播放| 国产A片| 手机在线小视频| 奶头和荫蒂添的好舒服囗交漫画| 韩国午夜福利视频| 欧美性爱无码在线| 东北骚妇大战黑人视频| 日韩成人无码电影网站| 日本一级黄色| 男人天堂免费视频| 日本一级大片| 91老熟女视频| 五月丁香婷中文| 亚洲一区在线播放| 国产精品视频免费| 婷婷在线视频| 中文字幕精品在线免费视频观看视频| 麻豆电影| 亚洲国产成人精品激情在线| 高清无码视频在线| 欧美在线亚洲| 青青草原在线免费| 中文资源在线a中文| 亚洲国产天堂| 亚洲免费观看高清完整版在va线观 | 亚洲操逼视频| 中文无码人妻少妇| 无码做爰欢H肉动漫网站在线看| 中文字幕在线视频无码| 国产成人无码精品一区秘二区| 91精彩视频在线观看| 中文无码熟妇人妻| 亚洲日韩一级片| 国产欧美精品一区二区| 久草福利在线观看| 无码一区精品久久久成人| 玖玖爱av| 一级成人电影| 欧美亚洲国产视频| 处破女初破全过免费看| 日韩精品久久久久久久酒店| 国产欧美日本| 中文人妻第9页| 北条麻妃一区二区三区-免费免费高清观看 | 中文字幕免费高清网站| 免费乱伦| 麻豆三级电影| 色伊人久操视频| 亚洲最新无码视频| 黄色一级大片在线免费看国产| 免费欧美黄色| 午夜AV在线观看| 欧美中文在线观看| 国产成人AV片| 热久久亚洲中文字幕| 成人无码欧美大片免费看| 影音先锋黄色资源| 亚洲大逼| 天天日天天添| 亚洲热在线观看| 色九九| 亚洲精品无码永久| 亚洲成人欧美| 2014av天堂网| 国产精品久久毛片A片| 艹逼在线观看| 精品欧美视频| 天干天干天夜夜爽| 亚洲字幕在线播放| www.伊人网| 中字AV| 国产精品久久久999| ThePorn日本无码| 日韩免费一级片| 国产特級黃色大片| gogogo免费高清在线偷拍 | 黄片在线网站| 人人爽人人操人人| 中文字幕日韩视频| 国产AV天堂| 毛片在线看片| 91亚洲国产成人精品一区二区三| 亚洲婷婷五月天| 亚洲图片一区| 中文人妻第9页| 91国产精品视频在线| 欧美一区二区三区四| 亚洲超碰在线观看| 玖玖成人电影| 无码一道本| 亚洲性生活| 亚洲中文字幕日韩精品| 在线视频一区二区三区四区| 极品少妇AV| 爱爱打炮影院| 性爱AV| 亚洲精品秘一区二区三区影| 麻豆传媒在线播放| 精品欧美| 国产操老女人| 天天视频入口| 亚洲成人无码在线播放| 一区二区三区四区久久| 无码一区二区北条| 波多野结衣视频无码| aaa国产| 亚洲男人天堂av| 天天干天天摸| 在线中文字幕第一页| 国产成人无码Av片在线公司| 综合夜夜| 轻轻操内射无码| 国产一级乱伦| 欧美性爱69| 人妻少妇无码视频| 韩国高清无码60.70.80| 久久福利电影| 日韩高清无码网站| 天天日天天插| 西西www444无码免费视频| 综合AV在线| 在线无码电影| 国产欧美熟妇另类久久久| 无码日逼视频| 91最新地址| 色哟哟国产精品| 欧美亚洲综合手机在线| 东北奇淫老老妇| 肏逼网址| 日韩成人综合| 亚洲色图一区二区| 91精品啪| 人人操在线播放| 久久永久免费精品人妻专区| 91成人视频免费观看| 亚洲成人一级片| 久久av一区二区三区| 日本无码视频在线观看毒| 欧美日韩中文字幕视频| 青青自拍视频| 黄色视频在线观看亚洲一区二区三区免费 | 亚洲色,天堂网| 国产久久在线| 自拍偷拍一区二区三区| 国产三级片AV| 人妻视频网站| AV天堂小说网| 国产骚女| 在线视频第一页| 亚洲成人a片| 欧美激情区| 国产免费AV在线| 伊人AV在线| 国内精品久久久久久久久久| 四虎一区二区| 中文字幕日本电影| 亚洲视频www| 成人三级片在线| 日本人妻中出| 亚洲在线成人| 国精品伦一区一区三区有限公司| 国产手机AV在线| 人人色在线观看| 午夜三级福利| 大香蕉伊人成人网| 国产日韩一区二区三区| 91久久久无码国产一区二区三区| 亚洲欧美婷婷五月色综合| 黄色a级片| 久久这里只有| 免费看片av| 69国产精品成人无码视频色| 一区二区三区在线看| AⅤ天堂| 色五月中文字幕| 懂色中文字幕| 伊人大香焦网| 无码操逼视频| 精品国产免费观看久久久_久久天天| 日韩色情网| 国产2区| 摸BBB槡BBBB搡BBB,,,,,| 国产成人免费看| 国产成人AⅤ| 国产女人18| 欧美成人精品欧美一级| 国产精品激情| 一区二区三区水蜜桃| 北条麻妃无码视频在线观看| 日韩一级无码毛片| 麻豆激情视频| 三级片视频网站| 欧美日韩北条麻妃视频在线观看| 日本成人一区| 久久黄色网络| 人人妻人人澡人人爽人人爽| 久久成人精品| 无码人妻AV一区| 黄骗免费网站| 丝袜东京热AV高清| 久草手机视频在线观看| 国产综合自拍| 免费作爱视频| 日本三级网| 99r6热只有精品免费观看| 安徽妇搡BBBB搡BBBB| 精品无码免费看专区| a片一级片| 91狠狠综合久久| 亚洲AV无码乱码A片无码沈樵| 亚洲日本视频| 日韩欧美国产黄色电影| 特级婬片A片AAA毛片AA做头| 迷奸91| 国产精品丝袜| 亚洲高清无码视频在线观看| 中文亚洲视频| 亚洲视频免费看| 日本少妇中文字幕| 黄色成人网站在线观看免费| 懂色一区二区三区免费| 国产精品视频无码| 日韩一级在线| 四虎成人电影| 爱爱打炮影院| 日本国产视频| 一级操逼| 大香蕉亚洲在线| 日本一区二区三区在线视频| 日韩AV网站在线观看| 久久一二三区| 中文字幕线观看| 欧美高潮喷水| 亚洲精品图片| 91视频人人| 四虎影院中文字幕| 九九热re99re6在线精品| 欧美性交一区二区| 黄色视频导航| 亚洲欧美大香蕉视频网| 柠檬AV导航| 91超碰在线| 色色色欧美| 国产精品视频免费观看| 特黄AAAAAAAA片免费直播| 人人爽人人操| 亚洲A片一区二区三区电影网| 亚洲免费婷婷| 女人18片毛片90分钟免费明星 | 亚洲啪啪| 黑人精品XXX一区一二区| 亚洲精品无码久久| 亚洲色a| 欧美熟妇精品一级A片视色| 天天草天天日| 安徽妇搡BBB搡BBBB户外老太太| 欧美熟妇另类久久久久久不卡| 91人妻人人澡人人爽人人| 蜜桃无码在线| 婷婷成人电影| 人妻丰满精品一区二区| 黄色三级在线观看| 91三级片在线观看| 国产大鸡吧| 久久久免费观看视频| 丁香婷婷五月| 欧一美一婬一伦一区二区三区自慰,| 久久无码区| 亚洲三级网| 污视频在线观看免费| 日韩AV免费电影| 白峰美羽人妻AND-499| 99无码国产成人精品| 婷婷丁香五月在线| 成人三级无码| 成年女人毛片| 一区免费视频| 麻豆AV在线播放| 中文字幕在线观看辣文| 国产无套内射视频| 大香蕉网站在线观看| 日本内射在线观看| 加勒比一区二区| 韩国精品一区二区| 美女性爱视频网站| 无码日韩精品一区二区免费96| 日日躁夜夜躁| 丁香五月激情中文字幕| 国产亚洲日韩在线| 男女AV在线免费观看| 操欧美老女人| 日韩三级片在线播放| a片在线免费观看| 亚洲精品中文字幕成人片| 狼人香蕉在线视频| 亚洲熟女少妇| 亚洲av资源在线观看| 西西444www| 亚洲AV无码久久寂寞少妇多毛| 亚洲免费网站| 波多野结衣无码一区二区| 亚洲精品鲁一鲁一区二区三区| 五月丁香婷中文| 国产99久久| 人妻第一页| 色诱AV| 人妻精品一区二区在线| 夜夜嗨av| AAA精品| 中文字幕av在线播放| 黄色高清无码视频| 日韩精品无码av| 亚洲欧美在线观看视频| 國產精品777777777| 久久国产精品视频| 久久久久久毛片| 九九惹伊人| 亚洲高清视频在线| 天天躁夜夜躁狠狠躁AV| 色天堂视频在线观看| 视频三区| 特级特黄AAAA免费看| 日韩精品三区| 亚洲熟妇视频| 午夜精品在线观看| 91乱子伦国产乱子伦!| 欧美亚洲日韩一区二区| 国产av一二三区| 一级黄色片在线观看| 深爱激情五月婷婷| 黄片网址| 91亚洲免费| 天天舔九色婷婷| 大香蕉在线视频99| 国产插穴| 人人人射| 欧美在线视频99| 免费观看一区二区三区| 18成人在线观看| 在线黄色网| 久久黄色视频免费观看| 久草视频免费在线播放| 在线中文字幕av| 一级a免一级a做片免费| 女人高潮天天躁夜夜躁| 在线观看亚洲天堂| 日本电影一区二区三区| 国产一级影院| 一区二区黄色| 人人看人人摸人人草| 无码视屏| 蜜桃av秘无码一区二区三区| 777777国产7777777| 亚州精品成人片| 全国最大成人网站| 亚洲日韩成人在线| 男人天堂亚洲| 青春草在线观看| 青青青国产| 激情五月天开心网| 亚洲视频无码| 少妇白洁在线观看| 亚洲精品成人网站| 亚洲精品视频在线观看网站| 最新在线中文字幕| 成人午夜| 少妇二区| 免费看黄色大片| 亚洲精品秘一区二区三小| 中文在线不卡| 在线你懂的| 一级AA毛片| 一区二区无码av| 亚洲无码A片在线| 麻豆免费成人传媒| 激情五月婷婷丁香| 欧美成人A片AAA片在线播放| 动图综合亚洲综合欧美男男| 免费在线观看a| 色婷婷五月天激情| A片免费的| 亚洲欧美精品| 在线观看免费无码| 久久久久亚洲AV无码网影音先锋| 国产女人操逼视频| www.91自拍| 九九香蕉视频| 热九九精品| 国产操逼免费| 91精品久久香蕉国产线看观看| 中文字幕在线观看视频免费| 躁BBB躁BBB躁BBBBBB日视频| 国产做爱导航| 日韩av一区二区三区| 激情伊人五月天| 91日韩无码| 日韩中文字幕| 一道本一区二区| 男人的天堂免费视频| 大香蕉99热| 蜜桃黄片AV在线观看| 亚洲精品乱码久久久久久蜜桃91| 国产一級A片免费看| 国产麻豆免费| 久久久桃色| 一区二区三区四区久久| 天天玩天天操| 粉嫩99精品99久久久久久特污| 91久久影院| 免费看无码一级A片放24小时| 欧美性夜黄A片爽爽免费视频| 亚洲制服中文字幕| 国产精品视频你懂的| www黄片| 无码AV大香线蕉伊人| 亚洲天堂手机在线| 国产美女被爽到高潮免费A片软件| 强伦轩人妻一区二区三区最新版本更新内容| 高清无码在线观看免费| 亚洲精品视频免费在线观看| 人妻无码精品蜜桃| 激情片AAA| 成人片网址| 国产嫩BBwBBw高潮| 操日本女人逼| 日韩中文字幕区| 精品无码一区二区三区| 一区二区三区四区久久| 乱子伦国产精品一区二区| 免费黄色成人| 久久综合婷婷| 色呦呦一欧美| 激情一区二区三区| 亚洲无码成人在线观看| AV香蕉| 高清无码内射视频| 在线观看av中文字幕| 日韩电影一区| 欧美日比视频| AV资源网站| 国产精品久久久久久99| 久色入口| 骚逼视频聊天记录| jizz在线观看视频| 久久午夜影院| 国产操逼大全| 亲子伦一区二区三区观看方式| 狼友视频在线看| 成人性生活一级片| 国产青青草| 久久99精品久久久水蜜桃| 国产一片黑夜内射| 日本一级特黄大片AAAAA级| 日韩V欧美| 米奇7777狠狠狠狠| v天堂在线| 欧美视频中文字幕| 国产艹| 国产成人激情视频| 最近中文字幕中文翻译歌词| www.av免费| 韩国GOGOGO高清| 国产视频中文字幕| 欧美日比视频| 国产9熟妇视频网站| 亚洲视频精品| 蜜桃精品一区二区| 日逼导航| 欧美成人片免费看| 97爱| 波多野结衣AV在线播放| 中文字幕在线观看网址最新地址| 亚洲性爱小说| 国产精品毛片视频| 99久久久精品久久久久久| 欧洲精品在线视频| 国产AV无遮挡| 狠狠爱一区| 日韩欧美一级片| 中文字幕在线资源| 手机看片日韩| 国产婷婷色一区二区三区| 蜜桃精品视频在线观看| 亚洲精品久久久久久久久蜜桃| 大香蕉久久伊人| 免费无码国产在线| 国产AV无码影院| 亚洲精品三级在线观看| 日本黄色视频电影| 91免费在线视频| 人人操人人摸人人干| 91做爱视频| 小黄片免费| 久久艹国产| 欧美一区二区三区免费| 国产第56页| 亚洲二区在线| 停停五月天| 亚洲天堂婷婷| 国产A级毛片久久久久久| 欧美色图在线观看视频| 在线不卡中文字幕| 人妻体体内射精一区二区| 一本视频| 久久久久久三级电影| 午夜操p| 天天干天天摸| 视频一区在线观看| 西西4444WWW大胆无视频| 日本黄色电影网址| 亚洲欧美视频在线观看| 五月天最新网址| 成人黄色一级片| 亚洲无aV在线中文字幕| 91久久国产综合久| 人人爽人人爱| av手机版| 午夜蜜桃人妻一区二区| 北条麻妃在线一区| 在线a | 色综合大香蕉| 久久大香蕉网| 免费人成视频在线| 国产网站精品| 夜夜骑夜夜撸| h视频在线观看网站| 日韩精品毛片| 另类TS人妖一区二区三区| 秋霞午夜福利影院| 国产黄在线| 91av在线观看视频| 亚洲Av秘无码一区二区| 99热这里只有精品999| 婷婷五月综合激情| 国产精品777777| 日韩国产三级| 午夜激情毛片| 97爱爱网| 久久久久亚洲AV无码网影音先锋| www.re99| 亚洲AV无码国产精品久久不卡| 四川少妇搡bbw搡bbbb| 五月天激情四射| 91人妻人人澡人人爽人人玩| 五月乱伦| 日韩精品一区在线| 3d动漫精品一区二区三区在线观看| 人妻斩り43歳| 免费黄色一级电影| 黄色电影一区二区| 国产精品91在线| 欧美一级AA大片免费看视频| 99在线看| 色色婷婷五月| 久久999| 麻豆二区| 91免费福利| 一区二区三区无码在线| 天天干女人| 无码免费高清| 中文字字幕在线中文乱码电影| 精品人妻无码| 97国产| 午夜3D动漫AV| 欧美操女人| 国产乱码精品一区二区三区的特点| 白丝久久| 青青激情视频| 日韩无码黄色视频| 美女黄视频网站| 理论在线视频| 国产九九热视频| 国产九九在线视频| 3d动漫精品H区XXXXX区| 91精品国产99久久久久久天美 | 淫荡少妇美红久久久久久久久久| 四虎影院人妻| 激情乱伦网| 俺也去色色| 国产精品成人免费| 国产成人亚洲精品| 精品一区二区三区四区五区六区| 俺也日| 大地99中文在线观看| 伊人影院在线视频| 青青草免费在线| 欧美一级内射| 97人人操| 熟女探花精选| 内射学生妹视频| 国产无码久久久| 第一色网站| 91人人精品| 免费成人视频| 国产三级AV在线| 欧美日韩精品一区二区| a片网| 青青草手机在线视频| 久久婷婷五月| 日韩无码高清免费视频| 国产精品一区二区黑人巨大| 国产激情网址| 日本一区免费观看| 亚洲成人精品一区二区| 黄网免费观看| 在线成人免费视频| 欧美国产精品一二三产品在哪买| 伊人一区| 成人精东影业JDAV3密友| www.av免费| 亚洲xxxxxx| 天天色色天天| 亚洲视频在线视频| 婷婷色色婷婷| 五月天最新网址| 国产一级a| 精品无码一区二区人妻久久蜜桃 | 日本精品视频在线观看| 夜夜骚精品人妻av一区| 91丨豆花丨成人熟女| 水果派解说AV无码一区| 国产成人一区二区无码| 欧美三级理论片| 五月丁香婷婷综合网| 午夜男女福利| 乱子伦国产精品| 欧美三级在线| 久久久久久久久久久久久久久久久久免费精品分类视频 | 97精品在线| 欧美三P囗交做爰| www.zaixianshipin| 久久福利网| 高清无码一级片| 国产com| 亚洲第一毛片| 大香蕉视频网| 土耳其电影《爱与罚》| 1024手机在线观看| 激情人妻网站| 成人免费视频国产在线观看| 成人做爰100片免费观看视频| 国产又粗又长的视频| 青春草在线视频| 色就是欧美| 欧美+日产+中文| 午夜福利100理论片| 五月婷婷无码| 国产在线资源| 亚洲精品无码在线观看| 欧美一区电影| 在线无.码| 最新中文字幕在线观看视频| 操操操影院| 女生被操网站| 中文字幕韩日| 91乱了伦国产乱子伦| 亚洲成人AAAAA| 91人妻人人澡人人爽人人精| 成人AV免费在线观看| 亚洲综合伊人| 黄频在线免费观看| 九九热视频99| 91乱子伦国产乱| 蜜桃久久久| 亚洲无码A片在线观看APP| 熟妇高潮一区二区高潮| 加勒比无码视频| 欧美在线视频播放| 黄片小视频| 国产成人超碰| 无码视频一二三区| 国产激情在线| 亚洲色图成人网| 在线中文字幕网站| 免费国产h| 人人舔人人草| 波多野结衣亚洲视频| 国产精品无码专区| 中文字幕在线免费观看| 亚洲中文字幕无码在线观看| 亚洲高清超级无码在线视频观看| 夜色福利在线| 青青草手机视频| 综合激情五月婷婷| 日韩群交视频| 69pao| 亚洲午夜福利在线观看| 久久91人妻无码精品蜜桃HD| 波多野结衣在线无码视频| 亚洲无码91| www.99爱| 青娱乐在线成人| 99色天堂| 日韩一级黄色毛片| 日韩爱爱视频| 就去色色五月丁香婷婷久久久 | 中日韩特黄A片免费视频| 人人插人人干| 木下凛凛子AV888AV在线观看| 操女人的网站| 熟女人妻视频| 中文字幕在线观看免费高清完整版在线观看| 丁月婷婷五香天日五月天| 亚洲精品少妇| 俺来俺也去| 做爱网| 成人AV婷婷| 日韩色情电影| 麻豆久久久久| 亚洲一级av| V天堂在线视频| 亚洲精品久久久久毛片A级绿茶| 无码成人A片在线观看| 99国产精品| 久热这里只有| 国产美女一级真毛片酒店| 中文天堂网| 中国1级毛片| 波多野结衣视频免费在线观看| 亚洲自拍无码| 先锋AV资源| 五月天婷婷在线观看视频| 夜夜夜叫天天天做| 香蕉伊人在线| JlZZJLZZJlZZ亚洲女人17| 精品中文在线| 91AV| 欧美国产日韩另类| 久久久久久久久黄色| 色五月婷婷在线| 青娱乐国产| 高清无码一区二区在线| 日韩一区在线播放| 熟妇槡BBBB槡BBBB| 久久水密桃| 五月黄色电影| 九九热免费视频| 黃色A片一級二級三級免費久久久| 丁香五月综合啪啪| 91国产视频在线观看| 久久一级片| 中文字幕在线观看网| 奇米99| AV资源在线| 8x8拨牐拨牐拨牐永久免费| 澳门四虎影院| 欧美色图网站| 97精品人人A片免费看| 在线观看视频免费无码免费视频| 国产少妇| 天天干天天在线观看| 狠狠欧美| 久久逼逼| 男女啪网站| wwwsesese| 欧美激情五月| 成人综合大香蕉| 日韩精品一区二区在线观看| 97福利视频| 91区视频| 污视频在线看| 无码高清| 亚洲婷婷在线视频| 精品久久精品| 韩国毛片基地久久| 日韩欧美小电影| 西西人体大胆ww4444| 欧美日韩精品一区二区三区| 北条麻妃JUX-869无码播放 | 国产精品超碰| 成人做爰黄A片免费看| 成人在线精品| 91白丝在线观看| 伊人精品A片一区二区三区| 亚洲第一在线| 黄色小说在线播放| 夜色福利在线| 2015中文字幕黄色视频| 国产精品码ls字幕影视| 成人av免费在线观看| 色福利网| 青青草原网站在线观看| 亚洲午夜AV久久乱码| 欧美+日产+中文| 日韩特级毛片| 欧洲成人在线播放| 国产欧美日韩视频| 91丨九色丨熟女老版| 亚洲最新AV在线|