精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Apache HBase內核深度剖析

大數據
今天講述一下HBase相關的知識。首先HBase作為大數據發(fā)展初期伴隨Google三大論文問世的一個組件,在今天依舊被廣泛的應用,今天我們來仔細的分析一下HBase的內部原理,了解一下HBase的具體內幕,以便在工作中更好使用它。

今天講述一下HBase相關的知識。首先HBase作為大數據發(fā)展初期伴隨Google三大論文問世的一個組件,在今天依舊被廣泛的應用,今天我們來仔細的分析一下HBase的內部原理,了解一下HBase的具體內幕,以便在工作中更好使用它。以下內容涉及到的源碼基于HBase 的Master分支編譯出的最新的3.0.0版本。

HBase相關算法與數據結構基礎知識

跳躍表

暫時先不說跳躍表是什么,在Java里面有一個Map叫:ConcurrentSkipListMap,通過對HBase的源碼跟蹤,我們發(fā)現這些地方使用了它:

Apache HBase內核深度剖析

簡單的列了幾個,但是觀察這幾個類所在的模塊就可以發(fā)現,HBase從客戶端,到請求處理,到元數據再到文件存儲貫穿HBase的整個生命周期中的各個重要環(huán)節(jié),都能看到它的身影,Map那么多,為何偏偏HBase選擇了這個?接下來我們仔細分析下。

在算法概念里面有一種數據結構叫跳躍表,顧名思義,之所以叫跳躍表就是因為在查找的時候可以快速的跳過部分列表,用來提升查找效率,跳躍表的查找效率可以和二叉樹相比為O(log(N)),這個算法的實現在Java中的ConcurrentSkipListMap就是實現跳躍表的相關算法。

首先我們看一個有序的全量表:

 

Apache HBase內核深度剖析

(有序全量鏈表)

 

假設我們要從中找出 可以發(fā)現需要比較的次數(比較次數不是循環(huán)次數)為<3,5,8>共計16次,可以看到對這樣一個有序鏈表進行查找比較的次數會非常多,那么有沒有辦法對這種查找做優(yōu)化。當然是有的,對于這種查找耳熟能詳從數據結構的基礎課程開始大家就知道二叉樹,折半查找,值查找都屬于解決這類問題的方法,自然跳躍表也是解決這類問題的方法之一。

跳躍表的思路和如今大部分大數據組件像kylin對海量數據下的快速查找的解決思路非常相似,都是通過某種邏輯提前將部分數據做預處理,然后查找的時候進行快速匹配,典型的空間換時間,那么對于跳躍表來說,它的預處理的方式如下:

 

Apache HBase內核深度剖析

(跳躍表)

 

可以看到,跳躍表是按照層次構造的,最底層是一個全量有序鏈表,依次向上都是它的精簡版,而在上層鏈表中節(jié)點的后續(xù)下一步的節(jié)點是以隨機化的方式進行的,因此在上層鏈表中可以跳過部分列表,也叫跳躍表,特點如下:

  • 鏈表層從上往下查找
  • 跳躍表由很多層組成
  • 每一層都是一個有序鏈表
  • 最底層是全量有序鏈表
  • 如果一個元素出現在上層的某個節(jié)點那么它一定會出現在下層的鏈表
  • 每一個元素都有兩個指針,一個指向當前鏈表的下一個元素,一個指向下一層鏈表的相同節(jié)點

假設根據前面的圖表我們要查詢G這個字母,那么在上面的跳躍表中經過的路徑如下:

 

Apache HBase內核深度剖析

(跳躍表查找路徑)

 

其中紅色代表查找所走過的路徑。

LSM樹

前面講到了跳躍表的原理,在HBase中較大規(guī)模的使用了跳躍表,就是為了增快其查找效率,除了跳躍表之外HBase還使用到了LSM樹,LSM樹本質上和B+相似,是一種存儲在磁盤上的數據的索引格式,但是差異點在于LSM對寫入非常高效,實現來說就是無論什么樣的寫入LSM都是當成一次順序寫入,這一點和HDFS的優(yōu)點正好契合,HDFS不支持隨機寫,支持順序寫。LSM數據存儲在兩個地方,一個是磁盤上一個是內存中,內存中同樣使用的跳躍表,內存中是多個有序的文件。

Apache HBase內核深度剖析

(跳躍表與HFile關系)

 

HBase對LSM的應用采用了如上的結構方式,對于HBase具體的存儲文件的分析,在后面專門針對HBase的存儲部分進行深入的分析。

布隆過濾器

布隆過濾器解決的問題是,如何快速的發(fā)現一個元素是否存在于某個集合里面,最簡單的辦法就是在集合或者鏈表上查找一遍,但是考慮到在大數據場景下,數據量非常大,即便不考慮性能,也不見得會有足夠多的機器來加載對應的集合。所以需要一種新的思路去解決此類問題,那么布隆過濾器就是一種,它的思想為:

  • 由一個長度為N的數組構成,每一個元素為0或者1,默認都為0
  • 對集合的每個元素做K次哈希,到第i次的時候對N取一個模,會得到一個index
  • 將數組中的array[index]變?yōu)?

 

Apache HBase內核深度剖析

(布隆過濾器,來自網絡)

 

上圖是長度為18,進行3次哈希得到的結果,那么在HBase中是如何利用布隆過濾器的呢,首先從操作來說,HBase的Get就經過布隆過濾器,同時HBase支持度對不同的列設置不同的布隆過濾器。

 

Apache HBase內核深度剖析

(布隆過濾器類型)

 

可以看到對HBase來講可以啟用或者禁用過濾器,對于不同的過濾器的實現分別在不同的類中,在查詢的時候分別根據不同的過濾器采用不同的實現類:

 

Apache HBase內核深度剖析

(布隆過濾器選擇邏輯)

 

所以可以通過如上的代碼找到對應的過濾器實現,甚至可以新增自己的過濾器。

HBase讀寫操作

前面提到HBase的相關算法,現在我們講一下HBase的整個操作的讀寫流程。首先,擺出HBase的架構圖,如下所示:

 

Apache HBase內核深度剖析

(HBase架構圖,來自網絡)

 

從這個圖可以看到,HBase的一個寫操作,大的流程會經過三個地方:1. 客戶端,2. RegionServer 3. Memstore刷新到磁盤。也就是說對于HBase的一次寫入操作來講,數據落到Memstore就算寫入完成,那么必然需要考慮一個問題,那就是沒有落盤的數據,萬一機器發(fā)生故障,這部分數據如何保障不丟失。解析來我們逐步分解一下這三個部分。

客戶端:HBase的客戶端和服務器并不是單一的鏈接,而是在封裝完數據后,通過請求HMaster獲取該次寫入對應的RegionServer的地址,然后直接鏈接RegionServer,進行寫入操作,對于客戶端的數據封裝來講,HBase支持在客戶端設置本地緩存,也就是批量提交還是實時提交。因為HBase的hbase:meta表中記錄了RegionServer的信息,HBase的數據均衡是根據rowkey進行分配,因此客戶端會根據rowkey查找到對應的RegionServer,定義在Connection中:

Apache HBase內核深度剖析

而實現在:AsyncRegionLocator

Apache HBase內核深度剖析

RegionServer寫入:當客戶端拿到對應的RegionServer后,便和HMaster沒有關系了,開始了直接的數據傳輸,我們前面提到一個問題,那就是HBase如何防止數據丟失,畢竟HBase的寫入是到內存,一次請求就返回了,解決這個問題是通過WAL日志文件來解決的,任何一次寫入操作,首先寫入的是WAL,這類日志存儲格式和Kafka類似的順序追加,但是具有時效性,也就是當數據落盤成功,并且經過檢查無誤之后,這部分日志會清楚,以保障HBase具有一個較好的性能,當寫完日志文件后,再寫入Memstore。

那么在RegionServer的寫入階段會發(fā)生什么呢?首先我們知道,HBase是具有鎖的能力的,也就是行鎖能力,對于HBase來講,HBase使用行鎖保障對同一行的數據的更新要么都成功要么都失敗,所以在RegionServer階段,會經過以下步驟:

  • 申請行鎖,用來保障本次寫入的事務性
  • 更新LATEST_TIMESTAMP字段,HBase默認會保留歷史的所有版本,但是查詢過濾的時候始終只顯示最新的數據,然后進行寫入前提條件的檢查:

Apache HBase內核深度剖析

以上相關操作的代碼都在HRegion,RegionAsTable中,可以以此作為入口去查看,所以這里就不貼大部分的代碼了。

寫入WAL日志文件,在WALProvider中定義了兩個方法:

Apache HBase內核深度剖析

append用來對每一次的寫入操作進行日志追蹤,因為有事物機制,所以HBase會將一次操作中的所有的key value變成一條日志信息寫入日志文件,aync用來同步將該日志文件落盤到HDFS的文件系統,入場中間發(fā)生失敗,則立即回滾。

4. 寫入Memstore,釋放鎖,本次寫入成功。

所以可以看到對于HBase來講寫入通過日志文件再加Memstore進行配合,最后HBase自身再通過對數據落盤,通過這樣一系列的機制來保障了寫入的一套動作。

講完了HBase的寫入操作,再來看看HBase的讀取流程。

對于讀來講,客戶端的流程和寫一樣,HBase的數據不會經過Master進行轉發(fā),客戶端通過Master查找到元信息,再根據元信息拿到meta表,找到對應的Region Sever直接取數據。對于讀操作來講,HBase內部歸納下來有兩種操作,一種是GET,一種是SCAN。GET為根據rowkey直接獲取一條記錄,而SCAN則是根據某個條件進行掃描,然后返回多條數據的過程。可以看到GET經過一系列的判斷,例如檢查是否有coprocessor hook后,直接返回了存儲數據集的List:

Apache HBase內核深度剖析

那么我們再看SCAN就不那么一樣了,可以看到,對于SCAN的操作來講并不是一次的返回所有數據,而是返回了一個Scanner,也就是說在HBase里面,對于Scan操作,將其分成了多個RPC操作,類似于數據的ResultSet,通過next來獲取下一行數據。

Apache HBase內核深度剖析

HBase文件格式

前面講了HBase的操作流程,現在我們看下HBase的存儲機制,首先HBase使用的HDFS存儲,也就是在文件系統方面沒有自身的文件管理系統,所以HBase僅僅需要設計的是文件格式,在HBase里面,最終的數據都是存儲在HFile里面,HFile的實現借鑒了BigTable的SSTable和Hadoop的TFile,一張圖先展示HFile的邏輯結構:

 

Apache HBase內核深度剖析

(HFile文件格式-圖來自網絡)

 

可以看到HFie主要由四個部分構成:

  • Scanned block section: 顧名思義,表示順序掃描HFile時所有的數據塊將會被讀取,包括Leaf Index Block和Bloom Block。
  • Non-scanned block section: 表示在HFile順序掃描的時候數據不會被讀取,主要包括Meta Block和* Intermediate Level Data Index Blocks兩部分。
  • Load-on-open-section: 這部分數據在HBase的region server啟動時,需要加載到內存中。包括FileInfo、Bloom filter block、data block index和meta block index。
  • Trailer: 這部分主要記錄了HFile的基本信息、各個部分的偏移值和尋址信息。

對于一個HFile文件來講,最終落盤到磁盤上的時候會將一個大的HFile拆分成多個小文件,每一個叫做block塊,和HDFS的塊相似,每一個都可以自己重新設定大小,在HBase里面默認為64KB,對于較大的塊,在SCAN的時候可以在連續(xù)的地址上讀取數據,因此對于順序SCAN的查詢會非常高效,對于小塊來講則更有利于隨機的查詢,所以塊大小的設置,也是HBase的調參的一個挑戰(zhàn),相關的定義在源碼里面使用的HFileBlock類中,HFileBlock的結構如下所示:

 

Apache HBase內核深度剖析

(HFileBlock結構,來自網絡)

 

每一個block塊支持兩種類型,一種是支持Checksum的,一種是不支持Checksum的,通過參數usesHBaseChecksum在創(chuàng)建block的時候進行設置:

Apache HBase內核深度剖析

HFileBlock主要包含兩個部分,一個是Header一個是Data,如下圖所示:

Apache HBase內核深度剖析
(HFileBlock結構,來自網絡)

 

BlockHeader主要存儲block元數據,BlockData用來存儲具體數據。前面提到一個大的HFile會被切分成多個小的block,每一個block的header都相同,但是data不相同,主要是通過BlockType字段來進行區(qū)分,也就是HFile把文件按照不同使用類型,分成多個小的block文件,具體定義在BlockType中,定義了支持的Type類型:

Apache HBase內核深度剖析

下面我們仔細分解一下HBase的Data部分的存儲,HBase是一個K-V的數據庫,并且每條記錄都會默認保留,通過時間戳進行篩選,所以HBase的K-V的格式在磁盤的邏輯架構如下所示:

 

Apache HBase內核深度剖析

(DataBlock結構,來自網絡)

 

每個KeyValue都由4個部分構成,而Key又是一個復雜的結構,首先是rowkey的長度,接著是rowkey,然后是ColumnFamily的長度,再是ColumnFamily,之后是ColumnQualifier,最后是時間戳和KeyType(keytype有四種類型,分別是Put、Delete、 DeleteColumn和DeleteFamily),而value相對簡單,是一串純粹的二進制數據。

最開始的時候我們介紹了布隆過濾器,布隆過濾器會根據條件減少和跳過部分文件,以增加查詢速度:

 

Apache HBase內核深度剖析

(布隆過濾器,來自網絡)

 

每一個HFile有自己的布隆過濾器的數組,但是我們也會發(fā)現,這樣的一個數組,如果HBase的塊數足夠多,那么這個數組會更加的長,也就意味著資源消耗會更多,為了解決這個問題,在HFile里面又定義了布隆過濾器的塊,用來檢索對應的Key需要使用哪個數組:

 

Apache HBase內核深度剖析

(布隆過濾器結構,來自網絡)

 

一次get請求進來,首先會根據key在所有的索引條目中進行二分查找,查找到對應的Bloom Index Entry,就可以定位到該key對應的位數組,加載到內存進行過濾判斷。

HBase RegionServer

聊完了HBase的流程和存儲格式,現在我們來看一下HBase的RegionServer,RegionServer是HBase響應用戶讀寫操作的服務器,內部結構如下所示:

 

Apache HBase內核深度剖析

(RegionServer結構)

 

一個RegionServer由一個HLog,一個BlockCache和多個Region組成,HLog保障數據寫入的可靠性,BlockCache緩存查詢的熱點數據提升效率,每一個Region是HBase中的數據表的一個分片,一個RegionServer會承擔多個Region的讀寫,而每一個Region又由多個store組成。store中存儲著列簇的數據。例如一個表包含兩個列簇的話,這個表的所有Region都會包含兩個Store,每個Store又包含Mem和Hfile兩部分,寫入的時候先寫入Mem,根據條件再落盤成Hfile。

RegionServer管理的HLog的文件格式如下所示:

 

Apache HBase內核深度剖析

(RegionServer管理HLog架構,來自網絡)

 

HLog的日志文件存放在HDFS中,hbase集群默認會在hdfs上創(chuàng)建hbase文件夾,在該文件夾下有一個WAL目錄,其中存放著所有相關的HLog,HLog并不會永久存在,在整個HBase總HLog會經歷如下過程:

  • HLog構建: 任何寫入操作都會先記錄到HLog,因此在發(fā)生寫入操作的時候會先構建HLog。
  • HLog滾動: 因為HLog會不斷追加,所以整個文件會越來越大,因此需要支持滾動日志文件存儲,所以HBase后臺每間隔一段時間(默認一小時)會產生一個新的HLog文件,歷史HLog標記為歷史文件。
  • HLog失效: 一旦數據進入到磁盤,形成HFile后,HLog中的數據就沒有存在必要了,因為HFile存儲在HDFS中,HDFS文件系統保障了其可靠性,因此當該HLog中的數據都落地成磁盤后,該HLog會變?yōu)槭顟B(tài),對應的操作是將該文件從WAL移動到oldWAl目錄,此時文件依舊存在,并未進行刪除。
  • HLog刪除: hbase有一個后臺進程,默認每間隔一分鐘會對失效日志文件進行判斷,如果沒有任何引用操作,那么此時的文件會被徹底的從物理刪除。

對于RegionServer來講,每一個RegionServer都是一個獨立的讀寫請求服務,因此HBase可以水平增加多個RegionServer來達到水平擴展的效果,但是多個RegionServer之間并不存在信息共享,也就是如果一個海量任務計算失敗的時候,客戶端重試后,鏈接新的RegionServer后,整個計算會重新開始。

HBase怎么用

雖然HBase目前使用非常廣泛,并且默認情況下,只要機器配置到位,不需要特別多的操作,HBase就可以滿足大部分情況下的海量數據處理,再配合第三方工具像phoenix,可以直接利用HBase構建一套OLAP系統,但是我們還是要認識到HBase的客觀影響,知道其對應的細節(jié)差異,大概來說如果我們使用HBase,有以下點需要關心一下:

  • 因為HBase在RegionServer對寫入的檢查機制,會導致客戶端在符合條件的情況下出現重試的情況,所以對于較為頻繁的寫入操作,或者較大數據量的寫入操作,推薦使用直接產生HFlie然后load到HBase中的方式,不建議直接使用HBase的自身的Put API。
  • 從使用來講如果業(yè)務場景導致HBase中存儲的列簇對應的數據量差異巨大,那么不建議創(chuàng)建過多的列簇,因為HBase的存儲機制會導致不同列簇的數據存儲在同一個HBase的HFile中,但是split機制在數據量增加較大的情況下,會發(fā)生拆分,則會導致小數據量的列簇被頻繁的split,反而降低了查詢性能。
  • RegionServer是相互獨立的,所以如果想要讓集群更加的穩(wěn)定高效,例如如果想實現RegionServer集群,達到信息共享,任務增量計算,需要自己修改RegionServer的代碼。
  • 對于HBase來講,很多場景下,像如果Region正在Split,或者Mem正在Dump,則無法進行對應的操作,此時錯誤信息會被以異常的形式返回到客戶端,再由客戶端進行重試,因此在使用過程中,需要結合我們的應用場景,考慮如何設置類似于buffer大小的參數,以盡可能少的降低因為內部操作引起的客戶端重試,特別是在使用類似opentsdb的這類集成hhbase的數據的情況下。

結尾

HBase有著非常龐大的架構體系,和較為不錯的使用體驗,因此使用一篇文章通常很難講述清楚整個HBase內幕,但是我們可以根據理解逐步滲透到HBase內部,了解這個組件背后的原理,這樣當我們在使用它的時候就會變得更加的得心應手。經驗也不是一日構成,需要我們日復一日的不斷練習,在HBase不斷推出的新版下,琢磨和理解它的原理和架構。Apache下有非常多的組件可以實現差不多的功能,但是每一個組件又有著自己獨特的特點,本章我們介紹了HBase,后續(xù)會逐步分解介紹像Kylin,HDFS,Yarn,以及Atlas等組件。

責任編輯:未麗燕 來源: ThoughtWorks洞見
相關推薦

2025-04-18 04:05:00

2017-04-11 09:17:07

Apache Beam剖析Flink

2010-06-03 13:08:51

2017-03-09 08:37:26

ApacheHBaseQuickstart

2025-06-04 08:30:00

seata分布式事務開發(fā)

2024-02-05 19:06:04

DartVMGC流程

2022-09-27 18:56:28

ArrayList數組源代碼

2025-08-29 08:28:13

2009-06-17 17:00:03

2010-01-07 13:44:54

Linux內核代碼

2018-10-29 13:07:15

HBase存儲遷移

2010-05-19 14:05:59

Subversion+

2009-09-15 14:52:15

linq級聯刪除

2010-03-01 18:33:30

2011-05-23 14:20:59

WordPress

2023-01-10 13:48:50

ContainerdCRI源碼

2010-03-01 14:50:06

Python 工具

2010-02-02 15:25:35

Python語法

2010-02-03 16:56:24

Python包

2010-02-04 15:38:39

Android 手機
點贊
收藏

51CTO技術棧公眾號

666精品在线| 欧美日韩国产成人在线免费| 不卡日韩av| 无码人妻av一区二区三区波多野 | 在线一区二区三区| 夜夜爽99久久国产综合精品女不卡 | 午夜一区二区三区免费| yy6080久久伦理一区二区| 亚洲色图视频网| 国产精品二区三区| 中文在线最新版天堂| 国内揄拍国内精品久久| 伊人久久免费视频| 国产女人18毛片水真多18| 久久69成人| 日韩欧美综合在线视频| 国产精品av免费观看| 高清毛片在线看| 成人涩涩免费视频| 91免费看片在线| 无码人妻精品一区二区| 尹人成人综合网| 久久久精品中文字幕| 国产色视频一区二区三区qq号| 精品午夜视频| 欧美少妇bbb| 日本精品免费在线观看| 国产乱码在线| 亚洲精品国产一区二区三区四区在线| 欧美在线一二三区| 亚洲国产福利视频| 国产米奇在线777精品观看| 国产精品九九九| 日本va欧美va国产激情| 欧美激情性爽国产精品17p| 日韩中文字幕精品视频| 久久亚洲AV无码专区成人国产| 国产精品2023| 精品国产一二三区| 曰本三级日本三级日本三级| 亚洲高清国产拍精品26u| 在线观看日韩av先锋影音电影院| 337p粉嫩大胆噜噜噜鲁| a级片在线免费观看| 一区二区三区蜜桃| 91传媒免费视频| 国产三区视频在线观看| 国产精品高潮呻吟久久| 亚洲人成人77777线观看| 国产九九在线| 国产精品视频九色porn| 天堂精品一区二区三区| 国产福利第一视频在线播放| 久久精品无码一区二区三区| 国产精品免费一区二区| 日本久久一级片| 波多野结衣中文字幕一区| 福利精品视频| 欧洲成人一区二区三区| 9久草视频在线视频精品| 精品国产福利| 国产永久免费高清在线观看| 国产欧美综合在线观看第十页| 日本在线视频一区| 成人三级黄色免费网站| 国产精品麻豆成人av电影艾秋| 亚洲最新视频在线观看| 精品人妻人人做人人爽| 国产盗摄——sm在线视频| 欧美视频在线观看免费| 爱情岛论坛vip永久入口| 国产精品原创视频| 欧美一级艳片视频免费观看| 波多野结衣加勒比| 深爱激情久久| 日韩一区二区欧美| 男女免费视频网站| 免费看的黄色欧美网站| 国产精品视频精品| 国产av精国产传媒| 91亚洲资源网| 五月天丁香综合久久国产| 欧美边添边摸边做边爱免费| 亚洲精品成人在线| 国产又黄又大又粗视频| 成人在线免费av| 精品久久人人做人人爱| 丰满少妇高潮一区二区| 亚洲国产精品久久久天堂| 国内精品模特av私拍在线观看| 中文字幕一区二区人妻视频| 国产制服丝袜一区| 欧美激情论坛| jizz性欧美10| 在线观看日韩av先锋影音电影院| 国产伦精品一区二区三区妓女下载| 欧美在线关看| 久久亚洲成人精品| 在线能看的av| 国产一区二区在线电影| 欧美精品成人一区二区在线观看| 嫩草在线视频| 精品久久香蕉国产线看观看gif| 国产小视频精品| 国产成人aa在线观看网站站| 日韩中文字幕不卡视频| 国产精品视频免费播放| 国产传媒日韩欧美成人| 亚洲成人av动漫| www视频在线观看| 9191成人精品久久| 亚洲性猛交xxxx乱大交| 亚洲小说欧美另类婷婷| 国产在线精品一区免费香蕉 | 一级做a爰片久久| 99色在线观看| 日韩欧美一级二级| 永久免费看片视频教学| 亚久久调教视频| 国产成人女人毛片视频在线| 老司机在线看片网av| 色婷婷激情综合| 国产精品一区二区人妻喷水| 888久久久| 国产欧美亚洲精品| 国产尤物视频在线| 色婷婷av一区二区三区软件| 欧美一级片黄色| 国产真实久久| 91九色偷拍| a黄色片在线观看| 欧美欧美午夜aⅴ在线观看| 色婷婷在线影院| 久久久久一区| 欧美日韩国产精品一卡| 性欧美又大又长又硬| 亚洲精品成人av| 欧美成人aaaaⅴ片在线看| 国产成人综合亚洲91猫咪| 久久99国产精品一区| 欧美激情福利| 日韩在线观看你懂的| 国产女优在线播放| 中文文精品字幕一区二区| 欧美黑人又粗又大又爽免费| 国产亚洲一区二区三区不卡| 国产国语刺激对白av不卡| 久蕉在线视频| 91久久国产最好的精华液| 欧美激情亚洲色图| 日本在线观看不卡视频| 亚洲一一在线| 国产亚洲精aa在线看| 欧美噜噜久久久xxx| 国产激情视频在线播放| 亚洲午夜一区二区| 91精品小视频| 久久久水蜜桃av免费网站| 日本午夜一区二区三区| 成人黄色图片网站| 久久久999精品免费| 亚洲精品无码久久久| 亚洲二区在线观看| 国精品无码人妻一区二区三区| 日韩精品一级二级| 伊人久久婷婷色综合98网| 精品一区二区三区中文字幕视频| 欧美日韩国产成人高清视频| 欧洲成人一区二区三区| 色婷婷一区二区三区四区| 美女av免费看| 国产98色在线|日韩| 亚洲 高清 成人 动漫| 国产影视一区| 91亚洲永久免费精品| 黑人玩欧美人三根一起进| 国产视频久久网| 一级片视频网站| 亚洲无人区一区| 天天躁日日躁aaaa视频| 韩国av一区二区三区在线观看| 欧美久久久久久久久久久久久久| 亚洲永久精品唐人导航网址| 国产欧亚日韩视频| segui88久久综合| 尤物精品国产第一福利三区 | 国产午夜精品久久久| 伊人久久一区二区| 亚洲午夜精品久久久久久久久| mm131丰满少妇人体欣赏图| 国产在线视频不卡二| ww国产内射精品后入国产| 成人影视亚洲图片在线| 国产精品久久久久久久久婷婷| 亚洲精品91天天久久人人| 国产精品久久久免费看| 精品一区二区三区久久| av网站手机在线观看| 九热爱视频精品视频| 91传媒视频在线观看| 波多视频一区| 欧美高清视频在线播放| 成人资源www网在线最新版| 精品乱人伦小说| 亚洲自拍偷拍另类| 精品国产91久久久久久| 国产精品麻豆免费版现看视频| av成人老司机| 久久久精品视频国产| 视频一区中文字幕| 国产精品va在线观看无码| 首页国产精品| 秋霞久久久久久一区二区| 国产一区二区在线视频你懂的| 国产日韩在线播放| av高清一区| 日本一区二区三区四区视频| 韩国日本一区| 久久国产精品影片| a天堂在线资源| 亚洲精品色婷婷福利天堂| 亚洲男人天堂久久| 91精品国产91久久久久久最新毛片 | 97se亚洲国产综合在线| 性一交一黄一片| 国产最新精品免费| 天天干天天综合| 日韩中文字幕一区二区三区| 久久久久久久中文| 亚洲欧洲日本mm| 黄色激情在线视频| 国产精品videosex极品| 激情五月五月婷婷| 一区二区中文| 日韩精品福利片午夜免费观看| 国产精品99久久久久久动医院| 日韩中文一区| 国内精品伊人久久久| 欧美资源一区| jizzjizz欧美69巨大| 日韩一区二区电影在线观看| 国产91一区| 天天久久人人| 久久要要av| 午夜啪啪福利视频| 伊人久久大香线蕉综合四虎小说 | 一区二区黄色片| 91麻豆精品视频| 白白色免费视频| 欧美激情一区二区三区全黄| 91麻豆精品国产91久久综合| 中文字幕乱码一区二区免费| 亚洲欧美另类日本| 亚洲人成小说网站色在线| 草视频在线观看| 亚洲自拍偷拍综合| 日韩少妇裸体做爰视频| 午夜在线电影亚洲一区| 亚洲国产成人无码av在线| 色婷婷av一区二区三区gif| 国产在线观看第一页| 欧美美女视频在线观看| 国产成年妇视频| 欧美精品一区二区精品网| 三级在线观看| 在线精品视频视频中文字幕| 黄网址在线观看| 韩国国内大量揄拍精品视频| 在线观看福利电影| 国产精品久久久久不卡| 国产精品国产三级在线观看| 国产精品久久久久久久久婷婷| 一个色免费成人影院| 亚洲无玛一区| 亚洲午夜电影| 虎白女粉嫩尤物福利视频| 麻豆成人久久精品二区三区红| 免费在线观看污网站| 成人av资源在线| 国产精品久久免费观看| 亚洲综合一区二区| a v视频在线观看| 欧美图区在线视频| 亚洲第一天堂影院| 亚洲天堂免费观看| 自由的xxxx在线视频| 欧美亚洲日本网站| 亚洲欧美综合久久久久久v动漫| 国产91视觉| 日韩中字在线| 阿v天堂2017| 经典三级在线一区| 成人精品在线观看视频| 中文字幕日韩欧美一区二区三区| 国产无码精品久久久| 欧美撒尿777hd撒尿| 欧美一区二区三区成人片在线| 综合欧美国产视频二区| av福利导福航大全在线| 91久久精品日日躁夜夜躁国产| 群体交乱之放荡娇妻一区二区| 亚洲第一综合网站| 老司机午夜精品视频| 日本一区二区在线观看视频| 国产精品久久影院| 亚洲天堂av片| 欧美tk丨vk视频| 日本中文字幕在线看| 欧美在线性爱视频| 一本一道久久a久久| 中国成人在线视频| 羞羞答答国产精品www一本| 动漫av在线免费观看| 国产精品久久久久国产精品日日| 日产精品久久久| 精品日韩一区二区三区免费视频| 欧洲日本在线| 国产www精品| 国产精品x8x8一区二区| 欧美三级午夜理伦三级老人| 美腿丝袜亚洲综合| 无码人妻精品一区二区中文| 精品福利在线视频| 色偷偷在线观看| 欧美国产日本高清在线| 久久综合偷偷噜噜噜色| 夜夜爽99久久国产综合精品女不卡| 久久久水蜜桃av免费网站| 800av在线播放| 亚洲午夜免费视频| 亚洲黄色片视频| 欧美成人免费va影院高清| 欧美97人人模人人爽人人喊视频| 欧美一区三区二区在线观看| 蘑菇福利视频一区播放| 国产精品无码毛片| 精品久久久精品| 色婷婷av一区二区三区之红樱桃| 久久久久九九九九| 福利电影一区| 奇米影视亚洲色图| 99久久婷婷国产| 国产成人在线视频观看| 亚洲欧美国产制服动漫| 欧美香蕉视频| 日韩欧美亚洲v片| 另类综合日韩欧美亚洲| 国产jizz18女人高潮| 欧美人成免费网站| 国产秀色在线www免费观看| 91久久在线播放| 国产精品啊啊啊| 中文字幕 日本| 欧美日韩中文字幕| 国产高清视频在线观看| 国产日本欧美一区二区三区在线| 色综合天天综合网中文字幕| 天天操狠狠操夜夜操| 亚洲欧美一区二区久久| 亚洲av少妇一区二区在线观看| 欧美极品少妇xxxxⅹ免费视频| 国产成人精品亚洲线观看| 日韩av一二三四区| 国产欧美一区视频| 国产人妖一区二区三区| 欧美激情精品久久久久久久变态| www.亚洲一二| 成人午夜视频免费在线观看| 国产女人18毛片水真多成人如厕| 91精品国产乱码久久久| 欧美精品免费播放| 麻豆一区一区三区四区| 五月婷婷之综合激情| 亚洲男人天堂一区| 性xxxx搡xxxxx搡欧美| 国产精品国产三级国产aⅴ9色| 欧美韩日一区| 日本不卡视频一区| 91国偷自产一区二区开放时间 | 国产精品日日摸夜夜爽| 精品久久在线播放| av网站无病毒在线| 国产激情一区二区三区在线观看| 亚洲免费影院| 丰满少妇被猛烈进入一区二区| 亚洲国产精品久久久| 国产精品xxx| 精品人妻少妇一区二区| 国产欧美中文在线| 少妇高潮一区二区三区99小说| 国产成人aa精品一区在线播放| 午夜精品久久久久99热蜜桃导演| 少妇毛片一区二区三区| 6080午夜不卡| 亚洲www啪成人一区二区| 欧美日韩dvd| 国产精品人妖ts系列视频| 国产91免费在线观看| 国产美女久久久| 性久久久久久|