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

HDFS的讀寫流程和一些重要策略

存儲 存儲軟件
補充一個問題,就是當我們 NameNode 掛掉,SecondaryNameNode作為新的NameNode上位時,它確實可以根據fsimage.ckpt把一部分元數據加載到內存,可是如果這時還有一部分操作日志在edits new中沒有執行怎么辦?

 前情回顧

在闡述HDFS最基礎的理論知識那一篇讀完后,這一篇是HDFS的主要工作流程,和一些較為有用的策略

補充一個問題,就是當我們 NameNode 掛掉,SecondaryNameNode作為新的NameNode上位時,它確實可以根據fsimage.ckpt把一部分元數據加載到內存,可是如果這時還有一部分操作日志在edits new中沒有執行怎么辦?

這時候有一個解決方案就是利用一個network fileSystem來解決,比如說集群中有一個服務器安裝了一個nfs server,而在NameNode上再安裝一個nfs client,此時客戶端向HDFS寫數據時,同時把向edits new中寫的數據寫一份到nfs server中,SecondaryNamenode就可以通過這個nfs server來獲取此時斷層的數據了

其他似乎也沒啥可多說的,讓我們直奔主題吧

以往鏈接

從零開始的大數據(一) --- HDFS的知識概述(上)

一、HDFS的讀流程

之后的內容會圍繞下圖開始

 

 

 

 

1.認識角色

簡單過一下圖里面的角色,最大塊的是一個client node,也就是說,這個節點上運行著客戶端,如果實在是沒搞清楚哪個是客戶端,那也很簡單,平時沒事就執行

hadoop fs -ls /

這個命令的機器,那就是客戶端了,其他就是NameNode和DataNode,在client node上運行著一個JVM虛擬機,讓HDFS client跑起來

2.步驟分析

① HDFS client調用文件系統的open方法

Distributed FileSystem顧名思義是一個分布式文件系統,它會通過RPC的方式遠程過程調用NameNode里的open方法,這個open方法有什么作用呢,就是獲取要讀的文件的file block locations,也就是文件的block的位置,在上一講我們也已經提到了,一個文件是會分割成128M一塊的大小分別存儲在各個數據節點的。

同時在執行open方法時,客戶端會產生一個FSData InputStream的一個輸入流對象(客戶端讀數據是從外部讀回來的)

② FSData InputStream讀數據

HDFS client調用FSData InputStream的read方法,同上也是遠程過程調用DataNode的read方法,此時的讀取順序是由近到遠,就是DataNode和client node的距離,這里所指的距離是一種物理距離,判定可以參考上一篇文章中機架的概念。

在聯系上DataNode并成功讀取后,關閉流就走完了一個正常的流程。

而且補充一下就是,上面Distributed FileSystem所調用的get block locations的方法只會返回部分數據塊,get block locations會分批次地返回block塊的位置信息。讀block塊理論上來說是依次讀,當然也可以通過多線程的方式實現同步讀。

③ 容錯機制

1.如果client從DataNode上讀取block時網絡中斷了如何解決?

此時我們會找到block另外的副本(一個block塊有3個副本,上一篇已經說過了),并且通過FSData InputStream進行記錄,以后就不再從中斷的副本上讀了。

2.如果一個DataNode掛掉了怎么辦?

在上一篇中我們提到了一個HDFS的心跳機制,DataNode會隔一小時向NameNode匯報blockReport,比如現在的情況是,block1的三個副本分別存儲在DataNode1,2,3上,此時DataNode1掛掉了。NameNode得知某個block還剩2個副本,此時攜帶這block的其余兩個副本的DataNode2,3在向NameNode報告時,NameNode就會對它們中的某一個返回一個指令,把block1復制一份給其他正常的節點。讓block1恢復成原本的3個副本。

3.client如何保證讀取數據的完整性

因為從DataNode上讀數據是通過網絡來讀取的,這說明會存在讀取過來的數據是不完整的或者是錯誤的情況。

DataNode上存儲的不僅僅是數據,數據還附帶著一個叫做checkSum檢驗和(CRC32算法)的概念,針對于任何大小的數據塊計算CRC32的值都是32位4個字節大小。此時我們的FSData InputStream向DataNode讀數據時,會將與這份數據對應的checkSum也一并讀取過來,此時FSData InputStream再對它讀過來的數據做一個checkSum,把它與讀過來的checkSum做一個對比,如果不一致,就重新從另外的DataNode上再次讀取。

4.上一個問題完成后工作

FSData InputStream會告訴NameNode,這個DataNode上的這個block有問題了,NameNode收到消息后就會再通過心跳機制通知這個DataNode刪除它的block塊,然后再用類似2的做法,讓正常的DataNode去copy一份正常的block數據給其它節點,保證副本數為3

代碼簡單示例(可跳過)

  1. try { 
  2.         // 
  3.         String srcFile = "hdfs://node-01:9000/data/hdfs01.mp4"
  4.         Configuration conf = new Configuration(); 
  5.  
  6.         FileSystem fs = FileSystem.get(URI.create(srcFile),conf); 
  7.         FSDataInputStream hdfsInStream = fs.open(new Path(srcFile)); 
  8.  
  9.         BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("/home/node1/hdfs02.mp4")); 
  10.  
  11.         IOUtils.copyBytes(hdfsInStream, outputStream, 4096, true); 
  12.     } catch (IOException e) { 
  13.         e.printStackTrace(); 
  14.     } 

 

二、HDFS寫流程

寫流程我們會按照下圖來進行講解,比讀數據更加復雜一丟丟,角色基本沒有改變所以就不詳細介紹了

 

 

 

 

客戶端向HDFS寫數據的時候是把文件分塊存儲在HDFS的各個節點上,而規定了存儲位置的是NameNode,所以Client node在存儲文件時需要先和NameNode進行聯系讓它進行分配。

步驟分析

① 客戶端調用分布式文件系統的create方法

和上面讀的方法類似,不過這次調用的是Distributed FileSystem的create方法,此時也是通過遠程調用NameNode的create方法

此時NameNode會進行的舉措

1.檢測自己是否正常運行

2.判斷要創建的文件是否存在

3.client是否有創建文件的權限

4.對HDFS做狀態的更改需要在edits log寫日志記錄

② 客戶端調用輸出流的write方法

create方法的返回值是一個OutputStream對象,為什么是output,因為是由HDFS去往DataNode去寫數據,此時HDFS會調用這個OutputStream的write方法

但是有個問題,此時我們還不知道我們的這些block塊要分別存放于哪些節點上,所以此時FSData OutputStream就要再和NameNode交互一下,遠程過程調用NameNode的addBlock方法,這個方法返回的是各個block塊分別需要寫在哪3個DataNode上面。

此時OutputStream就完整得知了數據和數據該往哪里去寫了

③ 具體的寫流程分析

請看流程4.1,chunk是一個512字節大小的數據塊,寫數據的過程中數據是一字節一字節往chunk那里寫的,當寫滿一個chunk后,會計算一個checkSum,這個checkSum是4個字節大小,計算完成后一并放入chunk,所以整一個chunk大小其實是512字節+4字節=516字節。

上述步驟結束后,一個chunk就會往package里面放,package是一個64kb大小的數據包,我們知道64kb = 64 * 1024字節,所以這個package可以放非常多的chunk。

此時一個package滿了之后,會把這個packjage放到一個data queue隊列里面,之后會陸續有源源不斷的package傳輸過來,圖中用p1,p2···等表示

這時候開始真正的寫數據過程

data queue中的package往數據節點DataNode上傳輸,傳輸的順序按照NameNode的addBlock()方法返回的列表依次傳輸

(ps:傳輸的類為一個叫做dataStreamer的類,而且其實addBlock方法返回的列表基本是按照離客戶端物理距離由近到遠的順序的)

往DataNode上傳輸的同時也往確認隊列ack queue上傳輸

針對DataNode中傳輸完成的數據做一個checkSum,并與原本打包前的checkSum做一個比較

校驗成功,就從確認隊列ack queue中刪除該package,否則該package重新置入data queue重傳

補充:1.以上邏輯歸屬于FSData OutputStream的邏輯

2.雖然本身一個block為128M,而package為64Kb,128M對于網絡傳輸過程來說算是比較大,拆分為小包是為了可靠傳輸

3.網絡中斷時的舉措:HDFS會先把整個pineline關閉,然后獲取一個已存在的完整的文件的version,發送給NameNode后,由NameNode通過心跳機制對未正確傳輸的數據下達刪除命令

4.如果是某個DataNode不可用,在1中我們也提到過了,通過心跳機制會通知其余的可用DataNode的其中一個進行copy到一個可用節點上

④ 寫入結束后的行動

完成后通過心跳機制NameNode就可以得知副本已經創建完成,再調用addBlock()方法寫之后的文件。

⑤ 流程總結

1.client端調用Distributed FileSystem的create,此時是遠程調用了NameNode的create,此時NameNode進行4個操作,檢測自己是否正常,文件是否存在,客戶端的權限和寫日志

2.create的返回值為一個FSData OutputStream對象,此時client調用流的write方法,和NameNode進行連接,NameNode的addBlock方法返回塊分配的DataNode列表

3.開始寫數據,先寫在chunk,后package,置入data queue,此時兩個操作,向DataNode傳輸,和放入ack queue,DataNode傳輸結束會檢測checkSum,成功就刪除ack queue的package,否則放回data queue重傳

4.結束后關閉流,告訴NameNode,調用complete方法結束

簡單代碼示例(可跳過)

  1. String source="/home/node1/hdfs01.mp4"; //linux中的文件路徑,demo存在一定數據 
  2.  
  3.     //先確保/data目錄存在 
  4.     String destination="hdfs://node-01:9000/data/hdfs01.mp4";//HDFS的路徑 
  5.  
  6.     InputStream in = null
  7.     try { 
  8.         in = new BufferedInputStream(new FileInputStream(source)); 
  9.         //HDFS讀寫的配置文件 
  10.         Configuration conf = new Configuration(); 
  11.  
  12.         FileSystem fs = FileSystem.get(URI.create(destination),conf); 
  13.  
  14.         //調用Filesystem的create方法返回的是FSDataOutputStream對象 
  15.         //該對象不允許在文件中定位,因為HDFS只允許一個已打開的文件順序寫入或追加 
  16.         OutputStream out = fs.create(new Path(destination)); 
  17.  
  18.         IOUtils.copyBytes(inout, 4096, true); 
  19.     } catch (FileNotFoundException e) { 
  20.         System.out.println("exception"); 
  21.         e.printStackTrace(); 
  22.     } catch (IOException e) { 
  23.         System.out.println("exception1"); 
  24.         e.printStackTrace(); 
  25.     } 

3.Hadoop HA高可用

 

 

 

 

之前已經提到過,元數據是放在NameNode的內存中的,當元數據丟失,造成服務不可用,這時候就需要時間來恢復。HA就可以讓用戶感知不到這種問題。這需要yarn,MapReduce,zookeeper的支持

僅有一個NameNode時,當NameNode掛掉就需要把fsimage讀到內存,然后把edits log所記錄的日志重新執行一遍,元數據才能恢復,而這種做法需要大量的時間

所以解決方案就在于我們要花大量時間來恢復元數據metaData,所以解決的方案就是讓集群瞬間變回可用狀態即可。

通過設置一個stand by的NameNode,并和主NameNode的元數據保持一致,圖中綠色的區域表示一個共享存儲,主NameNode的元數據會傳輸至共享存儲里面,讓stand by的NameNode進行同步。

下面的DataNode會同時往兩個NameNode發送blockReport,因為讀取DataNode的塊信息并不會很快,所以為了保證在active掛掉的時候,standby能立刻頂上位置,所以要事先讀取塊信息,同時這也是方便standby來構建它的元數據信息的途徑。

active掛掉后讓stand by立刻生效的機制是上面的FailoverControllerActive實現的,簡稱zkfc,它會定時ping主NameNode,如果發現NameNode掛掉,就會通知我們的zookeeper集群,然后集群的另一個FailoverControllerActive就會通知stand by。

4.Hadoop聯邦

集群中的元數據會保存在NameNode的內存中,而這些元數據每份占用約150字節,對于一個擁有大量文件的集群來說,因為NameNode的metaData被占滿,DataNode就無法寫入了,聯邦就可以幫助系統突破文件數上限

其實就是布置了多個NameNode來共同維護集群,來增加namespace,而且分散了NameNode的訪問壓力,而且客戶端的讀寫互不影響。就是擴展性,高吞吐和隔離性。

 

 

 

 

5.HDFS存儲大量小文件

和剛剛的聯邦的介紹時的情況一樣,文件數量(每個文件元數據150byte)會影響到NameNode的內存

方案1:HAR文件

方案其實就是通過一個MR程序把許多小文件合并成一個大文件,需要啟動Yarn

  1. # 創建archive文件 
  2. hadoop archive -archiveName test.har -p /testhar -r 3 th1 th2 /outhar # 原文件還存在,需手動刪除 
  3. # 查看archive文件 
  4. hdfs dfs -ls -R har:///outhar/test.har 
  5. # 解壓archive文件 
  6. hdfs dfs -cp har:///outhar/test.har/th1 hdfs:/unarchivef 
  7. hadoop fs -ls /unarchivef    # 順序 
  8. hadoop distcp har:///outhar/test.har/th1 hdfs:/unarchivef2 # 并行,啟動MR 

 

方案2:Sequence File方案

其核心是以文件名為key,文件內容為value組織小文件。10000個100KB的小文件,可以編寫程序將這些文件放到一個SequenceFile文件,然后就以數據流的方式處理這些文件,也可以使用MapReduce進行處理。一個SequenceFile是可分割的,所以MapReduce可將文件切分成塊,每一塊獨立操作。不像HAR,SequenceFile支持壓縮。在大多數情況下,以block為單位進行壓縮是最好的選擇,因為一個block包含多條記錄,壓縮作用在block之上,比reduce壓縮方式(一條一條記錄進行壓縮)的壓縮比高.把已有的數據轉存為SequenceFile比較慢。比起先寫小文件,再將小文件寫入SequenceFile,一個更好的選擇是直接將數據寫入一個SequenceFile文件,省去小文件作為中間媒介.

此方案的代碼不是很重要,所以就直接省略了,實在是想看看長啥樣的可以艾特我

finally

到此HDFS的內容就差不多了,希望對你會有所幫助。之后會繼續往下分享MapReduce,帶你走完整個大數據的流程,感興趣的朋友可以持續關注下,謝謝。

責任編輯:武曉燕 來源: 說出你的愿望吧
相關推薦

2013-07-02 10:18:20

編程編程策略

2013-07-02 09:43:02

編程策略

2011-03-28 16:59:16

nagios監控服務器

2009-07-21 09:29:27

iBATIS使用

2022-08-18 20:44:34

HDFS架構流程

2018-07-30 08:41:48

VueReact區別

2012-11-09 10:46:24

Canonical

2009-09-17 10:10:10

Oracle學習

2021-06-18 07:35:46

Java接口應用

2009-07-09 17:46:44

Java流程控制

2011-07-13 10:12:56

SQL語句優化操作符優化

2011-07-22 09:58:18

Oracle數據庫優化策略

2020-02-03 16:03:36

疫情思考

2016-11-16 21:18:42

android日志

2009-06-25 09:50:32

JSF

2011-06-01 16:50:21

JAVA

2009-06-18 14:54:52

Spring AOP

2009-09-21 17:46:25

Hibernate數據

2010-09-28 14:14:19

SQL語句

2013-03-29 13:17:53

XCode調試技巧iOS開發
點贊
收藏

51CTO技術棧公眾號

亚洲а∨天堂久久精品喷水| 国产馆精品极品| 亚洲欧美日韩视频一区| 狠狠操精品视频| 黄色小视频在线观看| 日韩制服丝袜先锋影音| 婷婷成人av| 国产三级久久久| 欧美在线性爱视频| 免费观看a级片| **精品中文字幕一区二区三区| 亚洲码国产岛国毛片在线| 国产亚洲精品美女久久久m| 欧美精品亚洲精品日韩精品| 神马久久影院| 欧美人动与zoxxxx乱| 欧美 国产 精品| 亚欧在线观看视频| 麻豆成人久久精品二区三区小说| 欧美理论电影在线观看| 亚洲成人日韩在线| 日本电影久久久| 亚洲成av人片一区二区三区| 欧美欧美一区二区| 国产精品美女一区| 亚洲专区一区| 久久人人爽人人爽人人片亚洲| 日本少妇xxxx软件| 高清亚洲高清| 无码av中文一区二区三区桃花岛| 日韩av高清在线播放| 国产色综合视频| 免费亚洲网站| 久久99精品久久久久久琪琪| 久久久久亚洲av无码专区桃色| 国产精品99| 亚洲欧美日韩在线播放| 欧美激情第一页在线观看| 国产又大又黑又粗| 美女尤物久久精品| 久久久久久久成人| 三级黄色片在线观看| 天海翼亚洲一区二区三区| 欧美精品自拍偷拍| 日韩av播放器| 天堂va在线| 欧美国产一区二区在线观看| 翡翠波斯猫1977年美国| 又色又爽又黄无遮挡的免费视频| 一起草av在线| 日本久久综合| 日韩av影片在线观看| 91香蕉视频在线观看视频| 欧美专区福利免费| 欧美日韩国产精品| 日韩精品在线观看av| 日本视频在线观看| 中文字幕av一区 二区| 精品综合在线| 色婷婷av一区二区三| 国产精品一二二区| 91在线无精精品一区二区| 国产一级片免费视频| 亚洲在线网站| 欧美亚洲一区在线| 国产无遮挡免费视频| 欧美日韩亚洲一区二区三区在线| 精品国产一区av| 国产精品综合激情| 久久一本综合| 精品国内产的精品视频在线观看| 亚洲精品91在线| 精品高清在线| 国产一区二区三区在线播放免费观看| 亚洲一区二区观看| 亚欧日韩另类中文欧美| 日韩精品日韩在线观看| 亚洲精品中文字幕在线播放| 欧美人与动xxxxz0oz| 亚洲国产精品女人久久久| 香蕉视频污视频| 欧美午夜寂寞| 亚洲欧美在线磁力| 精品人妻中文无码av在线| 色爱综合网欧美| 久久久国产视频91| 国产3级在线观看| 五月激情久久久| 欧美久久精品一级黑人c片| 欧美日韩一级大片| 精品1区2区3区4区| 亲爱的老师9免费观看全集电视剧| 91精品国产乱码久久久张津瑜| 在线一区免费观看| 精品人伦一区二区三区蜜桃网站| 秋霞av国产精品一区| 精品视频一二三区| 蜜臀av一区二区在线免费观看| 国产欧美精品在线| 国产精品久久777777换脸| 蜜桃视频一区二区三区在线观看 | 在线观看精品一区二区三区| 97国产精品videossex| 欧美精品v日韩精品v国产精品| 天堂av手机版| 91网页版在线| 一个色的综合| 98色花堂精品视频在线观看| 色婷婷精品大视频在线蜜桃视频| www.com黄色片| 日韩精品一级| 亚洲色图50p| xxxx日本少妇| 亚洲欧美bt| 成人精品一区二区三区电影黑人| 懂色av一区二区三区四区| 久久亚洲欧美国产精品乐播| 久久久国产精华液999999| 99riav视频在线观看| 在线精品视频一区二区三四| 无套白嫩进入乌克兰美女| 欧美丝袜足交| 欧美成人免费全部| 国产一区二区视频免费| 蜜桃91麻豆精品一二三区| 久久福利视频一区二区| 国产精品一级久久久| 成年午夜在线| 亚洲成人福利片| 天天干天天草天天| 欧美绝顶高潮抽搐喷水合集| 久久久97精品| www毛片com| 成人黄色av网站在线| 中文字幕在线亚洲精品| 亚洲天堂电影| 欧美成人三级电影在线| 1024在线看片| 久久九九99| 国产精品一国产精品最新章节| 黄色网在线播放| 色噜噜久久综合| 艳妇乳肉豪妇荡乳xxx| 91精品观看| 国产精品久久久久999| 亚欧洲精品视频| 亚洲一区影音先锋| 日本国产一级片| 成人免费在线观看av| 欧美一区二区.| 全部免费毛片在线播放一个| 亚洲欧美另类小说| 一本色道久久亚洲综合精品蜜桃| 国产aⅴ精品一区二区三区久久| 国产综合在线视频| 成人高潮片免费视频| 亚洲欧洲日本在线| 污污的视频免费| 第一社区sis001原创亚洲| 亲子乱一区二区三区电影| 欧洲av在线播放| 亚洲一区影音先锋| 国产精品嫩草69影院| 欧美+亚洲+精品+三区| 成人精品视频99在线观看免费| 国内精品一区视频| 91黄色激情网站| aa一级黄色片| 久久久成人网| 日韩精品一线二线三线| 91精品店在线| 日韩在线观看免费全集电视剧网站 | 99久久久无码国产精品性色戒| 欧洲成人一区| 亚洲日本成人女熟在线观看| 91丝袜一区二区三区| 久久看人人爽人人| 国产xxxxx视频| 国产一区二区三区日韩精品| 国产精品高潮粉嫩av| 91亚洲精选| 欧美精品丝袜中出| 欧美日韩精品一区二区三区视频播放 | 久久gogo国模啪啪裸体| 精品中文字幕在线| 亚洲免费一级片| 欧美日韩精品在线播放| 午夜精品久久久久久久久久久久| 久久激情免费视频| 成人激情免费网站| 无码内射中文字幕岛国片| 第一会所sis001亚洲| 91超碰rencao97精品| 99久久精品免费看国产小宝寻花 | 26uuu国产一区二区三区| 国产精品人人妻人人爽人人牛| 成人黄色av| julia一区二区中文久久94| gogo久久| 国产一区二区三区毛片| 99久久精品无免国产免费| 亚洲成人激情av| 卡一卡二卡三在线观看| 精彩视频一区二区三区| 精品国产av无码一区二区三区| 天堂99x99es久久精品免费| 国产精品午夜视频| 欧美人与性动交α欧美精品图片| 亚洲精品电影网| 中文字幕欧美色图| 亚洲免费电影在线| 免费看污黄网站在线观看| 久久99精品久久只有精品| 久久久久久免费看| 日韩精品四区| 国产精品久久久久久久久婷婷| 日韩欧美一区二区三区免费观看| 日韩在线欧美在线| 人妻少妇一区二区三区| 欧美日韩国产电影| 久草国产精品视频| 日韩美女视频一区| 人妻aⅴ无码一区二区三区| 国产成人午夜精品影院观看视频 | 久久成人激情视频| 国产麻豆精品视频| 黄色大片在线免费看| 日韩av在线播放网址| 国产精品精品软件视频| 色香欲www7777综合网| 欧美激情精品久久久久久免费印度| 男女视频在线观看免费| 日韩欧美中文字幕制服| 最近中文字幕在线观看| 婷婷亚洲久悠悠色悠在线播放| 顶级黑人搡bbw搡bbbb搡| 深夜福利视频在线观看| 欧美视频免费在线| 精品99在线观看| 中文字幕在线观看一区| xxxxx在线观看| 99精品视频在线观看免费| 91丝袜超薄交口足| 免费观看在线综合| 女人另类性混交zo| 国产一区导航| 野外做受又硬又粗又大视频√| 国产精品久久天天影视| 午夜精品一区二区在线观看的 | 亚洲最大成人在线观看| 美女精品在线| 国产欧美高清在线| 一区二区日韩免费看| 轻点好疼好大好爽视频| 欧美成人精品| 日本丰满少妇黄大片在线观看| 成人激情视频| 亚洲无玛一区| 色135综合网| 亚洲午夜精品一区二区三区| 国产亚洲电影| 日本不卡二区| 精品国产乱码久久久久久1区2匹| 久久久久久精| 伊人久久大香线蕉| 麻豆亚洲一区| 精品国产乱码久久久| 日韩区国产区| 波多野结衣的一区二区三区| 日本一区二区精品| 久久理论电影| 中文字幕av导航| 久久久久亚洲| 四虎4hu永久免费入口| 综合激情一区| 欧美国产日韩激情| 国产亚洲高清视频| 黑鬼大战白妞高潮喷白浆| 蜜桃av一区| 九九九在线观看视频| 久久国产精品72免费观看| 亚洲天堂av一区二区三区| 国模无码大尺度一区二区三区| 欧美特黄aaa| 国产东北露脸精品视频| 亚洲成年人av| 久久久一区二区三区| 亚洲毛片亚洲毛片亚洲毛片| 亚洲视频在线一区| 久久免费精彩视频| 欧美丝袜一区二区| 亚洲一区在线观| 欧美不卡视频一区| 日韩av高清在线| 色诱女教师一区二区三区| 亚洲婷婷噜噜| 日本午夜精品理论片a级appf发布| 国产精品久久乐| 91精品国自产在线观看| 日韩有码中文字幕在线| 樱花www成人免费视频| 欧美理论在线| 日本成人在线免费视频| 国产精品自产自拍| 播金莲一级淫片aaaaaaa| 综合中文字幕亚洲| 六月丁香婷婷综合| 欧美人动与zoxxxx乱| 天堂成人在线视频| 日韩在线观看网址| 麻豆成全视频免费观看在线看| 国产精品久久久久久久久借妻| 亚洲高清999| 日本在线免费观看一区| 综合久久综合| 9久久婷婷国产综合精品性色| 蜜桃视频免费观看一区| wwwww在线观看| 久久精品日产第一区二区三区高清版 | 欧美午夜精品久久久久久孕妇| 国产黄色一区二区| 国产一区二区成人| 成人免费在线| 国产精品xxxxx| 国产欧美自拍一区| 中国人体摄影一区二区三区| 性色一区二区| www.555国产精品免费| 国产日韩v精品一区二区| 国产乱国产乱老熟300| 欧美日韩一区二区三区在线| 日韩一级免费毛片| 久久精品亚洲热| 91精品韩国| 久久99精品久久久久久久久久| 亚洲欧洲美洲一区二区三区| 中文字幕在线观看第三页| 97久久超碰精品国产| 久久久国产精品黄毛片| 欧美日韩一区视频| 天堂网在线播放| 色综合久久中文字幕综合网小说| jvid一区二区三区| 国产麻豆乱码精品一区二区三区| 久久精品亚洲欧美日韩精品中文字幕| 日韩精品免费播放| 久久噜噜亚洲综合| 成人在线免费看视频| 亚洲国产天堂网精品网站| 4438x成人网全国最大| 成人妇女淫片aaaa视频| 欧美一区电影| 中文字幕国内自拍| 国产视频亚洲色图| 亚洲大尺度在线观看| 亚洲欧美激情视频| 国产精品一区二区av影院萌芽| 国产综合动作在线观看| 禁久久精品乱码| 中文字幕在线视频播放| 一区二区高清视频在线观看| 国产av一区二区三区精品| 欧美成人激情视频免费观看| 99精品国自产在线| 日韩精品一线二线三线| 日韩国产一区二| 国产又粗又硬视频| 欧美羞羞免费网站| 1769视频在线播放免费观看| 国产日韩欧美在线观看| 希岛爱理一区二区三区| 国产一级免费大片| 一区二区不卡在线播放| 六月婷婷中文字幕| 97精品伊人久久久大香线蕉| 国产美女精品视频免费播放软件| 日韩精品一区二区三区外面| 日本在线不卡视频| 中文字幕资源站| 精品久久久久久久久久久久久久久| 欧美成人aaaaⅴ片在线看| 欧美xxx久久| 电影天堂国产精品| 最近免费观看高清韩国日本大全| 成人av一区二区三区| 中文字幕日本视频| 精品综合久久久久久97| 欧美日韩爱爱| 午夜福利123| 日本国产一区二区| 女人黄色免费在线观看| 日韩av电影免费播放| 国产成人免费视频网站| 久久久蜜桃一区二区| 欧美大片大片在线播放| 精品国精品国产自在久国产应用| 亚洲AV成人精品| 欧美在线综合视频| 麻豆成全视频免费观看在线看| 欧美一级特黄aaaaaa在线看片|