日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

分布式计算开源框架Hadoop入门实践

發(fā)布時(shí)間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式计算开源框架Hadoop入门实践 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在SIP項(xiàng)目設(shè)計(jì)的過(guò)程中,對(duì)于它龐大的日志在開(kāi)始時(shí)就考慮使用任務(wù)分解的多線程處理模式來(lái)分析統(tǒng)計(jì),在我從前寫的文章《Tiger Concurrent Practice --日志分析并行分解設(shè)計(jì)與實(shí)現(xiàn)》中有所提到。但是由于統(tǒng)計(jì)的內(nèi)容暫時(shí)還是十分簡(jiǎn)單,所以就采用Memcache作為計(jì)數(shù)器,結(jié)合MySQL就完成了訪問(wèn)控制以及統(tǒng)計(jì)的工作。然而未來(lái),對(duì)于海量日志分析的工作,還是需要有所準(zhǔn)備。現(xiàn)在最火的技術(shù)詞匯莫過(guò)于“云計(jì)算”,在Open API日益盛行的今天,互聯(lián)網(wǎng)應(yīng)用的數(shù)據(jù)將會(huì)越來(lái)越有價(jià)值,如何去分析這些數(shù)據(jù),挖掘其內(nèi)在價(jià)值,就需要分布式計(jì)算來(lái)支撐海量數(shù)據(jù)的分析工作。

  回過(guò)頭來(lái)看,早先那種多線程,多任務(wù)分解的日志分析設(shè)計(jì),其實(shí)是分布式計(jì)算的一個(gè)單機(jī)版縮略,如何將這種單機(jī)的工作進(jìn)行分拆,變成協(xié)同工作的集群,其實(shí)就是分布式計(jì)算框架設(shè)計(jì)所涉及的。在去年參加BEA大會(huì)的時(shí)候,BEA和VMWare合作采用虛擬機(jī)來(lái)構(gòu)建集群,無(wú)非就是希望使得計(jì)算機(jī)硬件能夠類似于應(yīng)用程序中資源池的資源,使用者無(wú)需關(guān)心資源的分配情況,從而最大化了硬件資源的使用價(jià)值。分布式計(jì)算也是如此,具體的計(jì)算任務(wù)交由哪一臺(tái)機(jī)器執(zhí)行,執(zhí)行后由誰(shuí)來(lái)匯總,這都由分布式框架的Master來(lái)抉擇,而使用者只需簡(jiǎn)單地將待分析內(nèi)容提供給分布式計(jì)算系統(tǒng)作為輸入,就可以得到分布式計(jì)算后的結(jié)果。

  Hadoop是Apache開(kāi)源組織的一個(gè)分布式計(jì)算開(kāi)源框架,在很多大型網(wǎng)站上都已經(jīng)得到了應(yīng)用,如亞馬遜、Facebook和Yahoo等等。對(duì)于我來(lái)說(shuō),最近的一個(gè)使用點(diǎn)就是服務(wù)集成平臺(tái)的日志分析。服務(wù)集成平臺(tái)的日志量將會(huì)很大,而這也正好符合了分布式計(jì)算的適用場(chǎng)景(日志分析和索引建立就是兩大應(yīng)用場(chǎng)景)。

  當(dāng)前沒(méi)有正式確定使用,所以也是自己業(yè)余摸索,后續(xù)所寫的相關(guān)內(nèi)容,都是一個(gè)新手的學(xué)習(xí)過(guò)程,難免會(huì)有一些錯(cuò)誤,只是希望記錄下來(lái)可以分享給更多志同道合的朋友。

 什么是Hadoop?

  搞什么東西之前,第一步是要知道What(是什么),然后是Why(為什么),最后才是How(怎么做)。但很多開(kāi)發(fā)的朋友在做了多年項(xiàng)目以后,都習(xí)慣是先How,然后What,最后才是Why,這樣只會(huì)讓自己變得浮躁,同時(shí)往往會(huì)將技術(shù)誤用于不適合的場(chǎng)景。

  Hadoop框架中最核心的設(shè)計(jì)就是:MapReduce和HDFS。MapReduce的思想是由Google的一篇論文所提及而被廣為流傳的,簡(jiǎn)單的一句話解釋MapReduce就是“任務(wù)的分解與結(jié)果的匯總”。HDFS是Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System)的縮寫,為分布式計(jì)算存儲(chǔ)提供了底層支持。

  MapReduce從它名字上來(lái)看就大致可以看出個(gè)緣由,兩個(gè)動(dòng)詞Map和Reduce,“Map(展開(kāi))”就是將一個(gè)任務(wù)分解成為多個(gè)任務(wù),“Reduce”就是將分解后多任務(wù)處理的結(jié)果匯總起來(lái),得出最后的分析結(jié)果。這不是什么新思想,其實(shí)在前面提到的多線程,多任務(wù)的設(shè)計(jì)就可以找到這種思想的影子。不論是現(xiàn)實(shí)社會(huì),還是在程序設(shè)計(jì)中,一項(xiàng)工作往往可以被拆分成為多個(gè)任務(wù),任務(wù)之間的關(guān)系可以分為兩種:一種是不相關(guān)的任務(wù),可以并行執(zhí)行;另一種是任務(wù)之間有相互的依賴,先后順序不能夠顛倒,這類任務(wù)是無(wú)法并行處理的。回到大學(xué)時(shí)期,教授上課時(shí)讓大家去分析關(guān)鍵路徑,無(wú)非就是找最省時(shí)的任務(wù)分解執(zhí)行方式。在分布式系統(tǒng)中,機(jī)器集群就可以看作硬件資源池,將并行的任務(wù)拆分,然后交由每一個(gè)空閑機(jī)器資源去處理,能夠極大地提高計(jì)算效率,同時(shí)這種資源無(wú)關(guān)性,對(duì)于計(jì)算集群的擴(kuò)展無(wú)疑提供了最好的設(shè)計(jì)保證。(其實(shí)我一直認(rèn)為Hadoop的卡通圖標(biāo)不應(yīng)該是一個(gè)小象,應(yīng)該是螞蟻,分布式計(jì)算就好比螞蟻吃大象,廉價(jià)的機(jī)器群可以匹敵任何高性能的計(jì)算機(jī),縱向擴(kuò)展的曲線始終敵不過(guò)橫向擴(kuò)展的斜線)。任務(wù)分解處理以后,那就需要將處理以后的結(jié)果再匯總起來(lái),這就是Reduce要做的工作。

圖1:MapReduce結(jié)構(gòu)示意圖

  上圖就是MapReduce大致的結(jié)構(gòu)圖,在Map前還可能會(huì)對(duì)輸入的數(shù)據(jù)有Split(分割)的過(guò)程,保證任務(wù)并行效率,在Map之后還會(huì)有Shuffle(混合)的過(guò)程,對(duì)于提高Reduce的效率以及減小數(shù)據(jù)傳輸?shù)膲毫τ泻艽蟮膸椭:竺鏁?huì)具體提及這些部分的細(xì)節(jié)。

  HDFS是分布式計(jì)算的存儲(chǔ)基石,Hadoop的分布式文件系統(tǒng)和其他分布式文件系統(tǒng)有很多類似的特質(zhì)。分布式文件系統(tǒng)基本的幾個(gè)特點(diǎn):

  對(duì)于整個(gè)集群有單一的命名空間。

  數(shù)據(jù)一致性。適合一次寫入多次讀取的模型,客戶端在文件沒(méi)有被成功創(chuàng)建之前無(wú)法看到文件存在。

  文件會(huì)被分割成多個(gè)文件塊,每個(gè)文件塊被分配存儲(chǔ)到數(shù)據(jù)節(jié)點(diǎn)上,而且根據(jù)配置會(huì)由復(fù)制文件塊來(lái)保證數(shù)據(jù)的安全性。

圖2:HDFS結(jié)構(gòu)示意圖

  上圖中展現(xiàn)了整個(gè)HDFS三個(gè)重要角色:NameNode、DataNode和Client。NameNode可以看作是分布式文件系統(tǒng)中的管理者,主要負(fù)責(zé)管理文件系統(tǒng)的命名空間、集群配置信息和存儲(chǔ)塊的復(fù)制等。NameNode會(huì)將文件系統(tǒng)的Meta-data存儲(chǔ)在內(nèi)存中,這些信息主要包括了文件信息、每一個(gè)文件對(duì)應(yīng)的文件塊的信息和每一個(gè)文件塊在DataNode的信息等。DataNode是文件存儲(chǔ)的基本單元,它將Block存儲(chǔ)在本地文件系統(tǒng)中,保存了Block的Meta-data,同時(shí)周期性地將所有存在的Block信息發(fā)送給NameNode。Client就是需要獲取分布式文件系統(tǒng)文件的應(yīng)用程序。這里通過(guò)三個(gè)操作來(lái)說(shuō)明他們之間的交互關(guān)系。

文件寫入:

  Client向NameNode發(fā)起文件寫入的請(qǐng)求。

  NameNode根據(jù)文件大小和文件塊配置情況,返回給Client它所管理部分DataNode的信息。

  Client將文件劃分為多個(gè)Block,根據(jù)DataNode的地址信息,按順序?qū)懭氲矫恳粋€(gè)DataNode塊中。

  文件讀取:

  Client向NameNode發(fā)起文件讀取的請(qǐng)求。

  NameNode返回文件存儲(chǔ)的DataNode的信息。

  Client讀取文件信息。

  文件Block復(fù)制:

  NameNode發(fā)現(xiàn)部分文件的Block不符合最小復(fù)制數(shù)或者部分DataNode失效。

  通知DataNode相互復(fù)制Block。

  DataNode開(kāi)始直接相互復(fù)制。

  最后再說(shuō)一下HDFS的幾個(gè)設(shè)計(jì)特點(diǎn)(對(duì)于框架設(shè)計(jì)值得借鑒):

  Block的放置:默認(rèn)不配置。一個(gè)Block會(huì)有三份備份,一份放在NameNode指定的DataNode,另一份放在與指定DataNode非同一Rack上的DataNode,最后一份放在與指定DataNode同一Rack上的DataNode上。備份無(wú)非就是為了數(shù)據(jù)安全,考慮同一Rack的失敗情況以及不同Rack之間數(shù)據(jù)拷貝性能問(wèn)題就采用這種配置方式。

  心跳檢測(cè)DataNode的健康狀況,如果發(fā)現(xiàn)問(wèn)題就采取數(shù)據(jù)備份的方式來(lái)保證數(shù)據(jù)的安全性。

  數(shù)據(jù)復(fù)制(場(chǎng)景為DataNode失敗、需要平衡DataNode的存儲(chǔ)利用率和需要平衡DataNode數(shù)據(jù)交互壓力等情況):這里先說(shuō)一下,使用HDFS的balancer命令,可以配置一個(gè)Threshold來(lái)平衡每一個(gè)DataNode磁盤利用率。例如設(shè)置了Threshold為10%,那么執(zhí)行balancer命令的時(shí)候,首先統(tǒng)計(jì)所有DataNode的磁盤利用率的均值,然后判斷如果某一個(gè)DataNode的磁盤利用率超過(guò)這個(gè)均值Threshold以上,那么將會(huì)把這個(gè)DataNode的block轉(zhuǎn)移到磁盤利用率低的DataNode,這對(duì)于新節(jié)點(diǎn)的加入來(lái)說(shuō)十分有用。

  數(shù)據(jù)交驗(yàn):采用CRC32作數(shù)據(jù)交驗(yàn)。在文件Block寫入的時(shí)候除了寫入數(shù)據(jù)還會(huì)寫入交驗(yàn)信息,在讀取的時(shí)候需要交驗(yàn)后再讀入。

  NameNode是單點(diǎn):如果失敗的話,任務(wù)處理信息將會(huì)紀(jì)錄在本地文件系統(tǒng)和遠(yuǎn)端的文件系統(tǒng)中。

  數(shù)據(jù)管道性的寫入:當(dāng)客戶端要寫入文件到DataNode上,首先客戶端讀取一個(gè)Block然后寫到第一個(gè)DataNode上,然后由第一個(gè)DataNode傳遞到備份的DataNode上,一直到所有需要寫入這個(gè)Block的NataNode都成功寫入,客戶端才會(huì)繼續(xù)開(kāi)始寫下一個(gè)Block。

  安全模式:在分布式文件系統(tǒng)啟動(dòng)的時(shí)候,開(kāi)始的時(shí)候會(huì)有安全模式,當(dāng)分布式文件系統(tǒng)處于安全模式的情況下,文件系統(tǒng)中的內(nèi)容不允許修改也不允許刪除,直到安全模式結(jié)束。安全模式主要是為了系統(tǒng)啟動(dòng)的時(shí)候檢查各個(gè)DataNode上數(shù)據(jù)塊的有效性,同時(shí)根據(jù)策略必要的復(fù)制或者刪除部分?jǐn)?shù)據(jù)塊。運(yùn)行期通過(guò)命令也可以進(jìn)入安全模式。在實(shí)踐過(guò)程中,系統(tǒng)啟動(dòng)的時(shí)候去修改和刪除文件也會(huì)有安全模式不允許修改的出錯(cuò)提示,只需要等待一會(huì)兒即可。

  下面綜合MapReduce和HDFS來(lái)看Hadoop的結(jié)構(gòu):

圖3:Hadoop結(jié)構(gòu)示意圖

  在Hadoop的系統(tǒng)中,會(huì)有一臺(tái)Master,主要負(fù)責(zé)NameNode的工作以及JobTracker的工作。JobTracker的主要職責(zé)就是啟動(dòng)、跟蹤和調(diào)度各個(gè)Slave的任務(wù)執(zhí)行。還會(huì)有多臺(tái)Slave,每一臺(tái)Slave通常具有DataNode的功能并負(fù)責(zé)TaskTracker的工作。TaskTracker根據(jù)應(yīng)用要求來(lái)結(jié)合本地?cái)?shù)據(jù)執(zhí)行Map任務(wù)以及Reduce任務(wù)。

  說(shuō)到這里,就要提到分布式計(jì)算最重要的一個(gè)設(shè)計(jì)點(diǎn):Moving Computation is Cheaper than Moving Data。就是在分布式處理中,移動(dòng)數(shù)據(jù)的代價(jià)總是高于轉(zhuǎn)移計(jì)算的代價(jià)。簡(jiǎn)單來(lái)說(shuō)就是分而治之的工作,需要將數(shù)據(jù)也分而存儲(chǔ),本地任務(wù)處理本地?cái)?shù)據(jù)然后歸總,這樣才會(huì)保證分布式計(jì)算的高效性。

  為什么要選擇Hadoop?

  說(shuō)完了What,簡(jiǎn)單地說(shuō)一下Why。官方網(wǎng)站已經(jīng)給了很多的說(shuō)明,這里就大致說(shuō)一下其優(yōu)點(diǎn)及使用的場(chǎng)景(沒(méi)有不好的工具,只用不適用的工具,因此選擇好場(chǎng)景才能夠真正發(fā)揮分布式計(jì)算的作用):

  可擴(kuò)展:不論是存儲(chǔ)的可擴(kuò)展還是計(jì)算的可擴(kuò)展都是Hadoop的設(shè)計(jì)根本。

  經(jīng)濟(jì):框架可以運(yùn)行在任何普通的PC上。

  可靠:分布式文件系統(tǒng)的備份恢復(fù)機(jī)制以及MapReduce的任務(wù)監(jiān)控保證了分布式處理的可靠性。

  高效:分布式文件系統(tǒng)的高效數(shù)據(jù)交互實(shí)現(xiàn)以及MapReduce結(jié)合Local Data處理的模式,為高效處理海量的信息作了基礎(chǔ)準(zhǔn)備。

  使用場(chǎng)景:個(gè)人覺(jué)得最適合的就是海量數(shù)據(jù)的分析,其實(shí)Google最早提出MapReduce也就是為了海量數(shù)據(jù)分析。同時(shí)HDFS最早是為了搜索引擎實(shí)現(xiàn)而開(kāi)發(fā)的,后來(lái)才被用于分布式計(jì)算框架中。海量數(shù)據(jù)被分割于多個(gè)節(jié)點(diǎn),然后由每一個(gè)節(jié)點(diǎn)并行計(jì)算,將得出的結(jié)果歸并到輸出。同時(shí)第一階段的輸出又可以作為下一階段計(jì)算的輸入,因此可以想象到一個(gè)樹狀結(jié)構(gòu)的分布式計(jì)算圖,在不同階段都有不同產(chǎn)出,同時(shí)并行和串行結(jié)合的計(jì)算也可以很好地在分布式集群的資源下得以高效的處理。

其實(shí)參看Hadoop官方文檔已經(jīng)能夠很容易配置分布式框架運(yùn)行環(huán)境了,不過(guò)這里既然寫了就再多寫一點(diǎn),同時(shí)有一些細(xì)節(jié)需要注意的也說(shuō)明一下,其實(shí)也就是這些細(xì)節(jié)會(huì)讓人摸索半天。Hadoop可以單機(jī)跑,也可以配置集群跑,單機(jī)跑就不需要多說(shuō)了,只需要按照Demo的運(yùn)行說(shuō)明直接執(zhí)行命令即可。這里主要重點(diǎn)說(shuō)一下集群配置運(yùn)行的過(guò)程。

  環(huán)境

  7臺(tái)普通的機(jī)器,操作系統(tǒng)都是Linux。內(nèi)存和CPU就不說(shuō)了,反正Hadoop一大特點(diǎn)就是機(jī)器在多不在精。JDK必須是1.5以上的,這個(gè)切記。7臺(tái)機(jī)器的機(jī)器名務(wù)必不同,后續(xù)會(huì)談到機(jī)器名對(duì)于MapReduce有很大的影響。

  部署考慮

  正如上面我描述的,對(duì)于Hadoop的集群來(lái)說(shuō),可以分成兩大類角色:Master和Slave,前者主要配置NameNode和JobTracker的角色,負(fù)責(zé)總管分布式數(shù)據(jù)和分解任務(wù)的執(zhí)行,后者配置DataNode和TaskTracker的角色,負(fù)責(zé)分布式數(shù)據(jù)存儲(chǔ)以及任務(wù)的執(zhí)行。本來(lái)我打算看看一臺(tái)機(jī)器是否可以配置成Master,同時(shí)也作為Slave使用,不過(guò)發(fā)現(xiàn)在NameNode初始化的過(guò)程中以及TaskTracker執(zhí)行過(guò)程中機(jī)器名配置好像有沖突(NameNode和TaskTracker對(duì)于Hosts的配置有些沖突,究竟是把機(jī)器名對(duì)應(yīng)IP放在配置前面還是把Localhost對(duì)應(yīng)IP放在前面有點(diǎn)問(wèn)題,不過(guò)可能也是我自己的問(wèn)題吧,這個(gè)大家可以根據(jù)實(shí)施情況給我反饋)。最后反正決定一臺(tái)Master,六臺(tái)Slave,后續(xù)復(fù)雜的應(yīng)用開(kāi)發(fā)和測(cè)試結(jié)果的比對(duì)會(huì)增加機(jī)器配置。

  實(shí)施步驟

  在所有的機(jī)器上都建立相同的目錄,也可以就建立相同的用戶,以該用戶的home路徑來(lái)做hadoop的安裝路徑。例如我在所有的機(jī)器上都建立了/home/wenchu。

  下載Hadoop,先解壓到Master上。這里我是下載的0.17.1的版本。此時(shí)Hadoop的安裝路徑就是/home/wenchu/hadoop-0.17.1。

 解壓后進(jìn)入conf目錄,主要需要修改以下文件:hadoop-env.sh,hadoop-site.xml、masters、slaves。

  Hadoop的基礎(chǔ)配置文件是hadoop-default.xml,看Hadoop的代碼可以知道,默認(rèn)建立一個(gè)Job的時(shí)候會(huì)建立Job的Config,Config首先讀入hadoop-default.xml的配置,然后再讀入hadoop-site.xml的配置(這個(gè)文件初始的時(shí)候配置為空),hadoop-site.xml中主要配置你需要覆蓋的hadoop-default.xml的系統(tǒng)級(jí)配置,以及你需要在你的MapReduce過(guò)程中使用的自定義配置(具體的一些使用例如final等參考文檔)。

  以下是一個(gè)簡(jiǎn)單的hadoop-site.xml的配置:

DE><?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
  <name>fs.default.name</name>//你的namenode的配置,機(jī)器名加端口
  <value>hdfs://10.2.224.46:54310/</value>
</property>
<property>
  <name>mapred.job.tracker</name>//你的JobTracker的配置,機(jī)器名加端口
  <value>hdfs://10.2.224.46:54311/</value>
</property>
<property>
  <name>dfs.replication</name>//數(shù)據(jù)需要備份的數(shù)量,默認(rèn)是三
  <value>1</value>
</property>
<property>
  <name>hadoop.tmp.dir</name>//Hadoop的默認(rèn)臨時(shí)路徑,這個(gè)最好配置,如果在新增節(jié)點(diǎn)或者其他情況下莫名其妙的DataNode啟動(dòng)不了,就刪除此文件中的tmp目錄即可。不過(guò)如果刪除了NameNode機(jī)器的此目錄,那么就需要重新執(zhí)行NameNode格式化的命令。
  <value>/home/wenchu/hadoop/tmp/</value>
</property>
<property>
  <name>mapred.child.java.opts</name>//java虛擬機(jī)的一些參數(shù)可以參照配置
  <value>-Xmx512m</value>
</property>
<property>
 <name>dfs.block.size</name>//block的大小,單位字節(jié),后面會(huì)提到用處,必須是512的倍數(shù),因?yàn)椴捎胏rc作文件完整性校驗(yàn),默認(rèn)配置512是checksum的最小單元。
 <value>5120000</value>
 <description>The default block size for new files.</description>
</property>
</configuration>DE>

  hadoop-env.sh文件只需要修改一個(gè)參數(shù):

DE># The java implementation to use. Required.
export JAVA_HOME=/usr/ali/jdk1.5.0_10DE>

  配置你的Java路徑,記住一定要1.5版本以上,免得莫名其妙出現(xiàn)問(wèn)題。

  Masters中配置Masters的IP或者機(jī)器名,如果是機(jī)器名那么需要在/etc/hosts中有所設(shè)置。Slaves中配置的是Slaves的IP或者機(jī)器名,同樣如果是機(jī)器名需要在/etc/hosts中有所設(shè)置。范例如下,我這里配置的都是IP:

DE>Masters:
10.2.224.46
 Slaves:
10.2.226.40
10.2.226.39
10.2.226.38
10.2.226.37
10.2.226.41
10.2.224.36DE>

  建立Master到每一臺(tái)Slave的SSH受信證書。由于Master將會(huì)通過(guò)SSH啟動(dòng)所有Slave的Hadoop,所以需要建立單向或者雙向證書保證命令執(zhí)行時(shí)不需要再輸入密碼。在Master和所有的Slave機(jī)器上執(zhí)行:ssh-keygen -t rsa。執(zhí)行此命令的時(shí)候,看到提示只需要回車。然后就會(huì)在/root/.ssh/下面產(chǎn)生id_rsa.pub的證書文件,通過(guò)scp將Master機(jī)器上的這個(gè)文件拷貝到Slave上(記得修改名稱),例如:scp root@masterIP:/root/.ssh/id_rsa.pub /root/.ssh/46_rsa.pub,然后執(zhí)行cat /root/.ssh/46_rsa.pub >>/root/.ssh/authorized_keys,建立authorized_keys文件即可,可以打開(kāi)這個(gè)文件看看,也就是rsa的公鑰作為key,user@IP作為value。此時(shí)可以試驗(yàn)一下,從master ssh到slave已經(jīng)不需要密碼了。由slave反向建立也是同樣。為什么要反向呢?其實(shí)如果一直都是Master啟動(dòng)和關(guān)閉的話那么沒(méi)有必要建立反向,只是如果想在Slave也可以關(guān)閉Hadoop就需要建立反向。

  將Master上的Hadoop通過(guò)scp拷貝到每一個(gè)Slave相同的目錄下,根據(jù)每一個(gè)Slave的Java_HOME的不同修改其hadoop-env.sh。

 修改Master上/etc/profile:

  新增以下內(nèi)容:(具體的內(nèi)容根據(jù)你的安裝路徑修改,這步只是為了方便使用)

DE>export HADOOP_HOME=/home/wenchu/hadoop-0.17.1
export PATH=$PATH:$HADOOP_HOME/binDE>修改完畢后,執(zhí)行source /etc/profile來(lái)使其生效。

  在Master上執(zhí)行Hadoop namenode –format,這是第一需要做的初始化,可以看作格式化吧,以后除了在上面我提到過(guò)刪除了Master上的hadoop.tmp.dir目錄,否則是不需要再次執(zhí)行的。

  然后執(zhí)行Master上的start-all.sh,這個(gè)命令可以直接執(zhí)行,因?yàn)樵?中已經(jīng)添加到了path路徑,這個(gè)命令是啟動(dòng)hdfs和mapreduce兩部分,當(dāng)然你也可以分開(kāi)單獨(dú)啟動(dòng)hdfs和mapreduce,分別是bin目錄下的start-dfs.sh和start-mapred.sh。

  檢查Master的logs目錄,看看Namenode日志以及JobTracker日志是否正常啟動(dòng)。

  檢查Slave的logs目錄看看Datanode日志以及TaskTracker日志是否正常。

  如果需要關(guān)閉,那么就直接執(zhí)行stop-all.sh即可。

  以上步驟就可以啟動(dòng)Hadoop的分布式環(huán)境,然后在Master的機(jī)器進(jìn)入Master的安裝目錄,執(zhí)行hadoop jar hadoop-0.17.1-examples.jar wordcount輸入路徑和輸出路徑,就可以看到字?jǐn)?shù)統(tǒng)計(jì)的效果了。此處的輸入路徑和輸出路徑都指的是HDFS中的路徑,因此你可以首先通過(guò)拷貝本地文件系統(tǒng)中的目錄到HDFS中的方式來(lái)建立HDFS中的輸入路徑:

  hadoop dfs -copyFromLocal /home/wenchu/test-in test-in。其中/home/wenchu/test-in是本地路徑,test-in是將會(huì)建立在HDFS中的路徑,執(zhí)行完畢以后可以通過(guò)hadoop dfs –ls看到test-in目錄已經(jīng)存在,同時(shí)可以通過(guò)hadoop dfs –ls test-in查看里面的內(nèi)容。輸出路徑要求是在HDFS中不存在的,當(dāng)執(zhí)行完那個(gè)demo以后,就可以通過(guò)hadoop dfs –ls 輸出路徑看到其中的內(nèi)容,具體文件的內(nèi)容可以通過(guò)hadoop dfs –cat文件名稱來(lái)查看。

 經(jīng)驗(yàn)總結(jié)和注意事項(xiàng)(這部分是我在使用過(guò)程中花了一些時(shí)間走的彎路):

  Master和Slave上的幾個(gè)conf配置文件不需要全部同步,如果確定都是通過(guò)Master去啟動(dòng)和關(guān)閉,那么Slave機(jī)器上的配置不需要去維護(hù)。但如果希望在任意一臺(tái)機(jī)器都可以啟動(dòng)和關(guān)閉Hadoop,那么就需要全部保持一致了。

  Master和Slave機(jī)器上的/etc/hosts中必須把集群中機(jī)器都配置上去,就算在各個(gè)配置文件中使用的是IP。這個(gè)吃過(guò)不少苦頭,原來(lái)以為如果配成IP就不需要去配置Host,結(jié)果發(fā)現(xiàn)在執(zhí)行Reduce的時(shí)候總是卡住,在拷貝的時(shí)候就無(wú)法繼續(xù)下去,不斷重試。另外如果集群中如果有兩臺(tái)機(jī)器的機(jī)器名如果重復(fù)也會(huì)出現(xiàn)問(wèn)題。

  如果在新增了節(jié)點(diǎn)或者刪除節(jié)點(diǎn)的時(shí)候出現(xiàn)了問(wèn)題,首先就去刪除Slave的hadoop.tmp.dir,然后重新啟動(dòng)試試看,如果還是不行那就干脆把Master的hadoop.tmp.dir刪除(意味著dfs上的數(shù)據(jù)也會(huì)丟失),如果刪除了Master的hadoop.tmp.dir,那么就需要重新namenode –format。

  Map任務(wù)個(gè)數(shù)以及Reduce任務(wù)個(gè)數(shù)配置。前面分布式文件系統(tǒng)設(shè)計(jì)提到一個(gè)文件被放入到分布式文件系統(tǒng)中,會(huì)被分割成多個(gè)block放置到每一個(gè)的DataNode上,默認(rèn)dfs.block.size應(yīng)該是64M,也就是說(shuō)如果你放置到HDFS上的數(shù)據(jù)小于64,那么將只有一個(gè)Block,此時(shí)會(huì)被放置到某一個(gè)DataNode中,這個(gè)可以通過(guò)使用命令:hadoop dfsadmin –report就可以看到各個(gè)節(jié)點(diǎn)存儲(chǔ)的情況。也可以直接去某一個(gè)DataNode查看目錄:hadoop.tmp.dir/dfs/data/current就可以看到那些block了。Block的數(shù)量將會(huì)直接影響到Map的個(gè)數(shù)。當(dāng)然可以通過(guò)配置來(lái)設(shè)定Map和Reduce的任務(wù)個(gè)數(shù)。Map的個(gè)數(shù)通常默認(rèn)和HDFS需要處理的blocks相同。也可以通過(guò)配置Map的數(shù)量或者配置minimum split size來(lái)設(shè)定,實(shí)際的個(gè)數(shù)為:max(min(block_size,data/#maps),min_split_size)。Reduce可以通過(guò)這個(gè)公式計(jì)算:0.95*num_nodes*mapred.tasktracker.tasks.maximum。

  總的來(lái)說(shuō)出了問(wèn)題或者啟動(dòng)的時(shí)候最好去看看日志,這樣心里有底。

  Hadoop中的命令(Command)總結(jié)

  這部分內(nèi)容其實(shí)可以通過(guò)命令的Help以及介紹了解,我主要側(cè)重于介紹一下我用的比較多的幾個(gè)命令。Hadoop dfs 這個(gè)命令后面加參數(shù)就是對(duì)于HDFS的操作,和Linux操作系統(tǒng)的命令很類似,例如:

  Hadoop dfs –ls就是查看/usr/root目錄下的內(nèi)容,默認(rèn)如果不填路徑這就是當(dāng)前用戶路徑;

  Hadoop dfs –rmr xxx就是刪除目錄,還有很多命令看看就很容易上手;

  Hadoop dfsadmin –report這個(gè)命令可以全局的查看DataNode的情況;

  Hadoop job后面增加參數(shù)是對(duì)于當(dāng)前運(yùn)行的Job的操作,例如list,kill等;

  Hadoop balancer就是前面提到的均衡磁盤負(fù)載的命令。

  其他就不詳細(xì)介紹了。

Hadoop基本流程

根據(jù)流程圖來(lái)說(shuō)一下具體一個(gè)任務(wù)執(zhí)行的情況。

  在分布式環(huán)境中客戶端創(chuàng)建任務(wù)并提交。

  InputFormat做Map前的預(yù)處理,主要負(fù)責(zé)以下工作:

  驗(yàn)證輸入的格式是否符合JobConfig的輸入定義,這個(gè)在實(shí)現(xiàn)Map和構(gòu)建Conf的時(shí)候就會(huì)知道,不定義可以是Writable的任意子類。

  將input的文件切分為邏輯上的輸入InputSplit,其實(shí)這就是在上面提到的在分布式文件系統(tǒng)中blocksize是有大小限制的,因此大文件會(huì)被劃分為多個(gè)block。

  通過(guò)RecordReader來(lái)再次處理inputsplit為一組records,輸出給Map。(inputsplit只是邏輯切分的第一步,但是如何根據(jù)文件中的信息來(lái)切分還需要RecordReader來(lái)實(shí)現(xiàn),例如最簡(jiǎn)單的默認(rèn)方式就是回車換行的切分)

  RecordReader處理后的結(jié)果作為Map的輸入,Map執(zhí)行定義的Map邏輯,輸出處理后的key和value對(duì)應(yīng)到臨時(shí)中間文件。

  Combiner可選擇配置,主要作用是在每一個(gè)Map執(zhí)行完分析以后,在本地優(yōu)先作Reduce的工作,減少在Reduce過(guò)程中的數(shù)據(jù)傳輸量。

  Partitioner可選擇配置,主要作用是在多個(gè)Reduce的情況下,指定Map的結(jié)果由某一個(gè)Reduce處理,每一個(gè)Reduce都會(huì)有單獨(dú)的輸出文件。(后面的代碼實(shí)例中有介紹使用場(chǎng)景)

  Reduce執(zhí)行具體的業(yè)務(wù)邏輯,并且將處理結(jié)果輸出給OutputFormat。

  OutputFormat的職責(zé)是,驗(yàn)證輸出目錄是否已經(jīng)存在,同時(shí)驗(yàn)證輸出結(jié)果類型是否如Config中配置,最后輸出Reduce匯總后的結(jié)果。

  業(yè)務(wù)場(chǎng)景和代碼范例

  業(yè)務(wù)場(chǎng)景描述:可設(shè)定輸入和輸出路徑(操作系統(tǒng)的路徑非HDFS路徑),根據(jù)訪問(wèn)日志分析某一個(gè)應(yīng)用訪問(wèn)某一個(gè)API的總次數(shù)和總流量,統(tǒng)計(jì)后分別輸出到兩個(gè)文件中。這里僅僅為了測(cè)試,沒(méi)有去細(xì)分很多類,將所有的類都?xì)w并于一個(gè)類便于說(shuō)明問(wèn)題。

?

測(cè)試代碼類圖

  LogAnalysiser就是主類,主要負(fù)責(zé)創(chuàng)建、提交任務(wù),并且輸出部分信息。內(nèi)部的幾個(gè)子類用途可以參看流程中提到的角色職責(zé)。具體地看看幾個(gè)類和方法的代碼片斷:

  LogAnalysiser::MapClass

DE>  public static class MapClass extends MapReduceBase
    implements Mapper<LongWritable, Text, Text, LongWritable>
  {
    public void map(LongWritable key, Text value, OutputCollector<Text, LongWritable> output, Reporter reporter)
        throws IOException
    {  
      String line = value.toString();//沒(méi)有配置RecordReader,所以默認(rèn)采用line的實(shí)現(xiàn),key就是行號(hào),value就是行內(nèi)容
      if (line == null || line.equals(""))
        return;
      String[] words = line.split(",");
      if (words == null || words.length < 8)
        return;
      String appid = words[1];
      String apiName = words[2];
      LongWritable recbytes = new LongWritable(Long.parseLong(words[7]));
      Text record = new Text();
      record.set(new StringBuffer("flow::").append(appid)
              .append("::").append(apiName).toString());
      reporter.progress();
      output.collect(record, recbytes);//輸出流量的統(tǒng)計(jì)結(jié)果,通過(guò)flow::作為前綴來(lái)標(biāo)示。
      record.clear();
      record.set(new StringBuffer("count::").append(appid).append("::").append(apiName).toString());
      output.collect(record, new LongWritable(1));//輸出次數(shù)的統(tǒng)計(jì)結(jié)果,通過(guò)count::作為前綴來(lái)標(biāo)示
    }  
  }DE>

  LogAnalysiser:: PartitionerClass

DE>  public static class PartitionerClass implements Partitioner<Text, LongWritable>
  {
    public int getPartition(Text key, LongWritable value, int numPartitions)
    {
      if (numPartitions >= 2)//Reduce 個(gè)數(shù),判斷流量還是次數(shù)的統(tǒng)計(jì)分配到不同的Reduce
        if (key.toString().startsWith("flow::"))
          return 0;
        else
          return 1;
      else
        return 0;
    }
    public void configure(JobConf job){}  
}DE>

  LogAnalysiser:: CombinerClass

  參看ReduceClass,通常兩者可以使用一個(gè),不過(guò)這里有些不同的處理就分成了兩個(gè)。在ReduceClass中藍(lán)色的行表示在CombinerClass中不存在。

  LogAnalysiser:: ReduceClass

DE>  public static class ReduceClass extends MapReduceBase
    implements Reducer<Text, LongWritable,Text, LongWritable>
  {
    public void reduce(Text key, Iterator<LongWritable> values,
        OutputCollector<Text, LongWritable> output, Reporter reporter)throws IOException
    {
      Text newkey = new Text();
      newkey.set(key.toString().substring(key.toString().indexOf("::")+2));
      LongWritable result = new LongWritable();
      long tmp = 0;
      int counter = 0;
      while(values.hasNext())//累加同一個(gè)key的統(tǒng)計(jì)結(jié)果
      {
        tmp = tmp + values.next().get();
        
        counter = counter +1;//擔(dān)心處理太久,JobTracker長(zhǎng)時(shí)間沒(méi)有收到報(bào)告會(huì)認(rèn)為TaskTracker已經(jīng)失效,因此定時(shí)報(bào)告一下
        if (counter == 1000)
        {
          counter = 0;
          reporter.progress();
        }
      }
      result.set(tmp);
      output.collect(newkey, result);//輸出最后的匯總結(jié)果
    }  
  }DE>

  LogAnalysiser

DE>  public static void main(String[] args)
  {
    try
    {
      run(args);
    } catch (Exception e)
    {
      e.printStackTrace();
    }
  }
  public static void run(String[] args) throws Exception
  {
    if (args == null || args.length <2)
    {
      System.out.println("need inputpath and outputpath");
      return;
    }
    String inputpath = args[0];
    String outputpath = args[1];
    String shortin = args[0];
    String shortout = args[1];
    if (shortin.indexOf(File.separator) >= 0)
      shortin = shortin.substring(shortin.lastIndexOf(File.separator));
    if (shortout.indexOf(File.separator) >= 0)
      shortout = shortout.substring(shortout.lastIndexOf(File.separator));
    SimpleDateFormat formater = new SimpleDateFormat("yyyy.MM.dd");
    shortout = new StringBuffer(shortout).append("-")
      .append(formater.format(new Date())).toString();
    
    
    if (!shortin.startsWith("/"))
      shortin = "/" + shortin;
    if (!shortout.startsWith("/"))
      shortout = "/" + shortout;
    shortin = "/user/root" + shortin;
    shortout = "/user/root" + shortout;      
    File inputdir = new File(inputpath);
    File outputdir = new File(outputpath);
    if (!inputdir.exists() || !inputdir.isDirectory())
    {
      System.out.println("inputpath not exist or isn't dir!");
      return;
    }
    if (!outputdir.exists())
    {
      new File(outputpath).mkdirs();
    }
    
    JobConf conf = new JobConf(new Configuration(),LogAnalysiser.class);//構(gòu)建Config
    FileSystem fileSys = FileSystem.get(conf);
    fileSys.copyFromLocalFile(new Path(inputpath), new Path(shortin));//將本地文件系統(tǒng)的文件拷貝到HDFS中
    conf.setJobName("analysisjob");
    conf.setOutputKeyClass(Text.class);//輸出的key類型,在OutputFormat會(huì)檢查
    conf.setOutputValueClass(LongWritable.class); //輸出的value類型,在OutputFormat會(huì)檢查
    conf.setMapperClass(MapClass.class);
    conf.setCombinerClass(CombinerClass.class);
    conf.setReducerClass(ReduceClass.class);
    conf.setPartitionerClass(PartitionerClass.class);
    conf.set("mapred.reduce.tasks", "2");//強(qiáng)制需要有兩個(gè)Reduce來(lái)分別處理流量和次數(shù)的統(tǒng)計(jì)
    FileInputFormat.setInputPaths(conf, shortin);//hdfs中的輸入路徑
    FileOutputFormat.setOutputPath(conf, new Path(shortout));//hdfs中輸出路徑
    
    Date startTime = new Date();
      System.out.println("Job started: " + startTime);
      JobClient.runJob(conf);
      Date end_time = new Date();
      System.out.println("Job ended: " + end_time);
      System.out.println("The job took " + (end_time.getTime() - startTime.getTime()) /1000 + " seconds.");
      //刪除輸入和輸出的臨時(shí)文件
    fileSys.copyToLocalFile(new Path(shortout),new Path(outputpath));
    fileSys.delete(new Path(shortin),true);
    fileSys.delete(new Path(shortout),true);
  }DE>

  以上的代碼就完成了所有的邏輯性代碼,然后還需要一個(gè)注冊(cè)驅(qū)動(dòng)類來(lái)注冊(cè)業(yè)務(wù)Class為一個(gè)可標(biāo)示的命令,讓hadoop jar可以執(zhí)行。

DE>public class ExampleDriver {
 public static void main(String argv[]){
  ProgramDriver pgd = new ProgramDriver();
  try {
   pgd.addClass("analysislog", LogAnalysiser.class, "A map/reduce program that analysis log .");
   pgd.driver(argv);
  }
  catch(Throwable e){
   e.printStackTrace();
  }
 }
}DE>

  將代碼打成jar,并且設(shè)置jar的mainClass為ExampleDriver這個(gè)類。在分布式環(huán)境啟動(dòng)以后執(zhí)行如下語(yǔ)句:

DE>hadoop jar analysiser.jar analysislog /home/wenchu/test-in /home/wenchu/test-outDE>

  在/home/wenchu/test-in中是需要分析的日志文件,執(zhí)行后就會(huì)看見(jiàn)整個(gè)執(zhí)行過(guò)程,包括了Map和Reduce的進(jìn)度。執(zhí)行完畢會(huì)在/home/wenchu/test-out下看到輸出的內(nèi)容。有兩個(gè)文件:part-00000和part-00001分別記錄了統(tǒng)計(jì)后的結(jié)果。 如果需要看執(zhí)行的具體情況,可以看在輸出目錄下的_logs/history/xxxx_analysisjob,里面羅列了所有的Map,Reduce的創(chuàng)建情況以及執(zhí)行情況。在運(yùn)行期也可以通過(guò)瀏覽器來(lái)查看Map,Reduce的情況:http://MasterIP:50030/jobtracker.jsp

  Hadoop集群測(cè)試

  首先這里使用上面的范例作為測(cè)試,也沒(méi)有做太多的優(yōu)化配置,這個(gè)測(cè)試結(jié)果只是為了看看集群的效果,以及一些參數(shù)配置的影響。

  文件復(fù)制數(shù)為1,blocksize 5M

Slave數(shù)處理記錄數(shù)(萬(wàn)條)執(zhí)行時(shí)間(秒)
29538
2950337
49524
4950178
69521
6950114

  Blocksize 5M

Slave數(shù)處理記錄數(shù)(萬(wàn)條)執(zhí)行時(shí)間(秒)
2(文件復(fù)制數(shù)為1)950337
2(文件復(fù)制數(shù)為3)950339
6(文件復(fù)制數(shù)為1)950114
6(文件復(fù)制數(shù)為3)950117

  文件復(fù)制數(shù)為1

Slave數(shù)處理記錄數(shù)(萬(wàn)條)執(zhí)行時(shí)間(秒)
6(blocksize 5M)9521
6(blocksize 77M)9526
4(blocksize 5M)950178
4(blocksize 50M)95054
6(blocksize 5M)950114
6(blocksize 50M)95044
6(blocksize 77M)95074

  測(cè)試的數(shù)據(jù)結(jié)果很穩(wěn)定,基本測(cè)幾次同樣條件下都是一樣。通過(guò)測(cè)試結(jié)果可以看出以下幾點(diǎn):

  機(jī)器數(shù)對(duì)于性能還是有幫助的(等于沒(méi)說(shuō)^_^)。

  文件復(fù)制數(shù)的增加只對(duì)安全性有幫助,但是對(duì)于性能沒(méi)有太多幫助。而且現(xiàn)在采取的是將操作系統(tǒng)文件拷貝到HDFS中,所以備份多了,準(zhǔn)備的時(shí)間很長(zhǎng)。

  blocksize對(duì)于性能影響很大,首先如果將block劃分的太小,那么將會(huì)增加job的數(shù)量,同時(shí)也增加了協(xié)作的代價(jià),降低了性能,但是配置的太大也會(huì)讓job不能最大化并行處理。所以這個(gè)值的配置需要根據(jù)數(shù)據(jù)處理的量來(lái)考慮。

  最后就是除了這個(gè)表里面列出來(lái)的結(jié)果,應(yīng)該去仔細(xì)看輸出目錄中的_logs/history中的xxx_analysisjob這個(gè)文件,里面記錄了全部的執(zhí)行過(guò)程以及讀寫情況。這個(gè)可以更加清楚地了解哪里可能會(huì)更加耗時(shí)。

  隨想

  “云計(jì)算”熱的燙手,就和SAAS、Web2及SNS等一樣,往往都是在搞概念,只有真正踏踏實(shí)實(shí)的大型互聯(lián)網(wǎng)公司,才會(huì)投入人力物力去研究符合自己的分布式計(jì)算。其實(shí)當(dāng)你的數(shù)據(jù)量沒(méi)有那么大的時(shí)候,這種分布式計(jì)算也就僅僅只是一個(gè)玩具而已,只有在真正解決問(wèn)題的過(guò)程中,它深層次的問(wèn)題才會(huì)被挖掘出來(lái)。

  這三篇文章(分布式計(jì)算開(kāi)源框架Hadoop介紹,Hadoop中的集群配置和使用技巧)僅僅是為了給對(duì)分布式計(jì)算有興趣的朋友拋個(gè)磚,要想真的掘到金子,那么就踏踏實(shí)實(shí)的去用、去想、去分析。或者自己也會(huì)更進(jìn)一步地去研究框架中的實(shí)現(xiàn)機(jī)制,在解決自己?jiǎn)栴}的同時(shí),也能夠貢獻(xiàn)一些什么。

  前幾日看到有人跪求成為架構(gòu)師的方式,看了有些可悲,有些可笑,其實(shí)有多少架構(gòu)師知道什么叫做架構(gòu)?架構(gòu)師的職責(zé)是什么?與其追求這么一個(gè)名號(hào),還不如踏踏實(shí)實(shí)地做塊石頭沉到水底。要知道,積累和沉淀的過(guò)程就是一種成長(zhǎng)。

原文地址:http://stonexmx.blog.163.com/blog/static/12215858720100291223443/

總結(jié)

以上是生活随笔為你收集整理的分布式计算开源框架Hadoop入门实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

五月天狠狠操 | av成人动漫 | av在线播放国产 | 久久只精品99品免费久23小说 | 摸阴视频| 2024国产精品视频 | 免费观看性生活大片 | 伊人色**天天综合婷婷 | 久久污视频 | 黄色成年网站 | 免费亚洲电影 | 亚洲另类交 | 久久福利影视 | 亚洲激精日韩激精欧美精品 | 2019中文字幕第一页 | 人人爽人人爽人人爽 | 91专区在线观看 | 99色人| 婷婷丁香狠狠爱 | 国产综合香蕉五月婷在线 | 免费一级毛毛片 | 日韩欧在线 | 成人av免费 | a v在线视频 | 99999精品 | 国产视频精选在线 | 久久久国产高清 | 国产又粗又猛又黄视频 | 亚洲午夜久久久久久久久电影网 | 亚洲精品免费在线观看 | 狠狠色丁香久久婷婷综合五月 | 久久高清免费观看 | 国产色小视频 | 91av国产视频 | 亚洲精品网址在线观看 | 欧美日本不卡高清 | 97香蕉久久超级碰碰高清版 | 超碰97在线资源站 | 日日操天天操夜夜操 | 国产精品亚洲片在线播放 | 日韩精品观看 | 91探花在线视频 | 黄色毛片网站在线观看 | 6080yy午夜一二三区久久 | 欧美色精品天天在线观看视频 | 亚洲精品大片www | 人人爽人人爽人人爽 | 日本精品久久久久中文字幕 | 欧美 日韩 国产 成人 在线 | 美女网站视频久久 | 美国三级黄色大片 | 91视频黄色 | 国产我不卡| 日日综合| 欧美男同视频网站 | 国产麻豆精品久久一二三 | 最近中文字幕大全中文字幕免费 | 97超视频在线观看 | 99电影| 99在线免费观看视频 | 99久久精品久久久久久动态片 | 国色综合| 成人网看片 | 亚洲成人精品影院 | 91九色最新地址 | 国产免费不卡 | 国产破处在线视频 | 国产精品日韩久久久久 | 成年人电影免费在线观看 | www.天天草| 亚洲播播 | 国产不卡在线视频 | 97国产在线视频 | 成人午夜电影在线 | 国产午夜亚洲精品 | 综合色中色| 密桃av在线 | 国产69熟| 午夜视频在线网站 | 草久久影院 | 99精彩视频 | 国产一级视屏 | 美国人与动物xxxx | 久久久精品网站 | 欧美污在线观看 | 六月久久婷婷 | 亚洲色图激情文学 | 日韩精品中文字幕在线不卡尤物 | 国产一区二区免费在线观看 | 最新日韩在线观看 | 久久夜色精品国产欧美乱 | 亚洲一区天堂 | 欧美精品首页 | 韩国精品在线 | 91亚洲免费| 日韩区欧美久久久无人区 | 在线影视 一区 二区 三区 | 婷婷色视频 | 日韩国产精品毛片 | 国产一级高清视频 | 色婷婷欧美 | av在线影片 | 激情av一区二区 | 99色在线视频 | 99精品视频精品精品视频 | 一区二区三区高清在线观看 | 99在线视频免费观看 | 欧美国产日韩在线视频 | 91人人澡人人爽人人精品 | 精品视频国产 | 日韩高清一 | 日韩美女高潮 | 97成人免费 | 久操视频在线 | 97狠狠操 | 中文字幕在线观看第一区 | 国产男男gay做爰 | 国产一级片视频 | 婷婷色在线观看 | 欧美精品在线观看免费 | 久久综合色播五月 | 在线视频app | 久久午夜羞羞影院 | 久久er99热精品一区二区三区 | 超级碰视频 | 国产免费国产 | 亚洲欧美国产精品va在线观看 | 日日夜夜精品视频天天综合网 | 欧美在线观看视频一区二区三区 | av中文在线观看 | 天堂va欧美va亚洲va老司机 | 最新中文字幕在线资源 | 国产精品美女毛片真酒店 | 日韩电影中文字幕在线 | 91在线播放视频 | 99精品在线免费在线观看 | 久久精品黄 | 日韩久久精品一区二区三区 | 免费又黄又爽的视频 | 日日碰狠狠添天天爽超碰97久久 | 国产精品尤物视频 | 国产在线国偷精品产拍 | 国产精品亚州 | 又大又硬又黄又爽视频在线观看 | 91桃色免费视频 | 天天操天天操天天操天天操天天操 | 国产日产在线观看 | 亚洲一二视频 | 亚洲精品午夜视频 | 日韩在线不卡 | 久久超碰网 | 一级欧美黄 | 天堂在线视频免费观看 | 欧美一级视频免费 | 五月香视频在线观看 | 亚洲三级在线 | 色婷婷国产在线 | 久久久久麻豆v国产 | 国产一级电影网 | 国产一区免费观看 | 亚洲男男gⅴgay双龙 | 国产美腿白丝袜足在线av | 69国产盗摄一区二区三区五区 | 蜜桃视频日本 | www.啪啪.com | 午夜免费福利视频 | www.888av| 亚洲一区视频在线播放 | 91丨九色丨国产在线 | 亚洲精品国精品久久99热 | 国产一级黄色电影 | 亚洲伦理一区 | 99精品一区 | 亚洲免费国产 | 国产成人资源 | 曰本三级在线 | 久久视频 | 日韩在线视频免费看 | 久久久久免费观看 | 中文字幕在线成人 | 国产成免费视频 | 日韩av电影手机在线观看 | 精品亚洲va在线va天堂资源站 | 最新av电影网址 | 中文高清av | 91亚洲国产成人久久精品网站 | 久久人人看| 亚洲欧美经典 | 亚洲一区美女视频在线观看免费 | 白丝av免费观看 | 97超碰在线免费观看 | 久久高清av| 国产精品va在线观看入 | 久久久久久国产精品亚洲78 | 天天干天天干天天 | 69av视频在线 | 99热精品在线 | 婷婷深爱网 | 久久成年视频 | www麻豆视频| 国产精品99免费看 | 97在线资源 | 国产精品久久电影网 | 一区二区三区手机在线观看 | 日韩超碰在线 | 色视频网站免费观看 | 久久最新 | 欧美成天堂网地址 | av免费观看高清 | 天天操天天色综合 | 九九在线视频免费观看 | 日日夜精品 | 97精品久久人人爽人人爽 | 在线观看黄 | 亚洲精品国精品久久99热 | 中文字幕在线观看完整版电影 | 婷婷激情小说网 | 成人蜜桃 | 成人h在线播放 | 香蕉影视app| 国产精品一区二区三区久久久 | 天天激情在线 | 91免费高清 | 免费观看一级视频 | 天天干天天干天天 | 婷婷丁香久久五月婷婷 | 天天干天天操天天 | 青春草免费视频 | 中文字幕免费观看全部电影 | 色香天天 | 国产精品欧美久久久久三级 | 天堂网av 在线 | 国产在线视频在线观看 | 色婷婷综合久久久 | 亚洲天天干 | 国产精品免费小视频 | 在线视频久久 | 久久精品中文字幕少妇 | aaa日本高清在线播放免费观看 | 欧美伦理一区二区三区 | 狠狠狠的干 | 久久精品免费看 | 成人av网站在线播放 | a午夜电影| 黄p网站在线观看 | 高清av网 | 久久图 | 精品久久久久国产 | 一区二区中文字幕在线播放 | 97成人免费| 一级特黄aaa大片在线观看 | 久久久久网址 | 欧美日韩在线精品一区二区 | 国产精品久久久久久久7电影 | 91av原创| 色天天综合久久久久综合片 | 欧美性粗大hdvideo | 久久婷婷精品 | 亚洲精品国产精品国自产 | 日日精品 | 色综合www | 免费色视频 | 午夜电影中文字幕 | av免费电影在线 | 国产真实精品久久二三区 | 99re中文字幕| 国产96精品 | 天天艹天天| 欧美日韩国语 | 色婷婷激情四射 | 国产一卡在线 | 免费观看的av网站 | 国产 av 日韩| 99久久毛片 | 久久免费的视频 | 亚洲色五月 | 在线免费观看涩涩 | 亚洲午夜久久久久 | 国产精品va在线观看入 | 欧美一级片在线观看视频 | 超碰在线94| 狠狠色婷婷丁香六月 | 久久99久久99精品免视看婷婷 | 日韩中文字幕a | 婷婷在线视频观看 | 黄色亚洲精品 | 插综合网 | 欧美一级视频一区 | 国产毛片aaa | 在线精品视频免费观看 | 日韩高清无线码2023 | 亚洲人天堂 | 欧美激情第十页 | 中文字幕中文字幕在线一区 | 在线成人一区二区 | 欧美色精品天天在线观看视频 | 婷婷电影在线观看 | 黄色免费网 | 久久福利国产 | 国产黄在线免费观看 | 久精品视频在线 | 国产精品美女久久久久久久 | 欧美日韩xxxxx | 日日草视频 | 免费a网址| 日韩手机在线观看 | 免费av的网站 | 高清国产午夜精品久久久久久 | 亚洲波多野结衣 | 亚洲国产精品va在线看黑人 | 免费网站看v片在线a | 久久这里只有精品视频99 | 亚洲欧美日韩国产 | 欧美老少交 | 91亚洲精品久久久 | 色免费在线 | 国产精品va在线观看入 | 免费久久99精品国产婷婷六月 | 超碰人人国产 | 婷婷九月激情 | 成人h动漫在线看 | www色网站 | 蜜臀av网址 | 成人黄在线 | 精品一区二区三区久久久 | 精品国产视频一区 | 日本视频高清 | www久久久久 | 免费看黄在线看 | 天天综合区 | 久久久麻豆视频 | 日韩国产精品久久久久久亚洲 | 国产一二三区在线观看 | 97伊人网| 国产自产高清不卡 | 四虎影视成人精品 | 狠狠操狠狠干天天操 | 欧美性受极品xxxx喷水 | 最近中文字幕视频完整版 | 国产乱码精品一区二区三区介绍 | 久草视频免费看 | 久青草视频在线观看 | 久久久毛片 | 国产黄色理论片 | 国产不卡网站 | 91.dizhi永久地址最新 | 免费av 在线 | 日日精品 | 久久99精品国产99久久 | 久久精品91久久久久久再现 | 久久久国产99久久国产一 | 色狠狠干 | 亚洲,国产成人av | 色五月色开心色婷婷色丁香 | 99热国产在线中文 | 欧美91成人网 | 91精品国产99久久久久 | 一区二区三区精品在线 | 狠狠色伊人亚洲综合成人 | 中文字幕丝袜一区二区 | 国产亚洲va综合人人澡精品 | 中文字幕一区二区三区在线观看 | 精品视频免费久久久看 | 色鬼综合网 | 好看av在线 | 天堂中文在线视频 | 国产久草在线观看 | 天天干天天操人体 | 最近2019年日本中文免费字幕 | 91麻豆国产| 在线看污网站 | 国产手机免费视频 | 天天天操天天天干 | 最近中文字幕高清字幕在线视频 | 国内精品久久久久久中文字幕 | 国产精品1区2区3区 久久免费视频7 | 狠狠gao | 日韩av影片在线观看 | 国产极品尤物在线 | 免费黄色一区 | 天天综合色天天综合 | 国产精品不卡av | 成人欧美一区二区三区黑人麻豆 | 在线播放国产精品 | 亚洲人成精品久久久久 | 久久久国产精品网站 | 精品国偷自产国产一区 | 丁香综合激情 | 精品视频中文字幕 | 99爱精品在线 | 久久综合久久88 | 中文字幕在线免费观看视频 | 欧美极度另类 | 日韩av区 | 久久丝袜视频 | 欧美日韩国产综合一区二区 | 国内视频 | 天堂av在线 | 黄色av一级片 | 91视频啊啊啊 | 一区二区高清在线 | 国产精品毛片久久 | 亚洲精品一区二区三区四区高清 | 日韩免 | 亚洲欧美日韩不卡 | 久久精品视频在线看 | 亚洲精品综合一二三区在线观看 | 中文字幕高清视频 | 天天插天天操天天干 | 国产精品久久久久永久免费看 | 久草视频在线看 | 国产精品国产三级国产专区53 | 国产 色| 亚洲 综合 国产 精品 | 天天色天天| 国产小视频在线免费观看视频 | 亚洲精品视频免费看 | 黄色av电影在线观看 | 在线成人短视频 | 公与妇乱理三级xxx 在线观看视频在线观看 | 激情婷婷网 | 国产手机视频 | 成人性生活大片 | 欧美激情精品久久久久久变态 | 欧美最猛性xxxx | 国产精品午夜8888 | 精品99在线观看 | 国内小视频| 日产乱码一二三区别在线 | 精品一区 在线 | 国色天香第二季 | 日本精a在线观看 | 又黄又爽又刺激视频 | 婷婷色资源 | 国产精品久久久久久久电影 | 国产精品1000 | 奇米影视8888 | 成人一区二区三区中文字幕 | 91精品视频播放 | 亚洲精品乱码久久久久v最新版 | 亚洲在线日韩 | 天天天天天天天天操 | www免费视频com━ | 午夜久久成人 | 免费在线观看国产黄 | 成人在线观看av | 久爱精品在线 | 久久久久久久免费看 | 久久久久久久久久久久电影 | 亚洲电影自拍 | 欧美精品久久久 | 久久久综合九色合综国产精品 | 九九热av| 五月天亚洲精品 | 五月综合色 | 日日爱视频 | 久久久国产影视 | av日韩不卡 | 亚洲黄网址 | 日韩一区二区免费播放 | 亚洲美女免费精品视频在线观看 | 精品国产理论 | 亚洲国产成人在线观看 | 日韩专区在线播放 | 久艹在线免费观看 | 欧美久久久一区二区三区 | 欧美日韩精品区 | 在线观看的黄色 | 日b视频国产 | 亚洲精品视频在线观看免费 | 久草在线视频网站 | 亚洲日本va中文字幕 | 国产精品1区2区 | 99精品免费视频 | 亚洲欧美日韩国产 | 成人av高清在线 | 精品国产乱码久久久久久天美 | 亚洲无在线| 日韩www在线| a√天堂中文在线 | 国产在线视频不卡 | 中文不卡视频 | 黄色三级免费片 | wwwav视频| 999日韩| 国产高清综合 | 成 人 黄 色 片 在线播放 | 国产免费又爽又刺激在线观看 | 亚洲精品美女视频 | 国产精品久久精品 | 一本一本久久a久久精品牛牛影视 | 就要色综合 | 国产精品久久久久亚洲影视 | 人人干网| 九九九视频在线 | 日韩乱码在线 | 亚洲精品麻豆 | 超碰资源在线 | 91免费视频黄 | 久久久久久欧美二区电影网 | 97超级碰| 久久无码精品一区二区三区 | 国产老太婆免费交性大片 | 在线黄色免费av | 91精品国产91久久久久久三级 | 91精品视频一区二区三区 | 日韩欧美精选 | 人人搞人人爽 | 国产精品入口麻豆www | 亚洲最大av网 | 一区二区不卡在线观看 | 久久五月天婷婷 | 亚洲一级在线观看 | 婷婷深爱五月 | 黄色中文字幕在线 | 精品久久精品 | 综合av在线 | 爱色婷婷| 亚洲精品 在线视频 | 玖玖玖国产精品 | 亚洲开心激情 | 麻豆视频免费在线播放 | 欧美一级黄色网 | 国产资源网站 | 久草视频在线新免费 | 亚洲精品自拍视频在线观看 | 亚洲激情 | 国产亚洲精品综合一区91 | 婷婷九月激情 | 日日夜夜天天久久 | 手机av在线免费观看 | 丁香综合 | 国产精品 中文在线 | 国产高清不卡在线 | 在线免费观看视频 | 久久久久免费精品国产 | 91福利视频一区 | 欧美一区二视频在线免费观看 | 99精品免费视频 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 色99色| 亚洲 欧美 国产 va在线影院 | 久久久亚洲成人 | 成人av高清 | 9ⅰ精品久久久久久久久中文字幕 | 精品99在线 | av线上免费看 | 国产精品一区二区三区四 | 国产丝袜制服在线 | 国产麻豆精品久久 | 毛片无卡免费无播放器 | 久久er99热精品一区二区 | a成人v在线 | 中文资源在线官网 | 349k.cc看片app| 色综合久久88色综合天天 | 在线观看一区视频 | av五月婷婷| 日韩网站在线观看 | 日本黄色免费看 | 综合天堂av久久久久久久 | 天天射综合网站 | 黄色的视频网站 | 亚洲午夜av电影 | 国产中文字幕网 | 久久久高清免费视频 | 精品国产一二三四区 | 欧美性网站 | 久久国内精品99久久6app | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 精品国产1区 | 久久精品一二三区 | 国产不卡免费av | 日韩免费高清在线观看 | 色综合中文综合网 | 亚洲伦理精品 | 精品久久久久一区二区国产 | 日产乱码一二三区别在线 | 日韩美女高潮 | 精品国产乱码久久久久久久 | 国产三级在线播放 | 色视频在线 | 五月婷婷六月丁香在线观看 | 欧美日一级片 | 精品国产一区二区三区不卡 | 亚州国产精品久久久 | 免费黄色在线网址 | 日韩激情在线视频 | 成人小视频在线免费观看 | 五月激情六月丁香 | 在线影院中文字幕 | 深爱综合网| 欧美激情精品久久久久久免费 | 中文字幕一区二区三区在线视频 | 天天亚洲 | 久久理论片 | 免费午夜视频在线观看 | 国产精品免费在线观看视频 | 天天干视频在线 | 毛片www| 国产视频一区在线免费观看 | 91插插视频 | 中文字幕一区二区三区乱码不卡 | 亚洲精品午夜一区人人爽 | 国产剧在线观看片 | 青青河边草免费观看 | 国产只有精品 | 视频一区在线播放 | 91成人免费观看视频 | 久久免费视频在线观看6 | 久久理论影院 | 国产高清在线 | 五月激情天 | 在线欧美最极品的av | 久久久午夜剧场 | 最新超碰在线 | 中文成人字幕 | 96av视频 | 久草精品在线播放 | 欧美精品久久久久久久久久久 | 国产糖心vlog在线观看 | 亚洲最大在线视频 | 五月综合色婷婷 | 精品国产午夜 | 亚洲高清av在线 | 免费成人在线观看 | 欧美有色| 亚洲黄色在线免费观看 | 亚洲激情在线观看 | 久久99视频免费观看 | 国产成人av电影在线 | 国产91精品一区二区 | 91黄色小网站 | 1024手机基地在线观看 | 黄网站免费大全入口 | 精品国产区在线 | 天天操综合网 | a久久免费视频 | 国产精品国产亚洲精品看不卡 | 久久久鲁 | 天天色天天操综合 | 18av在线视频 | 欧美日韩一区二区久久 | 久久黄色片 | 深夜免费福利网站 | 日韩二区在线观看 | 久久久久免费精品视频 | 超碰在线最新网址 | 亚洲欧美日韩在线一区二区 | 三级黄色在线观看 | 国产中文字幕视频在线观看 | 啪啪小视频网站 | 日本久久综合网 | 三上悠亚一区二区在线观看 | 欧美人体xx| 九九热久久久 | 狠狠激情中文字幕 | 欧美精品久久久久久久久免 | 992tv在线观看| 丁香花中文在线免费观看 | 亚州精品天堂中文字幕 | 欧美韩日精品 | 欧美性色综合网 | 国产视频一区二区在线观看 | 欧美精品v国产精品v日韩精品 | 麻豆久久久久久久 | 久久久.com| 99精品电影 | 国产视频日韩视频欧美视频 | 欧美色图亚洲图片 | 天天综合婷婷 | 国产精品永久久久久久久久久 | 日本在线观看一区二区 | 国产原创av在线 | 免费看亚洲毛片 | 中文字幕人成人 | 人人草人人草 | 欧美日韩在线观看一区二区 | 亚洲 综合 专区 | 国产精品视频在线观看 | 麻豆传媒一区二区 | 久久激情网站 | 五月激情姐姐 | 激情影音先锋 | 国产精品门事件 | 韩国在线视频一区 | 午夜精品av | 又污又黄的网站 | 精品久久久久久国产偷窥 | 又黄又爽又无遮挡免费的网站 | 国产日韩欧美在线一区 | 国产免费激情久久 | 国产精品一区二区中文字幕 | 日夜夜精品视频 | 激情电影在线观看 | 二区三区av | 国产精品亚洲精品 | 日韩视频一区二区在线观看 | 亚洲第一久久久 | 国产亚州av | 2021av在线| 日韩精品免费一区二区在线观看 | 精品视频一区在线 | 国产视频一区二区在线播放 | 黄色在线网站噜噜噜 | 看av免费网站 | 亚洲午夜精品久久久久久久久 | 国产一区视频在线观看免费 | 日韩性xxx| 亚洲精品中文在线观看 | 日韩欧美在线一区二区 | 99视频播放| 成人h电影在线观看 | 操操操干干干 | 精品美女在线观看 | 日本一区二区三区视频在线播放 | 在线观看成年人 | 亚洲精品自拍视频在线观看 | 美女在线免费视频 | 97超碰在线久草超碰在线观看 | 一本一道波多野毛片中文在线 | 国产精品刺激对白麻豆99 | 中文字幕五区 | 91精品久久久久久综合五月天 | 亚洲国产午夜精品 | 久久久国产99久久国产一 | www.久久视频| 这里只有精品视频在线观看 | 探花视频在线版播放免费观看 | 激情五月伊人 | 伊人婷婷网 | 国产精品精品久久久久久 | 毛片网在线播放 | 99久久精品视频免费 | 国产美女精品视频 | 97视频免费在线观看 | 日韩啪啪小视频 | 欧美日韩久 | 国产精品久久久视频 | 97超碰在线播放 | 午夜在线观看 | 欧美在线一二 | 久久久男人的天堂 | 亚洲日本va午夜在线电影 | 国产人成精品一区二区三 | 久久久国产精品视频 | 综合久久久久久久久 | 国产欧美日韩一区 | 91精品国产自产老师啪 | 美女免费黄视频网站 | 欧美日韩国内在线 | 亚洲免费av一区二区 | 在线免费黄网站 | 久久精品亚洲国产 | 欧美激情在线网站 | 欧美日韩一区久久 | 久久亚洲私人国产精品va | www.亚洲精品在线 | 手机av在线免费观看 | 在线观看激情av | 亚洲欧美乱综合图片区小说区 | 在线视频99| 99热国产在线中文 | 免费裸体视频网 | 在线观看aa | 日韩高清观看 | 免费观看91视频大全 | 探花视频在线观看免费 | 久久精品美女视频网站 | 国产精品99在线播放 | 波多野结衣电影久久 | 久操免费视频 | 香蕉精品视频在线观看 | 91试看| 狠狠狠狠狠狠狠 | 91精品啪在线观看国产线免费 | 黄色免费大全 | 日本免费久久高清视频 | 一本色道久久精品 | 特级毛片网 | 福利一区二区三区四区 | 四虎最新入口 | 91成人免费观看视频 | 国产黄a三级三级 | 日韩专区中文字幕 | 免费观看一级视频 | 久艹视频免费观看 | www.夜色321.com | www.久久99| 亚洲精品白浆高清久久久久久 | 国产精品久久麻豆 | 男女男视频| 深夜国产在线 | 99热这里只有精品在线观看 | 99久久久免费视频 | 国产123区在线观看 国产精品麻豆91 | 96精品在线 | 97视频在线播放 | 黄色美女免费网站 | 日韩大片在线播放 | 色天天综合久久久久综合片 | 天天操天天干天天综合网 | 国产日韩精品一区二区三区 | 成人黄色大片在线观看 | 亚洲精品456在线播放第一页 | 天天操天天操天天操天天操天天操 | 久草视频中文 | 日韩一区二区三区免费电影 | 日本中文字幕免费观看 | 国产精品久久久久久久久久ktv | 精品二区视频 | 少妇搡bbb | 国产精品久久久久久模特 | 色婷婷六月天 | 欧美一级电影在线观看 | 国产精品igao视频网入口 | 午夜精品久久久久久久久久久久 | 国产 日韩 在线 亚洲 字幕 中文 | 欧美精品久久久久久久久久 | 国产精品爽爽爽 | 91精品高清| 黄色一级免费电影 | 午夜影院先 | 国产在线播放一区 | 一级片黄色片网站 | 96超碰在线 | 91麻豆精品国产91久久久久久 | 久久视频中文字幕 | 久久永久免费视频 | 久久精视频 | 日韩av高潮 | 黄网站免费久久 | 97视频免费在线 | 欧美一级视频免费 | 激情av网| 西西www4444大胆在线 | 超碰在线cao| 精品视频在线观看 | 97超碰影视| 一区二区三区高清不卡 | 国产 精品 资源 | 最近最新中文字幕视频 | 国产专区第一页 | 国产最新精品视频 | 色久综合| 97视频在线免费 | 免费在线观看av网站 | 婷婷5月激情5月 | 91九色国产 | 欧美另类高潮 | 精品黄色片| 在线成人小视频 | 成人理论电影 | 中文字幕在线播放视频 | 激情综合六月 | 98超碰在线| 91麻豆产精品久久久久久 | 美女精品网站 | 色欲综合视频天天天 | 亚洲国产午夜 | 国产一级精品视频 | 九九热免费视频在线观看 | 精品视频久久 | 欧美性生活一级片 | 精品999| 亚洲精品久久久久58 | 国产精品区二区三区日本 | 日韩精品免费一区二区三区 | 精品久久1 | 国产人成精品一区二区三 | 久草久草久草久草 | 女人18毛片90分钟 | www.香蕉视频 | 久久99精品波多结衣一区 | 日韩亚洲在线视频 | 国产精品丝袜在线 | 久久久久免费看 | 超碰97成人 | 久久麻豆精品 | 色就色,综合激情 | 成人性生交大片免费看中文网站 | 99热国产精品 | 亚洲综合色丁香婷婷六月图片 | 精品av网站| 日韩特级片 | 91pony九色丨交换 | av免费看在线 | 18久久久久久 | 97超碰人人澡人人爱 | 韩国av一区二区 | 久久天天躁夜夜躁狠狠85麻豆 | 黄色片软件网站 | 色wwwww | 五月综合婷 | 五月婷婷色 | 国产精品9999久久久久仙踪林 | 久久激情五月婷婷 | 久久久久久国产精品999 | 日韩av一区二区在线 | 91av成人 | 国产日本在线 | 国产无套精品久久久久久 | 久久国产高清 | 成年人免费在线看 | 日韩午夜剧场 | 国产精品麻豆果冻传媒在线播放 | 国产精品电影一区 | 欧洲视频一区 | 国产精品成人一区二区 | 一级成人免费视频 | 午夜av在线电影 | 色就色,综合激情 | 亚洲最新av在线网址 | 亚洲国内精品 | 综合影视 | 国产成人av电影在线 | 美女视频一区 | 天天天综合 | 婷婷深爱网 | 成人app在线播放 | 麻豆精品在线视频 | 亚洲成aⅴ人在线观看 | 免费久久久久久久 | 国产在线观看中文字幕 | 国产精品久久久久久久免费 | 波多野结衣视频一区二区 | 久久久久久久久久久黄色 | 成人免费av电影 | 一级α片免费看 | 欧美乱熟臀69xxxxxx | 国产精品毛片一区视频播不卡 | 亚洲久在线 | 中文字幕乱视频 | 最近免费观看的电影完整版 | 免费人成在线观看网站 | 日韩av免费大片 | 92中文资源在线 | 丁香婷婷在线 | 国产手机视频在线观看 | 中文字幕 国产视频 | 麻豆小视频在线观看 | 99久久国产免费,99久久国产免费大片 | 最近高清中文字幕 | 日韩午夜在线播放 | 在线亚洲成人 | 国产成年免费视频 | 久久久久久黄色 | 天天干,天天操 | 亚洲另类久久 | 麻豆久久一区二区 | 国产一二区在线观看 | 天天操天天摸天天射 | 免费看一及片 | 免费色视频网站 | 久久久久久久av麻豆果冻 | 国产精品专区一 | 亚洲精品国产精品国 | 亚洲综合色丁香婷婷六月图片 | 中文字幕在线观看视频一区二区三区 | 亚洲黄色免费在线 | 久99视频 | 91av中文| 久久精品久久久久电影 | 国产精品久久久久久久免费 | 美女国产网站 | 国产成人av电影在线 | 一区二区久久久久 | 99re亚洲国产精品 | 人人澡人 | 免费av免费观看 | 亚洲 欧洲 国产 日本 综合 | 中文高清av | 啪啪免费试看 | 色片网站在线观看 | 91av小视频| 久久五月天婷婷 | 日韩视频免费在线观看 | 成人超碰97 | 国产精品久久久视频 | 久草在线| 可以免费观看的av片 | 国产精品美女视频 | 亚洲成人av电影在线 | 成人黄色电影视频 | 久久精品99 | 国产精品久久久久久久久久直播 | 激情视频免费在线 | a级成人毛片 | 国产精品久久在线观看 | 精品一二 | 亚洲国产影院av久久久久 | 91手机电视| 免费a v观看 | 日本精品久久久一区二区三区 | 国产区在线视频 | 97超碰人人澡| 成人在线观看日韩 | 日本成人黄色片 |