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

Hadoop和Couchbase結合使用的技巧

運維 系統運維 Hadoop
Hadoop非常適合處理大量數據并將該信息解析為您可查詢的較小的信息集。但是,通過與 Couchbase Server 集成,您可以對信息執行實時查詢和報告,同時繼續使用 Hadoop 處理大型數據集和數據集的繁重處理工作。Couchbase Server 還使用了一個 MapReduce 查詢系統,這使您能夠輕松地遷移和集成索引和查詢系統,從而有效地提取和操作信息。

Hadoop 和數據處理

Hadoop 將許多重要特性結合在一起,這使 Hadoop 對于將大量數據分解為更小、實用的數據塊非常有用。

Hadoop 的主要組件是 HDFS 文件系統,它支持將信息分布到整個集群中。對于使用這種分布格式存儲的信息,可以通過一個名為 MapReduce 的系統在每個集群節點上進行單獨處理。MapReduce 進程將存儲在 HDFS 文件系統中的信息轉換為更小的、經過處理的、更容易管理的數據塊。

因為 Hadoop 可在多個節點上運行,所以可以使用它來處理大量輸入數據,并將這些數據簡化為更實用的信息塊。此過程可使用一個簡單的 MapReduce 系統來處理。

MapReduce 轉換傳入信息(不一定為結構化格式),將該信息轉換為一種可更輕松地使用、查詢和處理的結構。

例如,一種典型的用途是處理來自數百個不同應用程序的日志信息,以便可以識別特定的問題、計數或其他事件。通過使用 MapReduce 格式,您可以開始度量并查找趨勢,將平常非常多的信息轉換為更小的數據塊。舉例而言,在查看某個 Web 服務器的日志時,您可能希望查看特定頁面上的特定范圍中發生的錯誤。您可以編寫一個 MapReduce 函數來識別特定頁面上的特定錯誤,并在輸出中生成該信息。使用此方法,您可從日志文件中精減多行信息,得到一個僅包含錯誤信息的小得多的記錄集合。

理解 MapReduce

MapReduce 的工作方式分兩個階段。映射 (map) 過程獲取傳入信息,并將這些信息映射到某種標準化的格式。對于某些信息類型,此映射可以是直接和顯式的。例如,如果要處理 Web 日志等輸入數據,那么僅從 Web 日志的文本中提取一列數據即可。對于其他數據,映射可能更復雜。在處理文本信息時,比如研究論文,您可能需要提取短語或更復雜的數據塊。

精減 (reduce) 階段用于收集和匯總數據。精減實際上能夠以多種不同方式發生,但典型的過程是處理一個基本計數、總和或其他基于來自映射階段的個別數據的統計數據。

想象一個簡單的示例,比如 Hadoop 中用作示例 MapReduce 的字數,映射階段將對原始文本進行分解,以識別各個單詞,并為每個單詞生成一個輸出數據塊。reduce 函數獲取這些映射的信息塊,對它們進行精減,以便在所看到的每個惟一單詞上進行遞增。給定一個包含 100 個單詞的文本文件,映射過程將生成 100 個數據塊,但精減階段可對此進行匯總,提供惟一單詞的數量(比如 56 個)和每個單詞出現的次數。

借助 Web 日志,映射將獲取輸入數據,為日志文件中的每個錯誤創建一條記錄,然后為每個錯誤生成一個數據塊,其中包含日期、時間和導致該問題的頁面。

在 Hadoop 內,MapReduce 階段會出現在存儲各個源信息塊的各個節點上。這使 Hadoop 能夠處理以下大型信息集:通過允許多個節點同時處理數據。例如,對于 100 個節點,可以同時處理 100 個日志文件,比通過單個節點快得多地簡化許多 GB(或 TB)的信息。

Hadoop 信息

核心 Hadoop 產品的一個主要限制是,無法在數據庫中存儲和查詢信息。數據添加到 HDFS 系統中,但您無法要求 Hadoop 返回與某個特定數據集匹配的所有數據的列表。主要原因是 Hadoop 不會存儲、結構化或理解存儲在 HDFS 中的數據的結構。這正是 MapReduce 系統需要將信息分析并處理為更加結構化的格式的原因。

但是,我們可以將 Hadoop 的處理能力與更加傳統的數據庫相結合,使我們可以查詢 Hadoop 通過自己的 MapReduce 系統生成的數據。可能的解決方案有許多,其中包括一些傳統 SQL 數據庫,但我們可以通過使用 Couchbase Server 來保持 MapReduce 風格(它對大型數據集非常有效)。

系統之間的數據共享的基本結構如 圖 1 所示。


圖 1. 系統之間的數據共享的基本結構#p#

安裝 Hadoop

如果您尚未安裝 Hadoop,最簡單的方法是使用一個 Cloudera 安裝。為了保持 Hadoop、Sqoop 和 Couchbase 之間的兼容性,***的解決方案是使用 CDH3 安裝(參閱參考資料)。為此,您需要使用 Ubuntu 10.10 到 11.10 版。更高的 Ubuntu 版本會引入不兼容問題,因為它們不再支持 Cloudera Hadoop 安裝所需的一個包。

在安裝之前,請確保已經安裝了一個 Java™ 虛擬機,確保在 JAVA_HOME 變量中為 JDK 配置了正確的主目錄。請注意,您必須擁有完整的 Java 開發工具包,而不只是擁有 Java 運行時環境 (JRE),因為 Sqoop 將代碼編譯為 Couchbase Server 與 Hadoop 之間的導出和導入數據。

要在 Ubuntu 和類似的系統上使用 CDH3 安裝,您需要執行以下步驟:

  1、下載 CDH3 配置包。這會將 CDH3 源文件的配置添加到 apt 存儲庫中。

  2、更新您的存儲庫緩存:$ apt-get update。

  3、。安裝主要 Hadoop 包:$ apt-get install hadoop-0.20。

  4、安裝 Hadoop 組件(參見 清單 1)

  清單 1. 安裝 Hadoop 組件 

  $ for comp in namenode datanode secondarynamenode jobtracker tasktracker
  do
  apt-get install hadoop-0.20-$comp
  done

5、編輯配置文件,以確保您設置了核心組件。

  6、編輯 /etc/hadoop/conf/core-site.xml,使其如 清單 2 所示。

  清單 2. 編輯后的 /etc/hadoop/conf/core-site.xml 文件

  <configuration>
  <property>
  <name>fs.default.name</name>
  <value>hdfs://localhost:9000</value>
  </property>
  </configuration>

  這將配置存儲數據的默認 hdfs 位置。

  編輯 /etc/hadoop/conf/hdfs-site.xml(參見 清單 3)。

  清單 3. 編輯后的 /etc/hadoop/conf/hdfs-site.xml 文件

  <configuration>
  <property>
  <name>dfs.replication</name>
  <value>1</value>
  </property>
  </configuration>

  這支持復制存儲的數據。

  編輯 /etc/hadoop/conf/mapred-site.xml(參見 清單 4)。

  清單 4. 編輯后的 /etc/hadoop/conf/mapred-site.xml 文件

  <configuration>
  <property>
  <name>mapred.job.tracker</name>
  <value>localhost:9001</value>
  </property>
  </configuration>

  這實現了 MapReduce 的作業跟蹤器。

  7、***,編輯 Hadoop 環境,使其正確地指向 /usr/lib/hadoop/conf/hadoop-env.sh 中您的 JDK 安裝目錄。其中會有一個注釋掉的 JAVA_HOME 變量行。您應該取消注釋它,并將它設置為您的 JDK 位置。例如:export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk。

  8、現在,在您的系統上啟動 Hadoop。最簡單的方法是使用 start-all.sh 腳本:$ /usr/lib/hadoop/bin/start-all.sh。

  假設所有設置均已正確配置,您現在應有一個正在運行的 Hadoop 系統。#p#

  Couchbase Server 概述

  Couchbase Server 是一個集群化的、基于文檔的數據庫系統,它使用一個緩存層來提供非常快的數據訪問,將大部分數據都存儲在 RAM 中。該系統使用多個節點和一個自動分散在整個集群上的緩存層。這實現了一種彈性,您可擴大和緊縮集群,以便利用更多 RAM 或磁盤 I/O 來幫助提升性能。

  Couchbase Server 中的所有數據最終會持久存儲在磁盤中,但最初會通過緩存層執行寫入和更新操作,這正是提供高性能的源泉,是我們通過處理 Hadoop 數據來獲得實時信息和查詢內容時可利用的優勢。

  Couchbase Server 的基本形式是一個基本文檔和基于鍵/值的存儲。只有在您知道文檔 ID 時,才能檢索集群提供的信息。在 Couchbase Server 2.0 中,您可以將文檔存儲為 JSON 格式,然后使用視圖系統在存儲的 JSON 文檔上創建一個視圖。視圖是在存儲在數據庫中的文檔上執行的一個 MapReduce 組合。來自視圖的輸出是一個索引,它通過 MapReduce 函數來匹配您定義的結構。索引的存在為您提供了查詢底層的文檔數據的能力。

  我們可以使用此功能從 Hadoop 獲取已處理的信息,將該信息存儲在 Couchbase Server 中,然后使用它作為查詢該數據的基礎。Couchbase Server 可以方便地使用一個 MapReduce 系統來處理文檔和創建索引。這在用于處理數據的方法之間提供了一定的兼容性和一致性水平。

  安裝 Couchbase Server

  安裝 Couchbase Server 很容易。從 Couchbase 網站下載適合您平臺的 Couchbase Server 2.0 版本(參見 參考資料),使用 dpkg 或 RPM(具體依賴于您的平臺)安裝該包。

  安裝之后,Couchbase Server 會自動啟動。要配置它,請打開一個 Web 瀏覽器,并將它指向您的機器的 localhost:8091(或使用該機器的 IP 地址遠程訪問它)。

  按照屏幕上的配置說明進行操作。您可使用在安裝期間提供的大部分默認設置,但最重要的設置是寫入數據庫中的數據的數據文件的位置,以及您分配給 Couchbase Server 的 RAM 量。#p#

  使 Couchbase Server 能夠與 Hadoop 連接器通信

  Couchbase Server 使用 Sqoop 連接器與您的 Hadoop 集群通信。Sqoop 提供了一個連接在 Hadoop 與 Couchbase Server 之間批量傳輸數據。

  從技術上講,Sqoop 是一個設計用于在結構化數據庫與 Hadoop 之間轉換信息的應用程序。Sqoop 這個名稱實際上來源于 SQL 和 Hadoop。

  安裝 Sqoop

  如果使用 CDH3 安裝,您可使用報管理器來安裝 Sqoop:$ sudo apt-get install sqoop。

  這將把 Sqoop 安裝在 /usr/lib/sqoop 中。

  注意:Sqoop 中一個***的 bug 表明它有時會嘗試傳輸uowu的數據集。修補程序包含在 Sqoop 1.4.2 版中。如果遇到問題,請嘗試使用 V1.4.2 或更高的版本。

  安裝 Couchbase Hadoop Connector

  Couchbase Hadoop Connector 是一個支持 Sqoop 與 Couchbase 之間的連接的 Java jar 文件集合。從 Couchbase 網站下載 Hadoop 連接器(參閱 參考資料)。該文件封裝為一個 zip 文件。解壓它,然后運行其中的 install.sh 腳本,提供 Sqoop 系統的位置。例如:$ sudo bash install.sh /usr/lib/sqoop。

  這將安裝所有必要的庫和配置文件。現在我們可以開始在兩個系統之間交換信息了。

將數據從 Couchbase Server 導入 Hadoop

  盡管該場景不是我們這里將直接處理的場景,但需要注意我們可從 Couchbase Server 將數據導入 Hadoop。如果您在 Couchbase Server 中加載了大量數據,并希望利用 Hadoop 來處理和簡化它,這可能很有用。為此,您可以使用以下命令,從 Couchbase Server 將整個數據集加載到 HDFS 中的一個 Hadoop 文件中:$ sqoop import --connect http://192.168.0.71:8091/pools --table cbdata。

  這里提供的 URL 是 Couchbase Server 桶池 (bucket pool) 的位置。這里指定的表實際上是 HDFS 中將存儲數據的目錄的名稱。

  數據本身被存儲為來自 Couchbase Server 的信息的一種鍵/值轉儲形式。在 Couchbase Server 2.0 中,這意味著數據是使用惟一文檔 ID 寫出的,包含記錄的 JSON 值。

  將 JSON 數據寫入 Hadoop MapReduce

  要在 Hadoop 與 Couchbase Server 之間交換信息,需要使用一種通用語言來表達這些信息,在本例中使用的是 JSON(參見 清單 5)。

  清單 5. 在 Hadoop MapReduce 中輸出 JSON

  package org.mcslp;
  import java.io.IOException;
  import java.util.*;
  import org.apache.hadoop.fs.Path;
  import org.apache.hadoop.conf.*;
  import org.apache.hadoop.io.*;
  import org.apache.hadoop.mapred.*;
  import org.apache.hadoop.util.*;
  import com.google.gson.*;
  public class WordCount {
  public static class Map extends MapReduceBase implements Mapper<LongWritable,
  Text, Text, IntWritable> {
  private final static IntWritable one = new IntWritable(1);
  private Text word = new Text();
  public void map(LongWritable key, Text value, OutputCollector<Text,
  IntWritable> output, Reporter reporter) throws IOException {
  String line = value.toString();
  StringTokenizer tokenizer = new StringTokenizer(line);
  while (tokenizer.hasMoreTokens()) {
  word.set(tokenizer.nextToken());
  output.collect(word, one);
  }
 }
}
  public static class Reduce extends MapReduceBase implements Reducer<Text,
  IntWritable, Text, Text> {
  class wordRecord {
  private String word;
  private int count;
  wordRecord() {
  }
 }
  public void reduce(Text key,
  Iterator<IntWritable> values,
  OutputCollector<Text, Text> output,
  Reporter reporter) throws IOException {
  int sum = 0;
  while (values.hasNext()) {
  sum += values.next().get();
  }
  wordRecord word = new wordRecord();
  word.word = key.toString();;
  word.count = sum;
  Gson json = new Gson();
  System.out.println(json.toJson(word));
  output.collect(key, new Text(json.toJson(word)));
  }
 }
  public static void main(String[] args) throws Exception {
  JobConf conf = new JobConf(WordCount.class);
  conf.setJobName("wordcount");
  conf.setOutputKeyClass(Text.class);
  conf.setOutputValueClass(IntWritable.class);
  conf.setMapperClass(Map.class);
  conf.setReducerClass(Reduce.class);
  conf.setInputFormat(TextInputFormat.class);
  conf.setOutputFormat(TextOutputFormat.class);
  FileInputFormat.setInputPaths(conf, new Path(args[0]));
  FileOutputFormat.setOutputPath(conf, new Path(args[1]));
  JobClient.runJob(conf);
  }
 }

 

 

   該代碼是 Hadoop 發行版所提供的字數示例的修改版。

  此版本使用 Google Gson 庫從處理過程的精減階段寫入 JSON 信息。為了方便起見,我們使用了一個新類 (wordRecord),它由 Gson 轉換為一條 JSON 記錄,這種記錄是 Couchbase Server 逐個文檔地處理和解析內容所需的格式。

  請注意,我們沒有為 Hadoop 定義一個 Combiner 類。這將阻止 Hadoop 嘗試重新精減該信息,該操作在當前的代碼中會失敗,因為我們的精減階段僅接收該單詞和一位數,并輸出一個 JSON 值。對于輔助的精減/組合階段,我們需要解析 JSON 輸入或定義一個新 Combiner 類,以便輸出信息的 JSON 版本。這稍微簡化了定義。

  要在 Hadoop 中使用此代碼,首先需要將 Google Gson 庫復制到 Hadoop 目錄中 (/usr/lib/hadoop/lib)。然后重新啟動 Hadoop,以確保 Hadoop 已經正確識別出該庫。

  接下來,將您的代碼編譯到一個目錄中: $ javac -classpath ${HADOOP_HOME}/hadoop-${HADOOP_VERSION}-core.jar:./google-gson-2.2.1/gson-2.2.1.jar -d wordcount_classes WordCount.java 。

  現在為您的庫創建一個 jar 文件: $ jar -cvf wordcount.jar -C wordcount_classes/。

  完成此過程后,您可以將一些文本文件復制到某個目錄中,然后使用此 jar 文件將這些文本文件處理為許多獨立的單詞,創建一條 JSON 記錄來包含每個單詞和計數。例如,要在一些 Project Gutenberg 文本上處理此數據: $ hadoop jar wordcount.jar org.mcslp.WordCount /user/mc/gutenberg /user/mc/gutenberg-output。

  這將在我們的目錄中生成已由 Hadoop 內的 MapReduce 函數統計的單詞列表。

  將數據從 Hadoop 導出到 Couchbase Server

  要從 Hadoop 取回數據并導入 Couchbase Server 中,則需要使用 Sqoop 導出該數據: $ sqoop export --connect http://10.2.1.55:8091/pools --table ignored --export-dir gutenberg-output。

  此示例中忽略了 --table 參數,但 --export-dir 是要導出的信息所在的目錄的名稱。#p#

 

  在 Couchbase Server 中編寫 MapReduce

  在 Hadoop 中,MapReduce 函數是使用 Java 編寫的。在 Couchbase Server 中,MapReduce 函數是使用 Javascript 編寫的。作為一種已解釋的語言,這意味著您不需要編譯視圖,它會支持您編輯和細化 MapReduce 結構。

  要在 Couchbase Server 中創建一個視圖,請打開管理控制臺(在 http://localhost:8091 上),然后單擊 View 按鈕。視圖收集在一個設計文檔中。您可以在單個設計文檔中創建多個視圖,也可以創建多個設計文檔。要提升服務器的總體性能,系統還支持一種可編輯的開發視圖以及一個無法編輯的生產視圖。生產視圖無法編輯是因為這么做會使視圖索引無效,并會導致需要重新構建索引。

  單擊 Create Development View 按鈕并命名您的設計文檔和視圖。

  在 Couchbase Server 內,有兩個相同的函數:map 和 reduce。map 函數用于將輸入數據(JSON 文檔)映射到某個表。然后使用 reduce 函數匯總和精減該表。reduce 函數是可選的,不是索引功能所必需的,所以,出于本文的目的,我們將忽略 reduce 函數。

  對于 map 函數,函數的格式如 清單 6 所示。

  清單 6. map 函數的格式

  map(doc) {
  }

  參數 doc 是每個存儲的 JSON 文檔。Couchbase Server 的存儲格式是一種 JSON 文檔,視圖是使用 Javascript 語言編寫的,所以我們可使用以下語句訪問 JSON 中一個名為 count 的字段:doc.count。

  要從 map 函數發出信息,可以調用 emit() 函數。emit() 函數接受兩個參數,***個是鍵(用于選擇和查詢信息),第二個參數是相應的值。因此,我們可以創建一個 map 函數來使用來輸出單詞和計數,如 清單 7 中的代碼所示。

  清單 7. 輸出單詞和計數的 map 函數

  function (doc) {
  if (doc.word) {
  emit(doc.word,doc.count);
  }
 }

  這將為每個輸出文檔輸出一行數據,其中包含文檔 ID(實際上是我們的單詞)、用作鍵的單詞和該單詞在源文本中出現的次數。可在 清單 8 中看到原始的 JSON 輸出。

  清單 8. 原始的 JSON 輸出

  {"total_rows":113,"rows":[
  {"id":"acceptance","key":"acceptance","value":2},
  {"id":"accompagner","key":"accompagner","value":1},
  {"id":"achieve","key":"achieve","value":1},
  {"id":"adulteration","key":"adulteration","value":1},
  {"id":"arsenic","key":"arsenic","value":2},
  {"id":"attainder","key":"attainder","value":1},
  {"id":"beerpull","key":"beerpull","value":2},
  {"id":"beware","key":"beware","value":5},
  {"id":"breeze","key":"breeze","value":2},
  {"id":"brighteyed","key":"brighteyed","value":1}
  ]
 }

  在輸出中,id 是文檔 ID,key 是您在 emit 語句中指定的鍵,value 是在 emit 語句中指定的值。

  獲取實時數據

  現在我們已在 Hadoop 中處理了信息,請將它導入 Couchbase Server 中,然后在 Couchbase Server 中為該數據創建了一個視圖,我們可以開始查詢已處理和存儲的信息了。視圖可使用一個 REST 樣式的 API 來訪問,或者在使用一個 Couchbase Server SDK 時,通過相應的視圖查詢函數來訪問它。

  查詢可通過 3 種主要選擇來執行:

  單獨的鍵。例如,顯示與某個特定鍵(比如 'unkind')匹配的信息。

  鍵列表。您可提供一個鍵值數組,這將返回其鍵值與一個提供的值匹配的所有記錄。例如,['unkind','kind'] 將返回與其中一個單詞匹配的記錄。

  鍵范圍。您可指定一個開始和結束鍵。

  例如,要找到一個指定的單詞的數量,可使用 key 參數進行查詢:

  http://192.168.0.71:8092/words/_design/dev_words/_view/byword?connection_timeout=
  60000&limit=10&skip=0&key=%22breeze%22

  Couchbase Server 會很自然地采用 UTF-8 排序方式輸出一個 MapReduce 的按指定的鍵排序的結果。這意味著您可以通過指定開始值和結束值來獲取一個值范圍。例如,要獲取 'breeze' 與 'kind' 之間的所有單詞,可使用:

  http://192.168.0.71:8092/words/_design/dev_words/_view/byword?connection_timeout=
  60000&limit=10&skip=0&startkey=%22breeze%22&endkey=%22kind%22

  該查詢很簡單,但非常強大,尤其是在您認識到可以將它與靈活的視圖系統結合使用,生成具有您想要的格式的數據的時候。

  結束語

  Hadoop 本身提供了一個強大的處理平臺,但沒有提供從已處理的數據中實際提取有用信息的方法。通過將 Hadoop 連接到另一個系統,可使用該系統來查詢和提取信息。因為 Hadoop 使用 MapReduce 進行相關處理,所以您可以通過 Couchbase Server 中的 MapReduce 系統,利用 MapReduce 的知識來提供查詢平臺。使用此方法,您可以在 Hadoop 中處理數據,以 JSON 文檔格式將數據從 Hadoop 導出到 Couchbase Server 中,然后在 Couchbase Server 中使用 MapReduce 查詢已處理的信息。

 

責任編輯:黃丹 來源: developerworks
相關推薦

2012-04-19 10:04:20

ibmdw

2023-05-26 17:21:15

PythonRust

2009-07-31 16:28:26

ibmdwJavaJSP

2015-09-21 09:20:11

C#Couchbase使用

2015-09-17 11:04:07

KindleDropbox資料同步

2021-03-27 10:54:34

Python函數代碼

2022-08-05 07:43:40

IoNT區塊鏈中心化

2023-08-23 08:00:00

2019-03-25 10:30:19

開發技能代碼

2015-04-17 16:44:22

swiftOC

2017-08-16 08:45:50

EVPNVXLAN網絡

2011-01-19 14:39:59

Qmail技巧

2011-04-01 10:53:43

2011-01-21 14:30:02

Thunderbird技巧

2011-12-15 01:01:16

ibmdw

2011-07-08 17:49:38

WITH ASCTE

2011-03-09 13:06:29

LimitMySQL

2023-06-08 09:00:00

2009-11-24 16:40:13

VS2005軟件

2010-01-07 17:41:19

JSON定義法
點贊
收藏

51CTO技術棧公眾號

亚洲电影免费观看| 国产在线一区观看| 亚洲精品一区二区三区不| 亚洲国产欧美不卡在线观看| 人人爽人人爽人人片av| 精品99在线| 欧美日韩综合一区| 中文字幕日韩一区二区三区不卡| 国产日韩在线观看一区| 91视频久久| 欧美一区二区成人| 欧美日韩性生活片| 成人精品福利| 国产一区二区三区日韩| 日韩中文在线不卡| 日批视频免费看| 在线亚洲人成| 亚洲男人的天堂一区二区| 国产精品二区三区| 国产一卡二卡三卡| 国产精品久久久久9999赢消| 日韩欧美国产不卡| 国产精品69页| 中文字幕在线观看播放| 99国产精品久久久久久久久久| 国产精品福利无圣光在线一区| 日韩一级片大全| 欧美天堂社区| 欧美日韩精品久久久| 91亚洲精品国产| 黄色网址在线播放| 国产成人午夜片在线观看高清观看| 57pao成人国产永久免费| 肉色超薄丝袜脚交69xx图片| 98视频精品全部国产| 欧美亚洲国产一区在线观看网站 | 国产精品99久久久久久宅男| 欧美激情欧美激情在线五月| www色com| 欧美freesex8一10精品| 欧美精品三级日韩久久| 日本a级片免费观看| av网站大全在线| 国产午夜精品理论片a级大结局| 95av在线视频| 中文字幕乱码在线观看| 最新日韩欧美| 欧美猛交免费看| 国产一二三四区在线| 国产厕拍一区| 日韩欧美中文字幕一区| 中文字幕av不卡在线| 欧美性video| 国产精品久久99| 久久久一本精品99久久精品| 亚洲一区二区影视| 日韩中文字幕一区二区三区| 91精品国产高清自在线| 免费在线一区二区三区| 婷婷中文字幕一区| 自拍亚洲一区欧美另类| 受虐m奴xxx在线观看| 精品国产一区二区三区不卡蜜臂| 日韩三级在线观看| 国产女同无遮挡互慰高潮91| 朝桐光一区二区| 欧美性xxxxx极品| 99在线免费视频观看| 91这里只有精品| 国产日韩精品一区| 欧美亚洲爱爱另类综合| 水莓100在线视频| 99精品视频一区二区三区| 成人欧美一区二区三区黑人免费| 国产99对白在线播放| 韩国精品免费视频| 成人天堂噜噜噜| 91亚洲欧美激情| 久久裸体视频| 国产精品久久久久av免费| 国产午夜小视频| 亚洲精选成人| 欧美亚洲成人精品| 日韩特黄一级片| 久久国产一二区| 国产精品av电影| 欧美在线视频精品| 日本麻豆一区二区三区视频| 国产精品美女主播| 制服丨自拍丨欧美丨动漫丨| 欧美裸体在线版观看完整版| 中文字幕久久久av一区| 久草网站在线观看| 亚洲欧美不卡| 成人激情在线观看| 日本波多野结衣在线| 久久精品欧美一区二区三区麻豆| 亚洲人久久久| 成人ssswww在线播放| 91国在线观看| 日韩女优在线视频| 成人三级视频| 久久久人成影片一区二区三区观看 | 中文字幕在线视频一区| 免费视频爱爱太爽了| 欧美亚洲韩国| 欧美www视频| 日韩不卡av在线| 伊人影院久久| 成人福利网站在线观看| av女名字大全列表| 亚洲卡通动漫在线| 午夜激情福利在线| gogo久久日韩裸体艺术| 日韩在线欧美在线| 日本三级视频在线| 美女网站一区二区| 国产一区免费在线| 日本免费中文字幕在线| 精品国产乱码久久久久久婷婷 | 中文字幕 在线观看| 欧美人伦禁忌dvd放荡欲情| 国产成人av片| 精品盗摄女厕tp美女嘘嘘| 久久艹在线视频| 久久露脸国语精品国产91| 国内精品伊人久久久久影院对白| 国产日韩欧美一区二区| 9i精品一二三区| 亚洲福利一区二区| 国产一区二区在线观看免费视频| 久久精品国产亚洲5555| 亚洲天堂日韩电影| 国产成人在线观看网站| 激情久久五月天| 欧美日韩综合久久| 青青草原国产在线| 欧美日韩亚洲国产综合| 国产极品一区二区| 午夜影院欧美| 国产精品久在线观看| 午夜福利视频一区二区| 亚洲日本一区二区| 中文字幕一区二区三区四区在线视频| 91嫩草精品| 久久在线观看视频| 国产成人无码专区| 国产91精品入口| 免费看啪啪网站| 欧美在线va视频| 亚洲精品在线91| 精品久久免费视频| 免费人成黄页网站在线一区二区| 清纯唯美一区二区三区| 亚洲淫成人影院| 亚洲激情在线观看| 精品肉丝脚一区二区三区| 国产一区二区三区免费看| 久久国产精品久久| 日韩成人动漫| 亚洲欧美成人一区二区在线电影| 国产在线视频99| 国产成人亚洲精品狼色在线| 好吊色视频988gao在线观看| 国产一区一区| 欧美激情免费看| 亚洲精品国产精品国| 一区二区三区在线观看动漫| 五月天视频在线观看| 日韩精品一区二区三区免费观影| 日本中文字幕不卡免费| 成年在线电影| 欧美日韩日日骚| 欧美a级片免费看| 国产综合色精品一区二区三区| 性刺激综合网| 国产精品成人国产| 久久91亚洲人成电影网站 | 亚洲成人久久网| 日本一二三区不卡| 91一区二区在线| 午夜dv内射一区二区| 成人同人动漫免费观看| 国产精品亚洲аv天堂网| 91大神xh98hx在线播放| 欧美日韩不卡一区| 久久精品99国产精| 国产mv日韩mv欧美| 东京热加勒比无码少妇| 国产成人短视频在线观看| 国产成人福利视频| 欧洲不卡av| 日韩欧美国产精品一区| 亚洲精品77777| 国产精品日产欧美久久久久| 欧美性受xxxx黒人xyx性爽| 中文字幕亚洲综合久久五月天色无吗'' | 国产一区二区你懂的| 日本一区二区视频| 精品视频一二| 国产成人精品电影久久久| 欧美极品另类| 亚洲丁香婷深爱综合| 99久久久无码国产精品免费蜜柚 | 欧美精品二区三区四区免费看视频| 成人免费无遮挡| 日韩在线国产精品| 亚洲黄色小说网| 欧美日韩国产精品专区| 久久婷婷五月综合| 国产suv精品一区二区三区| 日本日本19xxxⅹhd乱影响| 欧美日韩水蜜桃| 国产精品久久久久久久久久小说| melody高清在线观看| 日韩精品中文字幕在线不卡尤物| 97人妻一区二区精品视频| 亚洲色图丝袜美腿| 亚洲一区二区三区蜜桃| 国产一区二区伦理| 免费观看精品视频| 欧美高清在线| 天堂资源在线亚洲资源| 国产精品qvod| 国产在线久久久| 欧美aa在线观看| 久久天天躁日日躁| av网站在线播放| 亚洲国模精品私拍| 国产视频在线免费观看| 色婷婷国产精品| 久久亚洲国产成人精品性色| 成人欧美一区二区三区小说| 久久精品老司机| 成人一区在线看| 国产视频在线视频| 最新国产乱人伦偷精品免费网站| 中文字幕成人一区| 欧美黑白配在线| 高清国产在线一区| 色综合视频一区二区三区44| 日本精品在线视频| 高清精品在线| 欧美激情亚洲自拍| 96av在线| 久久久噜噜噜久噜久久| 黄色免费网站在线| 曰本色欧美视频在线| 亚州男人的天堂| 日韩成人在线视频观看| 亚洲av无码国产精品永久一区| 欧美日韩国产小视频在线观看| 亚洲欧美偷拍一区| 亚洲高清视频中文字幕| 国产一级做a爰片在线看免费| 国产精品美女久久久久久久久 | 91美女片黄在线观看91美女| 激情小说欧美色图| 久久国产精品免费| 日本中文字幕观看| 日本在线不卡视频| 成人在线观看黄| 亚洲影院一区| 久久人妻精品白浆国产| 亚洲永久免费| 国产精品69页| 人人精品人人爱| 黄色免费网址大全| 首页国产欧美久久| 亚洲欧美日韩精品一区| 久久99国产精品免费网站| www.涩涩涩| 蜜桃精品视频在线| 中文字幕色网站| 国产精品一区在线| 亚洲 自拍 另类 欧美 丝袜| 国产精品一区在线观看你懂的| 日本中文字幕精品| 成人黄色av电影| 深爱五月激情网| 久久久久久一二三区| 国产精久久一区二区三区| 国产调教视频一区| 国产视频精品免费| 亚洲夂夂婷婷色拍ww47| 日本免费一二三区| 色婷婷激情一区二区三区| 亚洲视频在线观看免费视频| 欧美一区二区日韩| 人妻91麻豆一区二区三区| 亚洲国产小视频| 毛片在线播放网站| xvideos成人免费中文版| 色爱综合区网| 茄子视频成人在线| 欧美xxxx性| 成人三级在线| 国产麻豆一区二区三区精品视频| 中文字幕中文字幕在线中心一区| 欧美精品一级| 亚洲中文字幕无码不卡电影| 日本aⅴ精品一区二区三区| 亚洲小视频网站| 91蜜桃免费观看视频| 久久精品色妇熟妇丰满人妻| 一区二区三区日韩精品| 欧美日韩综合一区二区三区| 7777精品伊人久久久大香线蕉经典版下载 | 一区二区三区在线免费| 日韩精品在线一区二区三区| 在线不卡免费av| 色窝窝无码一区二区三区| 亚洲一区av在线播放| 波多野结衣在线网站| 欧美日韩福利在线观看| 人人视频精品| 97人人澡人人爽| 波多野结衣在线播放一区| www.黄色网址.com| 美女mm1313爽爽久久久蜜臀| 蜜桃视频无码区在线观看| 国产三级欧美三级日产三级99| 免费在线观看国产精品| 欧美军同video69gay| 亚洲日本中文字幕在线| 久久视频免费观看| 怡红院成人在线| 成人在线观看91| 欧美激情第8页| 在线观看免费视频高清游戏推荐| 成人晚上爱看视频| 天天色影综合网| 欧美性猛片aaaaaaa做受| 色香蕉在线视频| 欧美成人合集magnet| 久久精品资源| 亚洲mv在线看| 久久精品麻豆| 奇米777第四色| 亚洲美女区一区| 国产女人爽到高潮a毛片| 国产一区二区三区在线观看视频| av今日在线| aa成人免费视频| 国产精品www994| 成年人网站av| 国产精品入口麻豆原神| 天堂网一区二区| 亚洲久久久久久久久久久| 麻豆蜜桃在线| 亚洲最大激情中文字幕| 色综合久久网| 午夜国产一区二区三区| 久久久不卡影院| 亚洲中文字幕无码爆乳av| 亚洲小视频在线观看| 韩日成人影院| 欧美高清视频一区| 国产毛片久久| 无码人妻丰满熟妇啪啪欧美| 狠狠躁夜夜躁人人躁婷婷91| 少妇高潮一区二区三区69| 久久久亚洲成人| 天天躁日日躁成人字幕aⅴ| 91免费黄视频| 99九九99九九九视频精品| 日韩xxxxxxxxx| 国产一区二区动漫| 国精产品一区一区三区四川| 久久久久九九九| 欧美婷婷在线| 星空大象在线观看免费播放| 午夜伊人狠狠久久| 色网站在线免费观看| 国产精品久久久久久久av电影| 第九色区aⅴ天堂久久香| 亚洲一级片网站| 亚洲欧美一区二区不卡| 男人天堂av网| 51午夜精品视频| 一本色道久久综合狠狠躁的番外| 国产精品无码人妻一区二区在线| 久久婷婷综合激情| 亚洲中文无码av在线| 中文字幕在线日韩| 成人在线精品| 欧美 日本 亚洲| 久久久久成人黄色影片| 久久久久久av无码免费看大片| 在线播放亚洲激情| 91成人福利| 日韩一级片播放| 《视频一区视频二区| 四虎永久在线精品免费网址| 日韩免费观看网站| 香蕉视频官网在线观看日本一区二区| 国产黑丝在线视频| 日本韩国一区二区三区视频| 在线观看麻豆| 国产精品视频免费一区二区三区|