HDFS基本原理

      網(wǎng)友投稿 1149 2025-03-31

      HDFS

      HDFS是 Hadoop Distribute File System的縮寫,是谷歌GFS分布式文件系統(tǒng)的開源實(shí)現(xiàn),Apache Hadoop的一個(gè)子項(xiàng)目,HDFS基于流數(shù)據(jù)訪問模式的分布式文件系統(tǒng),支持海量數(shù)據(jù)的存儲(chǔ),允許用戶將百千臺(tái)組成存儲(chǔ)集群,HDFS運(yùn)行在低成本的硬件上,提供高吞吐量,高容錯(cuò)性的數(shù)據(jù)訪問。

      優(yōu)點(diǎn)

      可以處理超大文件(TB、PB)。

      HDFS的基本原理

      流式數(shù)據(jù)訪問 一次寫入多次讀取,數(shù)據(jù)集一旦生成,會(huì)被復(fù)制分發(fā)到不同存儲(chǔ)節(jié)點(diǎn)上,響應(yīng)各種數(shù)據(jù)分析任務(wù)請(qǐng)求。

      商用硬件 ?可以運(yùn)行在低廉的商用硬件集群上。

      異構(gòu)軟硬件平臺(tái)的可移植性,HDFS在設(shè)計(jì)的時(shí)候就考慮到了平臺(tái)的可以移植性,這種特性方便了 HDFS在大規(guī)模數(shù)據(jù)應(yīng)用平臺(tái)的推廣。

      缺點(diǎn)

      低延遲的數(shù)據(jù)訪問,要求地時(shí)間延遲數(shù)據(jù)訪問的應(yīng)用不是在HDFS上運(yùn)行,可以用Hbase,高吞吐量的同時(shí)會(huì)以提高時(shí)間延遲為代價(jià)。

      大量小文件 由于namenode將文件的元數(shù)據(jù)存儲(chǔ)在內(nèi)存中,因此受制于namenode的內(nèi)存容量,一般來說目錄塊和數(shù)據(jù)庫(kù)的存儲(chǔ)信息約占150個(gè)字節(jié)也就是說如果有100萬個(gè)文件,每一個(gè)文件占一個(gè)數(shù)據(jù)塊,則需要300MB內(nèi)存,但是存儲(chǔ)十億個(gè)就超出了當(dāng)前的硬件能力了。

      多用戶寫入,任意修改文件。HDFS中的文件寫入只支持一個(gè)用戶,且只能以添加的方式正在文件末尾添加數(shù)據(jù),不支持多個(gè)寫操作,不支持文件的任意位置修改。

      數(shù)據(jù)塊

      HDFS默認(rèn)的塊大小是128M,與單一磁盤上的文件系統(tǒng)相似,HDFS也被劃分為塊大小的多個(gè)分塊。HDFS中小于一個(gè)塊大小的文件不會(huì)占據(jù)整個(gè)塊的空間,當(dāng)一個(gè)1M的文件存儲(chǔ)在一個(gè)128M的塊中時(shí),文件只占1M的磁盤空間,而不是128M。HDFS的塊比磁盤的塊大,目的時(shí)為了最小化的尋址開銷,假設(shè)尋址時(shí)間約為10ms,傳輸速度為100M/s,為了使尋址時(shí)間僅占傳輸時(shí)間的1%,我們要將塊設(shè)置成100MB,默認(rèn)塊的大小為128M,這個(gè)塊的大小也不能設(shè)置得過大。MapReduce中的map任務(wù)通常一次只處理一個(gè)數(shù)據(jù)塊的數(shù)據(jù),因此如果任務(wù)數(shù)量太少了(少于集群中的節(jié)點(diǎn)數(shù)量),作業(yè)的運(yùn)行速度就會(huì)比較慢。

      NameNode

      元數(shù)據(jù)節(jié)點(diǎn)(NameNode)的作用是管理分布式文件的命名空間,一個(gè)集群只有一個(gè)NameNode節(jié)點(diǎn),主要負(fù)責(zé)HDFS文件系統(tǒng)的管理工作包括命名空間管理和文件Block管理,在HDFS內(nèi)部,一個(gè)文件被分成為一個(gè)或者多個(gè)Block的所有元數(shù)據(jù)信息,主要包括“文件名 —>>數(shù)據(jù)塊的映射“,”數(shù)據(jù)塊 —>>DataNode“的映射列表,該列表通過DataNode上報(bào)給NameNode建立,NameNode決定文件數(shù)據(jù)塊到具體的DataNode節(jié)點(diǎn)的映射。

      NameNode管理文件系統(tǒng)的命名空間(namespace),它維護(hù)這文件系統(tǒng)樹以及文件樹中所有的文件(文件夾)的元數(shù)據(jù)。管理這些信息的文件有兩個(gè),分別是命名空間鏡像文件(namespace image)和操作日志文件(edit log),這些信息被緩存在RAM中,也會(huì)持被持久化存儲(chǔ)在硬盤。

      為了周其性地將元數(shù)據(jù)節(jié)點(diǎn)地鏡像文件fsimage和日志edits合并,以防止日志文件過大,HDFS定義了輔助元數(shù)據(jù)節(jié)點(diǎn)(Secondary NameNode)上也保存了一份fsimage文件,以確保在元數(shù)據(jù)文件中地鏡像文件失敗時(shí)可以恢復(fù)。

      容錯(cuò)機(jī)制

      備份組成文件系統(tǒng)元數(shù)據(jù)持久狀態(tài)的文件,將本地持久狀態(tài)寫入磁盤地同時(shí),寫入一個(gè)遠(yuǎn)程掛載地文件系統(tǒng)(NFS)

      運(yùn)行一個(gè)輔助的namenode,不作為namenode使用,定期合并編輯日志和命名空間鏡像,一般在一臺(tái)單獨(dú)的物理計(jì)算機(jī)上運(yùn)行,因?yàn)樗枰加么罅緾PU時(shí)間,并且需要與namenode一樣多的內(nèi)存來執(zhí)行合并操作,會(huì)保存namenode合并后的命名空間和鏡像文件,一般會(huì)滯后于NameNode節(jié)點(diǎn)的。

      使用磁盤陳列NameNode節(jié)點(diǎn)上冗余備份Namenode的數(shù)據(jù)。

      DataNode

      數(shù)據(jù)節(jié)點(diǎn)只負(fù)責(zé)存儲(chǔ)數(shù)據(jù),一個(gè)Block會(huì)在多個(gè)DataNode中進(jìn)行冗余備份,一個(gè)塊在一個(gè)DataNode上最多只有一個(gè)備份,DataNode上存儲(chǔ)了數(shù)據(jù)塊ID和數(shù)據(jù)塊內(nèi)容以及他們的映射關(guān)系。

      DataNode定時(shí)和NameNode通信,接收NameNode的指令,默認(rèn)的超時(shí)時(shí)長(zhǎng)為10分鐘+30s。 NameNode上不永久保存DataNode上有哪些數(shù)據(jù)塊信息,通過DataNode上報(bào)的方式更新NameNode上的映射表,DataNode和NameNode建立連接后,會(huì)不斷和 NameNode保持聯(lián)系,包括NameNode第DataNode的一些命令,如刪除數(shù)據(jù)或把數(shù)據(jù)塊復(fù)制到另一個(gè)DataNode上等,DataNode通常以機(jī)架的形式組織,機(jī)架通過一個(gè)交互機(jī)將所有的系統(tǒng)鏈接起來。機(jī)架內(nèi)部節(jié)點(diǎn)之間傳輸速度快于機(jī)架間節(jié)點(diǎn)的傳輸速度。

      DataNode同時(shí)作為服務(wù)器接收客戶端的范圍呢,處理數(shù)據(jù)塊的讀、寫請(qǐng)求。DataNode之間還會(huì)相互他通信,執(zhí)行數(shù)據(jù)塊復(fù)制任務(wù),在數(shù)據(jù)塊復(fù)制任務(wù),在客戶端執(zhí)行寫操作時(shí),DataNode之間需要相互通信配合,保持寫操作的一致性,DataNode的功能包括:

      保存Block,每個(gè)塊對(duì)應(yīng)原數(shù)據(jù)信息文件,描述這個(gè)塊屬于那個(gè)文件,第幾個(gè)塊等信息。

      啟動(dòng)DataNode線程,向NameNode定期匯報(bào)Block信息。

      定期向NameNode發(fā)送心跳保持聯(lián)系。如果10分鐘沒有接收到心跳,則認(rèn)為其lost,將其上的Block復(fù)制到其他DataNode節(jié)點(diǎn)上。

      SecondaryNameNode

      secondaryNameNode定期地創(chuàng)建命名空間地檢查點(diǎn)。首先從NameNode下載fsimage和edit.log然后在本地合并他們,將合并后地fsimage和edit.log上傳回到NameNode,這樣減少了NameNode重新啟動(dòng)NameNode時(shí) 合并fsimage和edits.log花費(fèi)地時(shí)間,定期合并fsimage和edit.log文件,使得edits.log大小保持在限定返回內(nèi)并起到冷備份的作用,在NameNode失效的時(shí)候,可以恢復(fù)fsimage。SecondaryNameNode與NameNode通常運(yùn)行在不同的機(jī)器上,內(nèi)存呢與NameNode的內(nèi)存一樣大。

      參數(shù)dfs.namenode.secondary.http-address設(shè)置SecondaryNamenode 的通信地址,SecondaryNamenode上的檢查點(diǎn)進(jìn)程開始由兩個(gè)配置參數(shù)控制,第一個(gè)參數(shù)dfs.namenode.checkpoint.period,指定兩個(gè)連續(xù)檢查點(diǎn)之間的時(shí)間差默認(rèn)1小時(shí)。dfs.namenode.checkpoint.txns,定義NameNode上新增事務(wù)的數(shù)量默認(rèn)1百萬條。即使沒有到達(dá)設(shè)定的時(shí)間也會(huì)啟動(dòng)fsimage和edits的合并。

      工作流程

      SecondaryNameNode會(huì)定期和NameNode通信,請(qǐng)求其停止使用edits文件,暫時(shí)將更新的操作寫道一個(gè)新的文件edits.new上來。這個(gè)操作時(shí)瞬間完成的,上層寫日志的函數(shù)時(shí)完全趕不到差別。

      SecondaryNameNode通過HTTP GET的方式從NameNode上獲取fsimage和edits.log文件,并下載到相應(yīng)的目錄下。

      SecondaryNameNode將下載下來的fsimage載入到內(nèi)存,然后一條一條的執(zhí)行edits文件中的哥哥更新操作,使內(nèi)存中的fsimage保持最新;這個(gè)過程就是edits和fsimage文件合并。

      SecondaryNameNode 執(zhí)行完3操作后,會(huì)通過POST的方式新的fsimage文件發(fā)送到NameNode節(jié)點(diǎn)上。

      Namenode從SecondaryNameNode接收到更新的fsimage替換舊的fsimage文件,同時(shí)將edits.new更名為edits文件,這個(gè)過程中edits就變小了。

      HDFS工作機(jī)制

      機(jī)架感知

      在HDFS中,數(shù)據(jù)塊被復(fù)制成副本,存放在不同的節(jié)點(diǎn)上,副本的存放是HDFS可靠性和性能的關(guān)鍵,優(yōu)化副本存放策略使HDFS區(qū)分于其他大部分分布式文件系統(tǒng)的共同要特征,HDFS采用了一種稱為機(jī)架感知的(rck-aware)的策略來改進(jìn)數(shù)據(jù)的可靠性,可用性和網(wǎng)絡(luò)帶寬的利用率。HDFS實(shí)例一般運(yùn)行在多個(gè)機(jī)架的計(jì)算機(jī)組成的集群上,不同機(jī)架上的兩臺(tái)機(jī)器之間的通信時(shí)通過交互機(jī)。在多數(shù)情況下,一個(gè)機(jī)架上的兩臺(tái)機(jī)器間的帶寬會(huì)比不同機(jī)架的兩臺(tái)機(jī)器的帶寬大。

      通過一個(gè)機(jī)架感知的過程,NameNode可以確定每一個(gè)Datanode所屬的機(jī)架id,一個(gè)簡(jiǎn)單的策略是將副本放在不同的機(jī)架,可以有效防止一個(gè)機(jī)架失效時(shí)數(shù)據(jù)的丟失,并且允許讀數(shù)據(jù)的時(shí)候充分利用各個(gè)機(jī)架的帶寬,這種策略設(shè)置可以將副本均勻分布在集群中,有利于當(dāng)組件失效的情況下的負(fù)載均衡,但是 ,因?yàn)檫@種策略的一個(gè)寫操作需要傳輸數(shù)據(jù)塊到多個(gè)機(jī)架這樣增加了寫的代價(jià)。

      多數(shù)情況下副本系數(shù)時(shí)3,HDFS的存放策略時(shí)將一個(gè)副本存放在本地的機(jī)架上,一個(gè)副本放在同一機(jī)架的另外一個(gè)節(jié)點(diǎn)上 ,最后一個(gè)副本放在不同機(jī)架的節(jié)點(diǎn)上,這種策略減少了機(jī)架間的數(shù)據(jù)傳輸,提高了寫操作的效率。機(jī)架間的錯(cuò)誤遠(yuǎn)比節(jié)點(diǎn)的錯(cuò)誤少,這種策略提減少了讀取數(shù)據(jù)時(shí)需要的網(wǎng)絡(luò)傳輸總帶寬。這種策略下,副本并不是均勻分布在同一個(gè)機(jī)架上。三分之一的副本在一個(gè)節(jié)點(diǎn),三分之二的副本在一個(gè)機(jī)架上,其他副本均勻分布在剩下的機(jī)架中,這種策略在不損害數(shù)據(jù)可靠性和可讀性能的情況下改進(jìn)了寫的性能。

      分配原理

      有了機(jī)架感知,NameNode就可以畫出下圖所示的datanode網(wǎng)絡(luò)拓?fù)鋱D,

      最底層是Hx是 datanode, 則H1的rackid=/D1/R1/H1,H1的parent是R1,R1的是D1,有了這些rackid信息就可以計(jì)算出任意兩臺(tái)datanode之間的距離

      distance(/D1/R1/H1,/D1/R1/H1)=0 ?相同的datanode

      distance(/D1/R1/H1,/D1/R1/H2)=2 ?同一rack下的不同datanode

      distance(/D1/R1/H1,/D1/R1/H4)=4 ?同一IDC下的不同datanode

      distance(/D1/R1/H1,/D2/R3/H7)=6 ?不同IDC下的datanode

      寫文件時(shí)根據(jù)策略輸入 dn 節(jié)點(diǎn)列表,讀文件時(shí)按與client由近到遠(yuǎn)距離返回 dn 列表

      文件讀取

      HDFS Client 通過FileSystem對(duì)象的Open方法打開要讀取的文件。

      DistributeFileSystem負(fù)責(zé)向遠(yuǎn)程的元數(shù)據(jù)(NameNode)發(fā)起RPC調(diào)用,得到文件的數(shù)據(jù)信息。返回?cái)?shù)據(jù)塊列表,對(duì)于每個(gè)數(shù)據(jù)塊,NameNode返回該數(shù)據(jù)塊的DataNode地址。

      DistributeFileSystem返回一個(gè) FSDataInputSteam對(duì)象給客戶端,客戶端調(diào)用FSdataInputSteam對(duì)象的read()方法開始讀取數(shù)據(jù)。

      通過對(duì)數(shù)據(jù)流反復(fù)調(diào)用read()方法,把數(shù)據(jù)從數(shù)據(jù)節(jié)點(diǎn)傳輸?shù)娇蛻舳恕?/p>

      當(dāng)數(shù)據(jù)讀取完畢時(shí),DFSInputSteam對(duì)象會(huì)關(guān)閉此數(shù)據(jù)節(jié)點(diǎn)的鏈接,連接此文件下一個(gè)數(shù)據(jù)塊的最近數(shù)據(jù)節(jié)點(diǎn)。

      當(dāng)客戶端讀取完數(shù)據(jù)時(shí),調(diào)用FSDataInputSteam對(duì)象的close()關(guān)閉輸入流。

      package hdfs;

      import org.apache.hadoop.conf.Configuration;

      import org.apache.hadoop.fs.FSDataInputStream;

      import org.apache.hadoop.fs.FileSystem;

      import org.apache.hadoop.fs.Path;

      import java.net.URI;

      public class DataInputStream {

      public static void main(String[] args) throws Exception {

      Configuration conf = new Configuration();

      FileSystem fs = FileSystem.get(new URI("hdfs://192.168.1.101:9000"),conf,"hadoop");

      Path src = new Path("/input/test");

      FSDataInputStream dis = fs.open(src);

      String str = dis.readLine();

      while (str.length() > 0) {

      System.out.println(str);

      str = dis.readLine();

      if (str == null) break;

      }

      dis.close();

      }

      }

      文件寫入

      客戶端調(diào)用DistributedFileSystem對(duì)象的create方法創(chuàng)建一個(gè)文件輸出流對(duì)象

      DistributedFileSystem向遠(yuǎn)程的NameNode系欸但發(fā)起一次RPC調(diào)用,NameNode檢查該文件是否存在,如果存在將會(huì)覆蓋寫入,以及客戶端是否有權(quán)限新建文件。

      客戶端調(diào)用的FSDataOutputStream對(duì)象的write()方法寫數(shù)據(jù),首先數(shù)據(jù)先被寫入到緩沖區(qū),在被切分為一個(gè)個(gè)數(shù)據(jù)包。

      每個(gè)數(shù)據(jù)包發(fā)送到用NameNode節(jié)點(diǎn)分配的一組數(shù)據(jù)節(jié)點(diǎn)的一個(gè)節(jié)點(diǎn)上,在這組數(shù)據(jù)節(jié)點(diǎn)組成的管線上依次傳輸數(shù)據(jù)包。

      管線上的數(shù)據(jù)接按節(jié)點(diǎn)順序反向發(fā)揮確認(rèn)信息(ack)最終由管線中的第一個(gè)數(shù)據(jù)節(jié)點(diǎn)將整條管線確認(rèn)信息發(fā)給客戶端。

      package hdfs;

      import org.apache.hadoop.conf.Configuration;

      import org.apache.hadoop.fs.FSDataOutputStream;

      import org.apache.hadoop.fs.FileSystem;

      import org.apache.hadoop.fs.Path;

      import java.net.URI;

      public class DataOutputStream {

      public static void main(String[] args) throws Exception {

      Configuration conf = new Configuration();

      //設(shè)置 hdfs 地址 conf ?用戶名稱

      FileSystem fs = FileSystem.get(new URI("hdfs://192.168.1.101:9000"), conf, "hadoop");

      //文件路徑

      Path path = new Path("/input/write.txt");

      //字符

      byte[] buff = "hello world".getBytes();

      FSDataOutputStream dos = fs.create(path);

      dos.write(buff);

      dos.close();

      fs.close();

      }

      }

      數(shù)據(jù)容錯(cuò)

      數(shù)據(jù)節(jié)點(diǎn)

      每個(gè)DataNode節(jié)點(diǎn)定期向NameNode發(fā)送心跳信號(hào),網(wǎng)絡(luò)割裂會(huì)導(dǎo)致DataNode和NameNode失去聯(lián)系,NameNode通過心跳信號(hào)的缺失來檢測(cè)DataNode是否宕機(jī)。當(dāng)DataNode宕機(jī)時(shí)不再將新的I/O請(qǐng)求發(fā)給他們。DataNode的宕機(jī)會(huì)導(dǎo)致數(shù)據(jù)塊的副本低于指定值,NameNode不斷檢測(cè)這些需要復(fù)制的數(shù)據(jù)塊,一旦發(fā)現(xiàn)低于設(shè)定副本數(shù)就啟動(dòng)復(fù)制操作。在某個(gè)DataNode節(jié)點(diǎn)失效,或者文件的副本系數(shù)增大時(shí)都可能需要重新復(fù)制。

      名稱節(jié)點(diǎn)

      名稱節(jié)點(diǎn)保存了所有的元數(shù)據(jù)信息,其中最核心的兩大數(shù)據(jù)時(shí)fsimage和edits.logs,如果這兩個(gè)文件損壞,那么整個(gè)HDFS實(shí)例失效。Hadoop采用了兩種機(jī)制來確保名稱節(jié)點(diǎn)安全。

      把名稱節(jié)點(diǎn)上的元數(shù)據(jù)同步到其他的文件系統(tǒng)比如(遠(yuǎn)程掛載的網(wǎng)絡(luò)文件系統(tǒng)NFS)

      運(yùn)行一個(gè)第二名稱節(jié)點(diǎn)SecondaryNameNode當(dāng)名稱節(jié)點(diǎn)宕機(jī)后,可以使用第二名稱節(jié)點(diǎn)元數(shù)據(jù)進(jìn)行數(shù)據(jù)恢復(fù),但會(huì)丟失一部分?jǐn)?shù)據(jù)。

      因此會(huì)把兩種方式結(jié)合起來一起使用,當(dāng)名稱節(jié)點(diǎn)發(fā)生宕機(jī)的時(shí)候,首先到遠(yuǎn)程掛載的網(wǎng)絡(luò)文件系統(tǒng)中獲取備份的元數(shù)據(jù)信息,放到第二名稱節(jié)點(diǎn)上進(jìn)行恢復(fù)并把第二名稱節(jié)點(diǎn)作為名稱節(jié)點(diǎn)來使用。

      數(shù)據(jù)出錯(cuò)

      某個(gè)DataNode獲取的數(shù)據(jù)塊可能是損壞的,損壞可能是由DataNode的存儲(chǔ)設(shè)備錯(cuò)誤,網(wǎng)絡(luò)錯(cuò)誤或者軟件bug造成的。HDFS使用校驗(yàn)和判斷數(shù)據(jù)塊是否損壞。當(dāng)客戶端創(chuàng)建一個(gè)新的HDFS會(huì)計(jì)算這個(gè)每個(gè)數(shù)據(jù)塊的校驗(yàn)和。并將校驗(yàn)和作為一個(gè)單獨(dú)的隱藏文件保存在同一個(gè)HDFS命名空間下。當(dāng)客戶端獲取文件內(nèi)容后,它會(huì)檢驗(yàn)從DataNode獲取的數(shù)據(jù)和對(duì)應(yīng)的校驗(yàn)是否匹配,如果不匹配客戶端從其他Datanode獲取該數(shù)據(jù)塊的副本。HDFS的每個(gè)DataNode還保存了檢查校驗(yàn)和日志,客戶端的每一次檢驗(yàn)都會(huì)記錄到日志中。

      分布式 Hadoop

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Excel如何設(shè)置減少加載項(xiàng)?Excel設(shè)置減少加載項(xiàng)教程
      下一篇:外賣訂單取消處理流程(外賣取消訂單怎么處理)
      相關(guān)文章
      亚洲成av人片天堂网| 亚洲精品中文字幕乱码| 亚洲欧洲无码AV电影在线观看 | 亚洲偷自拍拍综合网| 久久水蜜桃亚洲AV无码精品| 亚洲欧美日韩中文二区| 亚洲精品美女久久久久| 日木av无码专区亚洲av毛片| 精品亚洲A∨无码一区二区三区| 亚洲伦理一区二区| 亚洲高清视频免费| 亚洲天堂一区二区三区四区| 91亚洲自偷在线观看国产馆| 亚洲综合图片小说区热久久| 亚洲黄色免费电影| 亚洲区视频在线观看| 久久久久se色偷偷亚洲精品av| 亚洲人成电影网站久久| 亚洲熟女乱色一区二区三区 | 香蕉大伊亚洲人在线观看| 亚洲高清视频在线| 亚洲欧美国产精品专区久久| 久久精品国产亚洲av品善| 亚洲AV无码不卡在线观看下载| 亚洲日本一区二区一本一道| 国产亚洲?V无码?V男人的天堂| 亚洲色无码一区二区三区| 亚洲AV无码乱码在线观看富二代| 日产亚洲一区二区三区| 亚洲理论片在线中文字幕| 亚洲五月综合网色九月色| 亚洲中文字幕无码久久2020| 亚洲AV色无码乱码在线观看| 午夜亚洲国产理论片二级港台二级 | 久久精品亚洲精品国产色婷| 亚洲国产综合精品| 亚洲色少妇熟女11p| 四虎精品亚洲一区二区三区| 伊人久久大香线蕉亚洲五月天| 亚洲AV无码一区东京热久久 | 国产精品亚洲一区二区无码|