《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 一種基于HBase的海量微博數(shù)據(jù)高效存儲(chǔ)方案
一種基于HBase的海量微博數(shù)據(jù)高效存儲(chǔ)方案
2014年微型機(jī)與應(yīng)用第11期
焦冬冬,徐新國(guó)
華北計(jì)算機(jī)系統(tǒng)工程研究所,北京
摘要: 隨著網(wǎng)絡(luò)技術(shù)的快速發(fā)展,互聯(lián)網(wǎng)用戶激增,同時(shí)產(chǎn)生了海量的互聯(lián)網(wǎng)數(shù)據(jù)。據(jù)不完全統(tǒng)計(jì),截至2012年12月底,新浪微博注冊(cè)用戶數(shù)已超過(guò)5億,每天新浪微博用戶發(fā)博量超過(guò)1億條。微博的使用人群數(shù)量基數(shù)大,狀態(tài)信息更新頻繁,信息傳播迅速,這為研究網(wǎng)絡(luò)用戶行為與心理提供了充足的資源,也帶來(lái)了挑戰(zhàn)。
關(guān)鍵詞: Hadoop HBase MapReduce 微博
Abstract:
Key words :

  摘  要: 通過(guò)分析HBase的特點(diǎn),提出了一種基于HBase的海量微博數(shù)據(jù)高效存儲(chǔ)方案。該方案通過(guò)建立合適的數(shù)據(jù)存儲(chǔ)模型、預(yù)建Region,提出行關(guān)鍵字生成規(guī)則和跳過(guò)壞記錄的方法,使得數(shù)據(jù)能夠利用MapReduce模型高效且不間斷地導(dǎo)入HBase數(shù)據(jù)庫(kù)。實(shí)驗(yàn)結(jié)果表明,該方法能夠提高海量數(shù)據(jù)導(dǎo)入HBase的效率。

  關(guān)鍵詞Hadoop;HBase;MapReduce;微博;行關(guān)鍵字;跳過(guò)壞記錄

  隨著網(wǎng)絡(luò)技術(shù)的快速發(fā)展,互聯(lián)網(wǎng)用戶激增,同時(shí)產(chǎn)生了海量的互聯(lián)網(wǎng)數(shù)據(jù)。據(jù)不完全統(tǒng)計(jì),截至2012年12月底,新浪微博注冊(cè)用戶數(shù)已超過(guò)5億,每天新浪微博用戶發(fā)博量超過(guò)1億條。微博的使用人群數(shù)量基數(shù)大,狀態(tài)信息更新頻繁,信息傳播迅速,這為研究網(wǎng)絡(luò)用戶行為與心理提供了充足的資源,也帶來(lái)了挑戰(zhàn)。

  面對(duì)如此海量的微博數(shù)據(jù),如何將其高效的存儲(chǔ)與管理,已經(jīng)成為一個(gè)迫切需要解決的問(wèn)題。云計(jì)算技術(shù)的出現(xiàn),為解決這一問(wèn)題提供了新的途徑和思路。目前谷歌、亞馬遜、微軟、IBM等知名企業(yè)紛紛推出云計(jì)算解決方案。Apache的Hadoop[1]是一個(gè)開源的云計(jì)算平臺(tái),其核心是HDFS、MapReduce和Hbase。Hbase是一個(gè)開源的、面向列的分布式數(shù)據(jù)庫(kù),它是基于HDFS的,可以利用集群處理大數(shù)據(jù)。

  目前已有105萬(wàn)個(gè)新浪微博用戶以JSON[2]格式保存的文本數(shù)據(jù),數(shù)據(jù)容量為8.9 TB。如此大量的數(shù)據(jù)使用單臺(tái)計(jì)算機(jī)進(jìn)行結(jié)構(gòu)化存儲(chǔ)和處理是極其耗費(fèi)時(shí)間的。本文主要研究基于MapReduce模型解析JSON格式的微博數(shù)據(jù),并將其高效地導(dǎo)入Hbase數(shù)據(jù)庫(kù),為海量數(shù)據(jù)的高效存儲(chǔ)提供一種解決方案。

  1 HBase概述和MapReduce模型

  HBase[3]是一個(gè)基于HDFS的、開源的、面向列的分布式數(shù)據(jù)庫(kù)。HBase是基于列簇存儲(chǔ)的,不同的列簇對(duì)應(yīng)HDFS上的不同的目錄文件,此目錄文件中存儲(chǔ)的是HBase底層存儲(chǔ)文件(HFile文件),當(dāng)目錄中HFile文件數(shù)量過(guò)多時(shí),HBase會(huì)進(jìn)行compact操作,合并HFile文件。HBase的每個(gè)表都有一個(gè)或幾個(gè)列簇,每個(gè)列簇可以包含任意數(shù)量的列,且每行的列不必相同。HBase表中的每一行由行關(guān)鍵字、時(shí)間戳和列簇組成。

  HBase有多種數(shù)據(jù)導(dǎo)入方式,最直接的方法是在MapReduce任務(wù)中用TableOutputFormat導(dǎo)入或者直接使用正常的客戶端API導(dǎo)入。但是這些都不是最高效的方法。BulkLoad可以通過(guò)MapReduce任務(wù)直接生成HFile文件,然后導(dǎo)入HBase的表中,適合大數(shù)據(jù)的快速導(dǎo)入。因此在本文中主要針對(duì)BulkLoad方法進(jìn)行改進(jìn)。

  MapReduce[4]是一個(gè)處理數(shù)據(jù)的編程模型。它有兩個(gè)重要的函數(shù):Map和Reduce。這兩個(gè)函數(shù)是順序執(zhí)行的,Map執(zhí)行完畢后,開始執(zhí)行reduce。Map負(fù)責(zé)分解任務(wù),Reduce負(fù)責(zé)把各Map任務(wù)的結(jié)果匯總。

  2 微博數(shù)據(jù)高效存儲(chǔ)方案

  2.1 微博數(shù)據(jù)的存儲(chǔ)模型

  HBase數(shù)據(jù)庫(kù)存儲(chǔ)微博用戶的信息以及微博內(nèi)容信息,數(shù)據(jù)庫(kù)表設(shè)計(jì)如表1和表2所示。HBase有多種數(shù)據(jù)導(dǎo)入方式,最直接的方法是在MapReduce任務(wù)中用TableQutputFormat導(dǎo)入或者直接使用正常的客戶端API導(dǎo)入。但這些都不是最高效的方法。basic_info列簇存儲(chǔ)微博用戶的基本信息,statuses_id列簇存儲(chǔ)微博的id,即表2中的行關(guān)鍵字,列名“statuses_id”指的是微博的id,用列名存儲(chǔ)用戶發(fā)布的所有微博信息,”user_id”也是如此。sina_relationship列簇用于存儲(chǔ)微博用戶關(guān)系。在表2中,basic_info列簇用于存儲(chǔ)常用的微博內(nèi)容的基本信息,other_info列簇用于存儲(chǔ)不常用的微博內(nèi)容的信息,這樣劃分是考慮到HBase是按列簇存儲(chǔ)的,避免造成I/O浪費(fèi)。text_info列簇存儲(chǔ)的是微博的文本內(nèi)容。

OXGH_RFKG]R)V3L~AZCV7FR.jpg

  微博內(nèi)容信息表中的basic_info:user_id和微博用戶信息表中的statuses_id:“statuses_id”形成二級(jí)索引,用于關(guān)聯(lián)兩個(gè)表。

  2.2 微博數(shù)據(jù)存儲(chǔ)的優(yōu)化

  2.2.1 預(yù)創(chuàng)建Region

  HBase在建表時(shí),默認(rèn)只有一個(gè)Region。當(dāng)使用BulkLoad[5]導(dǎo)入數(shù)據(jù)時(shí),當(dāng)數(shù)據(jù)達(dá)到一定的規(guī)模(默認(rèn)是256 MB,設(shè)置為200 GB)時(shí),Region會(huì)被分割,這將嚴(yán)重影響導(dǎo)入性能。

  因此可以預(yù)創(chuàng)建一定數(shù)量的空Region,至于Region的數(shù)量可以參考數(shù)據(jù)量、Region設(shè)定的容量和RegionServer的數(shù)量來(lái)決定。Region的數(shù)量最好是RegionServer的整數(shù)倍,這有利于HBase使用MapReduce進(jìn)行數(shù)據(jù)處理。數(shù)據(jù)量除以預(yù)創(chuàng)建Region的數(shù)量應(yīng)當(dāng)小于Region的設(shè)定容量,這可以避免在數(shù)據(jù)導(dǎo)入時(shí),Region進(jìn)行split操作。

  運(yùn)行MapReduce程序生成的每個(gè)HFile文件中的行關(guān)鍵字不屬于獨(dú)立的Region時(shí),導(dǎo)入時(shí)會(huì)發(fā)生文件分割。通過(guò)實(shí)驗(yàn)得知,將總大小為115 GB的HFile文件導(dǎo)入到有32個(gè)Region的表中,耗時(shí)130 min,而且由于分割HFile文件的過(guò)程中會(huì)生成較多的臨時(shí)文件,需要較大的額外存儲(chǔ)空間。

  為了解決這一問(wèn)題,需要使得生成的每個(gè)HFile文件屬于單個(gè)Region,因此需要制定行關(guān)鍵字生成規(guī)則。

  2.2.2 行關(guān)鍵字生成規(guī)則

  HBase按照行關(guān)鍵字的字典序來(lái)存儲(chǔ)數(shù)據(jù)。Hbase提供了多種數(shù)據(jù)查詢方式:根據(jù)行關(guān)鍵字調(diào)用get接口查詢,調(diào)用scan查詢,全表掃描等。

  為了提高數(shù)據(jù)導(dǎo)入效率和查詢效率,提出了行關(guān)鍵字的生成規(guī)則。為了滿足HFile文件所屬Region的唯一性,需要行關(guān)鍵字有Region識(shí)別的功能,因此行關(guān)鍵字中需要包含Region識(shí)別字段。為了保證查詢效率,對(duì)于微博內(nèi)容信息表,需要將同一個(gè)微博用戶的微博在HBase中連續(xù)存儲(chǔ),這就要求行關(guān)鍵字中包含用戶信息字段,以保證將所需微博聚集在一起。為了保證行關(guān)鍵字的唯一性,行關(guān)鍵字需要包含微博內(nèi)容的關(guān)鍵字。式(1)是微博內(nèi)容信息表的行關(guān)鍵字生成規(guī)則。式(2)是微博用戶信息表的行關(guān)鍵字生成規(guī)則。

  行關(guān)鍵字=Region識(shí)別字段+微博用戶ID+微博內(nèi)容ID(1)

  行關(guān)鍵字=Region識(shí)別字段+微博用戶ID(2)

  2.2.3 跳過(guò)壞記錄

  由于下載的微博數(shù)據(jù)是JSON格式的,因此首先需要對(duì)微博數(shù)據(jù)進(jìn)行解析,然后導(dǎo)入HBase數(shù)據(jù)庫(kù)。由于數(shù)據(jù)量大,因此需要使用MapReduce編程模型來(lái)解析數(shù)據(jù)。

  MapReduce需要所有的Map任務(wù)都結(jié)束后,才能進(jìn)行接下來(lái)的工作。如果有一個(gè)Map任務(wù)執(zhí)行多次(默認(rèn)是4次)均失敗,則整個(gè)MapReduce任務(wù)失敗,從而造成了時(shí)間和資源的浪費(fèi)。例如,下載的微博數(shù)據(jù)中有損壞的,也有JSON格式不完整的,還有文件過(guò)大導(dǎo)致內(nèi)存溢出的等,這都會(huì)導(dǎo)致MapReduce任務(wù)失敗。

  MapReduce有Skipipng mode,設(shè)置開啟后,可以跳過(guò)壞記錄,但是這種模式會(huì)大大影響效率,而且對(duì)于內(nèi)存溢出錯(cuò)誤無(wú)法處理,也不能對(duì)跳過(guò)壞記錄的文件進(jìn)行標(biāo)記。

[$[K3N%SOM3BJU7}({MOS[D.jpg

  為了能夠跳過(guò)程序運(yùn)行過(guò)程中的錯(cuò)誤,并將壞記錄所在文件保存到指定文件目錄中,提出重寫RecordReader的方法,稱之為SK-bad。由于將整個(gè)文件作為數(shù)據(jù)分片,可以在RecordReader中獲得數(shù)據(jù)分片的文件名。然后獲得任務(wù)ID,分析任務(wù)ID得出任務(wù)的執(zhí)行次數(shù),當(dāng)執(zhí)行次數(shù)達(dá)到一定數(shù)值時(shí)(此數(shù)值需要自己指定,且要小于任務(wù)失敗最大重復(fù)執(zhí)行次數(shù),否則不會(huì)起作用),將此文件移動(dòng)到指定文件目錄,與此同時(shí)將此記錄標(biāo)記為已處理,從而能夠保證跳過(guò)任何原因引起的壞記錄。核心程序代碼如下。

  public class WholdeFileRecordReader

  extends RecordReader<BytesWritable,BvtesWritable>{

  ……

  public void initialize{InputSplit split,TaskAttempt Context context)}

  ……

  String[]strtaskid=

  context.getTaskAttemptid().tostring().trim().split(“_”)

  String reindex=

  straskid[strtaskid.length-1];

  if(integer.parseitn(reidex)>4){|

  ……

  }

  ……

  }

  }

  3 實(shí)驗(yàn)

  3.1 實(shí)驗(yàn)環(huán)境

  利用6臺(tái)計(jì)算機(jī)作為宿主機(jī),其中有4臺(tái)Dell OptiPlex 990,配置均為:CPU為Intel酷睿i3 2120,內(nèi)存12 GB,千兆以太網(wǎng)卡。一臺(tái)Dell T3500,配置為:CPU為Xeon W3565,內(nèi)存24 GB,千兆以太網(wǎng)卡。一臺(tái)浪潮NP3060,配置為:CPU為Xeon E5506,內(nèi)存16 GB,集成雙千兆網(wǎng)卡。每臺(tái)宿主機(jī)均安裝Xen虛擬機(jī),每臺(tái)Dell OptiPlex 990虛擬出3臺(tái)虛擬機(jī)。Dell T3500虛擬出6臺(tái)虛擬機(jī),浪潮NP3060虛擬出4臺(tái)虛擬機(jī)??偣灿?2臺(tái)虛擬機(jī),每臺(tái)虛擬機(jī)的操作系統(tǒng)均為64 bit Centos 6.2。

  每臺(tái)虛擬機(jī)安裝Hadoop 1.0.4和HBase 0.94.5,其中一臺(tái)作為Master運(yùn)行NameNode,JobTracker和Hmaster,一臺(tái)運(yùn)行SecondNamenode,其余20臺(tái)為Slaves運(yùn)行DataNode,TaskTracker和RegionServer。

  解析JSON數(shù)據(jù)使用的是第三方工具包Jackson[6]。

  實(shí)驗(yàn)使用的數(shù)據(jù)是以文本文件保存的JSON格式的微博數(shù)據(jù),每個(gè)文件大小在100 MB~180 MB之間,含有105萬(wàn)用戶的信息??偟臄?shù)據(jù)容量為8.9 TB。

  3.2 實(shí)驗(yàn)結(jié)果及分析

  使用10 000個(gè)微博數(shù)據(jù)文件,每2 000個(gè)文件作為一次測(cè)試中MapReduce任務(wù)的輸入,共5次測(cè)試。用于測(cè)試MapReduce任務(wù)在使用SK-bad方法時(shí)任務(wù)失敗次數(shù),同時(shí)測(cè)試MapReduce任務(wù)在未使用SK-bad方法時(shí)的失敗次數(shù)和開啟Skipping mode時(shí)的失敗次數(shù)來(lái)進(jìn)行比較。引起的原因有數(shù)據(jù)過(guò)大導(dǎo)致內(nèi)存溢出、文件不完整、錯(cuò)誤的JSON格式和文件校驗(yàn)碼錯(cuò)誤等。實(shí)驗(yàn)結(jié)果如表3所示,對(duì)于讀取文件的過(guò)程中發(fā)生的錯(cuò)誤,Skipping mode無(wú)法處理,5次測(cè)試的結(jié)果表明SK-bad方法能夠保證MapReduce任務(wù)的順利執(zhí)行。

  接下來(lái)的測(cè)試均使用SK-bad方法,Region最大容量設(shè)置為200 GB,預(yù)創(chuàng)建Region數(shù)量為120個(gè)。分別測(cè)試在未預(yù)創(chuàng)建Region且不使用行關(guān)鍵字生成規(guī)則的情況下(情況一),預(yù)創(chuàng)建Region且不使用行關(guān)鍵字生成規(guī)則的情況下(情況二)和預(yù)創(chuàng)建Region且使用行關(guān)鍵字生成規(guī)則情況下(情況三)的存儲(chǔ)性能。

  實(shí)驗(yàn)結(jié)果如圖1所示,存儲(chǔ)9 000個(gè)用戶的數(shù)據(jù)時(shí),在情況一下,由于數(shù)據(jù)量較小,Region不會(huì)split,所以存儲(chǔ)性能與情況三下的存儲(chǔ)性能相近。在情況二下,MapReduce任務(wù)所生成的HFile文件不屬于單個(gè)Region,且Region數(shù)量較多,因此HFile會(huì)進(jìn)行多次split操作,這嚴(yán)重影響了存儲(chǔ)性能。在存儲(chǔ)30 000個(gè)用戶的數(shù)據(jù)時(shí)影響性能的因素與存儲(chǔ)9 000個(gè)用戶的數(shù)據(jù)時(shí)相似;在存儲(chǔ)60 000個(gè)用戶的數(shù)據(jù)時(shí),對(duì)于情況一,由于數(shù)據(jù)量較大會(huì)使Region做split操作,這嚴(yán)重影響存儲(chǔ)性能;在存儲(chǔ)90 000個(gè)用戶的數(shù)據(jù)時(shí)影響性能的因素與存儲(chǔ)60 000個(gè)用戶的數(shù)據(jù)時(shí)相似;在存儲(chǔ)120 000個(gè)用戶的數(shù)據(jù)時(shí),在情況一下,由于數(shù)據(jù)量較大會(huì)使Region再次做split操作,使得Region數(shù)量增多,這更加影響存儲(chǔ)性能,并且隨著用戶數(shù)據(jù)的增多,Region數(shù)量也會(huì)增加,存儲(chǔ)性能會(huì)隨之降低。在情況三下,由于Region不需要做split操作,且生成的每個(gè)HFile屬于唯一的Region,因此隨著數(shù)據(jù)量的增長(zhǎng),存儲(chǔ)時(shí)間接近線性增長(zhǎng)。

  在預(yù)創(chuàng)建Region且使用行關(guān)鍵字生成規(guī)則的情況下,存儲(chǔ)所有8.9 TB共1 068 090個(gè)微博用戶的數(shù)據(jù),耗時(shí)65 h 34 min。

  本文通過(guò)分析HBase和MapReduce模型,提出了一種通過(guò)預(yù)創(chuàng)建Region、行關(guān)鍵字生成規(guī)則,利用MapReduce模型將微博數(shù)據(jù)高效導(dǎo)入HBase數(shù)據(jù)庫(kù)的方案,并提出了能夠處理各種運(yùn)行錯(cuò)誤的SK-bad方法。

  未來(lái)要做的工作是優(yōu)化MapReduce對(duì)HBase的訪問(wèn)效率,利用HBase數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行網(wǎng)絡(luò)用戶行為分析方面的研究。

  參考文獻(xiàn)

  [1] Hadoop[EB/OL]. [2013-07-01]. http://hadoop.apa-che.org/.

  [2] Introducing JSON[EB/OL]. [2005]. http://www.j-son.org/.

  [3] HBase:Bigtable-like structured storage for Hadoop HDFS[EB/OL].[2012-08-24].http://wiki.apache.o-rg /hadoop/Hbase/.

  [4] 李建江,崔健,王聃.MapReduce并行編程模型研究綜述[J].電子學(xué)報(bào),2011,39(11):2635-2642.

  [5] GEORGE L. HBase: the definitive guide[M]. USA: O′Reilly Media, 2011.

  [6] Jackson: High-performance JSON processor[EB/OL].[2013-04-30]. http://jackson.codehaus.org.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲一区二区三区在线播放| 欧美三日本三级少妇三2023| 一区二区亚洲精品国产| 久久亚洲综合色| 亚洲第一二三四五区| 亚洲国产cao| 欧美日韩亚洲一区二区三区在线 | 国产精品欧美日韩一区二区| 欧美亚洲一区二区三区| 亚洲国产成人精品久久久国产成人一区| 国产精品视频免费| 久热精品视频| 一区二区三区三区在线| 日韩视频在线一区二区| 国产精品亚洲片夜色在线| 欧美亚州在线观看| 玖玖视频精品| 久久一区二区三区四区| 久久久久久穴| 在线视频精品一区| 一区二区免费在线观看| 一本久道久久综合中文字幕| 亚洲午夜在线观看| 亚洲一区二区精品| 亚洲欧美影院| 亚洲日本在线观看| 国产一区二区三区视频在线观看| 欧美激情91| 久久电影一区| 一区二区三区色| 亚洲小说区图片区| 亚洲青涩在线| 亚洲欧美激情视频| 亚洲精品网址在线观看| 国产午夜精品理论片a级大结局| 欧美激情视频一区二区三区不卡| 欧美精品久久久久久久免费观看 | 欧美激情精品久久久久久变态| 欧美伦理91i| 久久人体大胆视频| 美女网站久久| 欧美在线地址| 中文精品一区二区三区| 久久精品一区二区三区不卡| 中文日韩在线视频| 亚洲成人自拍视频| 国产日韩综合| 红桃av永久久久| 国产三级欧美三级| 在线欧美日韩| 一本色道久久88综合亚洲精品ⅰ| 亚洲国产经典视频| 99精品99| 亚洲每日更新| 亚洲免费在线| 中文在线资源观看网站视频免费不卡| 亚洲一区二区在线视频| 亚洲国产高清aⅴ视频| 午夜日韩在线| 亚洲人成7777| 午夜国产精品视频免费体验区| 亚洲另类在线视频| 久久精品99久久香蕉国产色戒| 亚洲理论电影网| 午夜一级在线看亚洲| 老司机午夜精品视频| 欧美视频一区二区三区| 国内精品视频一区| 国产曰批免费观看久久久| 亚洲国产精品电影在线观看| 在线视频你懂得一区二区三区| 亚洲精品永久免费| 性视频1819p久久| 亚洲欧美日韩国产精品| 亚洲国产精品久久久久秋霞影院| 亚洲欧美视频一区| 亚洲精品视频在线播放| 欧美在线免费观看视频| 欧美日本韩国一区| 精品动漫3d一区二区三区免费| 一区二区三区国产盗摄| 91久久久久久| 久久精品人人| 久久久久国产精品麻豆ai换脸| 欧美华人在线视频| 国产日韩在线一区二区三区| 亚洲久久一区| 亚洲国产岛国毛片在线| 欧美亚洲一级| 国产精品家庭影院| 国产精品久久久久影院色老大| 一区二区在线不卡| 亚洲欧美日韩国产中文| 99精品国产在热久久| 久久午夜国产精品| 国产欧美高清| 国产综合香蕉五月婷在线| 一区二区av在线| 日韩一级二级三级| 亚洲香蕉在线观看| 欧美1级日本1级| 欧美日韩国产精品一区二区亚洲| 欧美激情一区二区三区全黄| 国产日韩欧美综合| 亚洲一区三区视频在线观看| 一区二区三区日韩精品视频| 欧美成人资源| 欧美日韩国产成人精品| 伊人久久综合| 亚洲精品日日夜夜| 亚洲国产专区| 久久露脸国产精品| 国产日韩精品一区观看| 亚洲一区三区电影在线观看| 亚洲一区二区毛片| 欧美日韩亚洲一区二| 亚洲裸体在线观看| 一区二区三区四区国产精品| 欧美日本三区| 日韩视频在线免费观看| 中文精品一区二区三区 | 欧美日韩免费一区| 日韩视频不卡| 亚洲视频成人| 国产精品久久久久影院亚瑟| 亚洲天堂黄色| 性色av香蕉一区二区| 国产精品一区二区你懂得| 国内外成人免费视频| 香蕉乱码成人久久天堂爱免费 | 欧美极品欧美精品欧美视频| 最近看过的日韩成人| 日韩午夜激情av| 欧美日韩三级一区二区| 一区二区精品在线| 先锋影音网一区二区| 国产精品亚洲综合色区韩国| 午夜精品福利一区二区蜜股av| 久久激情综合网| 狠狠色丁香久久婷婷综合丁香| 亚洲二区三区四区| 欧美+亚洲+精品+三区| 亚洲精品一二三| 亚洲自拍都市欧美小说| 狂野欧美一区| 在线国产亚洲欧美| 一区二区三区国产盗摄| 国产精品卡一卡二卡三| 午夜免费电影一区在线观看| 久久久午夜精品| 亚洲国语精品自产拍在线观看| 亚洲性夜色噜噜噜7777| 欧美一级专区| 伊甸园精品99久久久久久| 亚洲免费观看视频| 欧美亚洲成人网| 欧美一区二区精品| 亚洲尤物视频在线| 欧美大片在线观看| 亚洲精品欧洲| 亚洲欧美日韩天堂| 国产在线麻豆精品观看| 亚洲人成久久| 久久久久久自在自线| 在线观看日韩av电影| 亚洲一区二区三区涩| 国产一区二区三区久久悠悠色av| 91久久久久久久久| 国产精品高潮久久| 亚洲成色www8888| 欧美日韩精品一区| 欧美一区二区视频97| 欧美激情1区2区3区| 亚洲伊人色欲综合网| 美日韩精品免费| 亚洲午夜精品17c| 免费在线观看成人av| 在线亚洲精品| 老司机午夜精品| 亚洲一区3d动漫同人无遮挡| 欧美xxxx在线观看| 亚洲欧美大片| 欧美激情中文字幕一区二区| 亚洲免费在线观看| 欧美精品粉嫩高潮一区二区| 午夜精品久久久久久久99热浪潮 | 久久爱www| 夜夜嗨av色一区二区不卡| 久久久欧美一区二区| 99综合精品| 裸体素人女欧美日韩| 亚洲视频中文| 欧美第十八页| 欧美一级片在线播放| 欧美日韩你懂的| 亚洲黄色在线观看| 国产日韩专区| 亚洲欧美国产制服动漫| 亚洲全部视频| 蜜臀久久久99精品久久久久久|