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

Flink + YARN + Gitlab 自動提交代碼全流程詳解

大數據
本文將詳細介紹 Flink + FlinkSQL + YARN + Gitlab 的自動提交代碼全流程,涵蓋環境準備、代碼管理、作業開發、CI/CD 流程設計、自動提交與監控等核心環節,幫助企業構建實時計算的自動化開發與部署體系。

在大數據實時計算領域,Apache Flink 憑借其流批一體、低延遲、高吞吐的特性,成為企業級實時計算的主流選擇。FlinkSQL 作為 Flink 的關系型 API,降低了實時開發的門檻,讓開發者通過 SQL 即可完成復雜流處理邏輯。而 YARN 作為 Hadoop 生態的資源調度平臺,為 Flink 作業提供了穩定的資源管理與隔離能力。Gitlab 則作為代碼托管與 CI/CD 平臺,實現了代碼版本控制與自動化流程的串聯。

本文將詳細介紹 Flink + FlinkSQL + YARN + Gitlab 的自動提交代碼全流程,涵蓋環境準備、代碼管理、作業開發、CI/CD 流程設計、自動提交與監控等核心環節,幫助企業構建實時計算的自動化開發與部署體系。

一、環境準備

1. 組件版本選擇

為確保各組件兼容性,推薦以下版本組合(基于企業級穩定實踐):

組件

版本

說明

Hadoop

3.3.1

包含 YARN 資源調度器

Flink

1.16.0

支持 FlinkSQL 與 YARN 集成

Gitlab

14.9.0

代碼托管與 CI/CD

Java

1.8

Flink 運行基礎環境

Maven

3.8.6

項目構建工具

2. 環境安裝與配置

(1) Hadoop & YARN 集群搭建

假設已部署 Hadoop 集群(需包含 HDFS 和 YARN),核心配置如下:

? core-site.xml(HDFS 配置):

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://namenode:8020</value>
  </property>
</configuration>

? yarn-site.xml(YARN 配置):

<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>resourcemanager</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
</configuration>

啟動 YARN 后,可通過 http://<resourcemanager>:8088 訪問 YARN Web UI,確認集群狀態正常。

(2) Flink on YARN 配置

下載 Flink 1.16.0 二進制包并解壓,修改 conf/flink-conf.yaml:

# Flink on YARN 核心配置
jobmanager.rpc.address: localhost
rest.port: 8081
# YARN 隊列配置(需與 YARN 隊列名稱一致)
yarn.application.queue: flink_queue
# 狀態后端(推薦使用 RocksDB)
state.backend: rocksdb
# Checkpoint 存儲(HDFS 路徑)
state.checkpoints.dir: hdfs://namenode:8020/flink/checkpoints

將 Hadoop 配置文件(core-site.xml、hdfs-site.xml、yarn-site.xml)軟鏈至 Flink 的 conf 目錄:

ln -s $HADOOP_HOME/etc/hadoop/core-site.xml $FLINK_HOME/conf/
ln -s $HADOOP_HOME/etc/hadoop/hdfs-site.xml $FLINK_HOME/conf/
ln -s $HADOOP_HOME/etc/hadoop/yarn-site.xml $FLINK_HOME/conf/

(3) Gitlab 部署與基礎配置

? 部署 Gitlab:可通過 Docker 快速部署(推薦使用 Gitlab 官方鏡像):

docker run -d --name gitlab \
  -p 8080:80 -p 2222:22 \
  -v /srv/gitlab/config:/etc/gitlab \
  -v /srv/gitlab/logs:/var/log/gitlab \
  -v /srv/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:14.9.0-ce.0

訪問 http://<gitlab-ip>:8080,初始化管理員密碼后創建項目(如 flink-realtime)。

? 配置 SSH 密鑰:本地生成 SSH 密鑰(ssh-keygen -t rsa),將公鑰(~/.ssh/id_rsa.pub)添加到 Gitlab 用戶設置中,確保代碼可免密推送。

二、Gitlab 代碼管理規范

1. 項目結構設計

基于 Maven 構建Flink作業,推薦項目結構如下:

flink-realtime/
├── src/
│   ├── main/
│   │   ├── java/          # Java/Scala 代碼(如 UDF、自定義 Source/Sink)
│   │   ├── resources/     # 配置文件與 SQL 腳本
│   │   │   ├── sql/       # FlinkSQL 腳本(如 user_behavior.sql)
│   │   │   ├── application.properties # 作業配置(并行度、Kafka 地址等)
│   │   │   └── log4j2.xml # 日志配置
│   │   └── scala/         # Scala 代碼(可選)
│   └── test/              # 單元測試
├── .gitlab-ci.yml         # Gitlab CI/CD 配置文件
├── pom.xml                # Maven 依賴配置
└── README.md              # 項目說明文檔

2. 分支管理策略

采用 Git Flow 分支模型,核心分支如下:

分支類型

名稱

用途

合并目標

主分支

master

生產環境代碼,僅允許 CI/CD 自動更新

開發分支

develop

開發環境集成分支

master

功能分支

feature/xxx

新功能開發(如 feature/user_behavior)

develop

修復分支

hotfix/xxx

生產問題修復

master/develop

3. 代碼提交規范

為便于 CI/CD 流程追蹤,提交信息需遵循以下格式:

<type>(<scope>): <description>

# 示例
feat(sql): 新增用戶行為實時統計SQL
fix(config): 修復Kafka消費組配置錯誤
docs(ci): 更新Gitlab CI部署文檔
  • type:類型(feat 新功能、fix 修復、docs 文檔、style 格式、refactor 重構等)
  • scope:影響范圍(如 sql、config、ci)
  • description:簡潔描述(不超過50字符)

三、Flink 作業開發(以 FlinkSQL 為核心)

1. 依賴配置(pom.xml)

核心依賴包括 Flink 核心、FlinkSQL、連接器(如 Kafka、MySQL)等:

<dependencies>
    <!-- Flink 核心 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-java</artifactId>
        <version>1.16.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java_2.12</artifactId>
        <version>1.16.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- FlinkSQL -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-api-java-bridge_2.12</artifactId>
        <version>1.16.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-planner_2.12</artifactId>
        <version>1.16.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- Kafka 連接器 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-kafka_2.12</artifactId>
        <version>1.16.0</version>
    </dependency>
    <!-- MySQL 連接器(用于結果寫入) -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-jdbc_2.12</artifactId>
        <version>1.16.0</version>
    </dependency>
</dependencies>

2. FlinkSQL 腳本開發

以“用戶行為實時統計”為例,開發 FlinkSQL 腳本(resources/sql/user_behavior.sql):

-- 1. 創建 Kafka 數據源表(用戶行為日志)
CREATE TABLE user_behavior (
    user_id BIGINT,
    item_id BIGINT,
    behavior STRING, -- 行為類型:pv(瀏覽)、buy(購買)、cart(加購)、fav(收藏)
    ts TIMESTAMP(3)
) WITH (
    'connector'='kafka',
    'topic'='user_behavior',
    'properties.bootstrap.servers'='kafka1:9092,kafka2:9092',
    'properties.group.id'='flink_consumer_group',
    'format'='json',
    'scan.startup.mode'='latest-offset'
);

-- 2. 創建 MySQL 結果表(每小時行為統計)
CREATE TABLE behavior_hourly_stats (
    window_start TIMESTAMP(3),
    window_end TIMESTAMP(3),
    behavior STRING,
    count BIGINT,
    PRIMARY KEY (window_start, behavior) NOT ENFORCED
) WITH (
    'connector'='jdbc',
    'url'='jdbc:mysql://mysql:3306/realtime_stats',
    'table-name'='behavior_hourly_stats',
    'username'='flink',
    'password'='flink123'
);

-- 3. 執行統計邏輯(每小時窗口計數)
INSERT INTO behavior_hourly_stats
SELECT
    TUMBLE_START(ts, INTERVAL'1'HOUR) AS window_start,
    TUMBLE_END(ts, INTERVAL'1'HOUR) AS window_end,
    behavior,
    COUNT(*) AS count
FROM user_behavior
GROUPBY
    TUMBLE(ts, INTERVAL'1'HOUR),
    behavior;

3. 作業主程序開發

通過 Java 代碼加載 SQL 腳本并執行,實現作業提交(src/main/java/com/example/FlinkSQLJob.java):

package com.example;

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.EnvironmentSettings;
import org.apache.flink.table.api.TableEnvironment;
import org.apache.flink.table.api.TableResult;
import java.io.File;

publicclassFlinkSQLJob {
    publicstaticvoidmain(String[] args)throws Exception {
        // 1. 創建流執行環境(使用 YARN 模式)
        finalStreamExecutionEnvironmentenv= StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(4); // 設置全局并行度

        // 2. 創建 TableEnvironment(Blink Planner)
        EnvironmentSettingssettings= EnvironmentSettings.newInstance()
                .useBlinkPlanner()
                .inStreamingMode()
                .build();
        TableEnvironmenttableEnv= TableEnvironment.create(settings);

        // 3. 加載 SQL 腳本文件
        StringsqlPath=newFile("resources/sql/user_behavior.sql").getAbsolutePath();
        StringsqlScript=newString(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get(sqlPath)));

        // 4. 執行 SQL 腳本(按語句分割并逐條執行)
        String[] sqlStatements = sqlScript.split(";(?=(?:[^']*'[^']*')*[^']*$)");
        for (String sql : sqlStatements) {
            if (!sql.trim().isEmpty()) {
                TableResultresult= tableEnv.executeSql(sql.trim());
                System.out.println("SQL executed: " + sql.trim());
            }
        }

        // 5. 提交作業(FlinkSQL 的 INSERT INTO 會自動觸發執行)
        env.execute("FlinkSQL User Behavior Hourly Stats");
    }
}

4. 作業配置(application.properties)

將動態配置(如 Kafka 地址、并行度)提取到配置文件中,避免硬編碼:

# 作業名稱
job.name=flink_sql_user_behavior
# 并行度
job.parallelism=4
# Kafka 配置
kafka.bootstrap.servers=kafka1:9092,kafka2:9092
kafka.topic=user_behavior
kafka.group.id=flink_consumer_group
# MySQL 配置
mysql.url=jdbc:mysql://mysql:3306/realtime_stats
mysql.username=flink
mysql.password=flink123
# Checkpoint 配置
checkpoint.interval=60000 # 1分鐘一次 Checkpoint
checkpoint.timeout=300000 # Checkpoint 超時時間5分鐘

四、YARN 資源調度與作業提交

1. Flink on YARN 模式選擇

Flink on YARN 支持三種模式,需根據場景選擇:

模式

特點

適用場景

Session Mode

預啟動 YARN Application,共享 JobManager

短作業、低資源消耗場景

Per-Job Mode

每個作業獨立啟動 YARN Application

作業間資源隔離要求高

Application Mode

推薦:作業主程序在 YARN 中執行,客戶端僅提交

生產環境主流模式

本文以 Application Mode 為例,該模式下作業主邏輯在 YARN 的 Application Master 中運行,客戶端只需提交 JAR 包,避免客戶端資源占用。

2. 手動提交作業到 YARN

通過 flink run -yarn 命令提交作業,核心參數如下:

flink run -t yarn-application \
  -Dyarn.application.name=flink_sql_user_behavior \
  -Dyarn.application.queue=flink_queue \
  -Dparallelism.default=4 \
  -Djobmanager.memory.process.size=1600m \
  -Dtaskmanager.memory.process.size=1728m \
  -Dtaskmanager.numberOfTaskSlots=4 \
  -c com.example.FlinkSQLJob \
  /path/to/flink-realtime-1.0-SNAPSHOT.jar

參數說明:

  • -t yarn-application:指定 Application Mode
  • -Dyarn.application.name:YARN 應用名稱
  • -Dyarn.application.queue:YARN 隊列(需與 YARN 配置一致)
  • -Dparallelism.default:默認并行度
  • -c:主程序全限定類名

提交后,可通過 YARN Web UI(http://<resourcemanager>:8088)查看作業狀態,點擊“Tracking UI”進入 Flink Web UI 監控作業指標。

五、Gitlab CI/CD 自動提交流程設計

1. Gitlab CI/CD 原理

Gitlab CI/CD 通過 .gitlab-ci.yml 定義流水線(Pipeline),流水線包含多個階段(Stage),每個階段包含多個作業(Job)。當代碼提交/合并到指定分支時,Gitlab Runner 自動執行流水線,完成構建、測試、部署等流程。

2. Gitlab Runner 配置

(1) 安裝 Gitlab Runner

在可訪問 YARN 集群的節點上安裝 Gitlab Runner(以 Linux 為例):

# 添加 Gitlab Runner 官方倉庫
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

# 安裝 Runner
sudo yum install -y gitlab-runner

# 注冊 Runner(需從 Gitlab 項目獲取注冊 URL 和 Token)
sudo gitlab-runner register

注冊時需配置:

  • Gitlab instance URL:Gitlab 地址(如 http://<gitlab-ip>:8080)
  • Registration token:從 Gitlab 項目 Settings -> CI/CD -> Runners 獲取
  • Executor type:選擇 shell(需確保 Runner 節點已安裝 Java、Maven、Flink、Hadoop 客戶端)

(2) Runner 權限配置

確保 Runner 用戶(默認 gitlab-runner)有權限訪問 HDFS 和 YARN:

# 將 gitlab-runner 用戶加入 hadoop 用戶組
sudo usermod -aG hadoop gitlab-runner

# 配置 HDFS 代理用戶(在 core-site.xml 中添加)
<property>
  <name>hadoop.proxyuser.gitlab-runner.groups</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.gitlab-runner.hosts</name>
  <value>*</value>
</property>

重啟 HDFS 和 YARN 使代理用戶配置生效。

3. .gitlab-ci.yml 流水線配置

在項目根目錄創建 .gitlab-ci.yml,定義以下階段:

階段

作用

作業示例

build

Maven 打包生成 JAR

build_job

test

單元測試、SQL 語法校驗

test_job

deploy

提交作業到 YARN(生產/開發)

deploy_prod_job

完整配置示例:

# 定義流水線階段
stages:
-build
-test
-deploy

# 全局變量(避免硬編碼)
variables:
MAVEN_OPTS:"-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository"
FLINK_HOME:"/opt/flink-1.16.0"
HADOOP_HOME:"/opt/hadoop-3.3.1"
YARN_QUEUE:"flink_queue"

# 緩存 Maven 依賴(加速構建)
cache:
paths:
    -.m2/repository

# 1. 構建階段:Maven 打包
build_job:
stage:build
script:
    -echo"Building Flink job..."
    -mvncleanpackage-DskipTests
artifacts:
    paths:
      -target/*.jar# 保存 JAR 包供后續階段使用
    expire_in:1hour# 1小時后過期

# 2. 測試階段:單元測試 + SQL 語法校驗
test_job:
stage:test
script:
    -echo"Running unit tests..."
    -mvntest
    -echo"Validating FlinkSQL syntax..."
    # 使用 Flink SQL Parser 校驗語法(需提前編寫校驗腳本)
    -bashscripts/validate_sql.shresources/sql/user_behavior.sql
dependencies:
    -build_job# 依賴構建階段的 JAR 包

# 3. 部署階段:提交到 YARN(僅 master 分支觸發)
deploy_prod_job:
stage:deploy
script:
    -echo"Deploying to YARN production queue..."
    # 從構建產物中獲取 JAR 包名稱
    -JAR_FILE=$(findtarget-name"*.jar"|head-n1)
    -echo"JAR file: $JAR_FILE"
    # 提交作業到 YARN(Application Mode)
    -$FLINK_HOME/bin/flinkrun-tyarn-application\
        -Dyarn.application.name=flink_sql_user_behavior\
        -Dyarn.application.queue=$YARN_QUEUE\
        -Dparallelism.default=4\
        -Djobmanager.memory.process.size=1600m\
        -Dtaskmanager.memory.process.size=1728m\
        -Dtaskmanager.numberOfTaskSlots=4\
        -ccom.example.FlinkSQLJob\
        $JAR_FILE
dependencies:
    -build_job
only:
    -master# 僅 master 分支提交時觸發
when:manual # 手動觸發(可選,避免誤部署)

4. SQL 語法校驗腳本

為避免 SQL 語法錯誤導致作業提交失敗,可編寫校驗腳本(scripts/validate_sql.sh):

#!/bin/bash

SQL_FILE=$1
if [ ! -f "$SQL_FILE" ]; then
    echo"Error: SQL file $SQL_FILE not found."
    exit 1
fi

# 使用 Flink 內置的 SQL Parser 校驗語法(需 Flink 環境變量)
$FLINK_HOME/bin/sql-client.sh -f "$SQL_FILE" -d
if [ $? -eq 0 ]; then
    echo"FlinkSQL syntax validation passed."
else
    echo"Error: FlinkSQL syntax validation failed."
    exit 1
fi

賦予腳本執行權限:chmod +x scripts/validate_sql.sh。

六、自動提交全流程實踐

1. 開發與提交代碼

創建功能分支:從 develop 分支切出功能分支:

git checkout -b feature/user_behavior_stat develop

開發代碼:編寫 FlinkSQL 腳本、Java 主程序及配置文件,本地測試通過后提交:

git add .
git commit -m "feat(sql): 新增用戶行為實時統計SQL"
git push origin feature/user_behavior_stat

提交 Merge Request:在 Gitlab 上創建從 feature/user_behavior_stat 到 develop 的 Merge Request(MR),觸發流水線自動執行 build 和 test 階段。

2. 流水線執行過程

  • 構建階段:Maven 自動編譯打包,生成 flink-realtime-1.0-SNAPSHOT.jar,并保存為流水線產物。
  • 測試階段:執行單元測試(如 UDF 測試)和 SQL 語法校驗,若測試失敗,流水線終止并通知開發者。
  • 合并到 develop:MR 審核通過后,合并到 develop 分支,此時不觸發部署。
  • 發布到生產:將 develop 分支合并到 master 分支,觸發 deploy_prod_job,自動提交作業到 YARN 生產隊列。

3. 作業狀態監控

  • YARN 監控:通過 YARN Web UI 查看作業狀態(運行中、成功、失敗),點擊“Logs”查看 YARN 日志。
  • Flink 監控:點擊作業的“Tracking UI”進入 Flink Web UI,監控 Checkpoint、反壓、吞吐量等指標。
  • 日志收集:可將 Flink 作業日志輸出到 HDFS 或 ELK 集群,便于問題排查。

七、常見問題與優化

1. 常見問題排查

(1) 問題1:作業提交到 YARN 失敗,報“YARN application not found”

原因:Flink 與 Hadoop 版本不兼容,或 YARN 配置文件未正確軟鏈。解決:確保 Flink 版本支持 Hadoop 3.x,檢查 $FLINK_HOME/conf 下是否有 yarn-site.xml 等配置文件。

(2) 問題2:SQL 語法校驗通過,但作業運行時報“Table not found”

原因:SQL 腳本中表名大小寫與實際不一致,或連接器配置錯誤(如 Kafka topic 不存在)。解決:檢查 SQL 表名大小寫(FlinkSQL 默認不區分大小寫,但存儲系統可能區分),確認 Kafka/MySQL 連接參數。

(3) 問題3:Gitlab Runner 執行部署時報“Permission denied”

原因:Runner 用戶無權限訪問 HDFS 或提交 YARN 作業。解決:檢查 Hadoop 代理用戶配置,確保 gitlab-runner 用戶屬于 hadoop 用戶組。

2. 流程優化建議

  • 多環境部署:通過 Gitlab 變量區分開發/測試/生產環境(如 $YARN_QUEUE_DEV、$YARN_QUEUE_PROD),實現一套代碼多環境部署。
  • 版本回滾:在 .gitlab-ci.yml 中添加回滾作業,通過 yarn application -kill <app_id> 停止舊作業,再提交指定版本的 JAR 包。
  • 通知機制:集成釘釘/飛書機器人,流水線成功/失敗時發送消息通知開發團隊。
  • 資源動態調整:根據作業負載,通過 Flink REST API 動態調整并行度或資源,提升資源利用率。

八、總結

本文詳細介紹了 Flink + FlinkSQL + YARN + Gitlab 的自動提交代碼全流程,從環境準備、代碼管理、作業開發到 CI/CD 流程設計,覆蓋了實時計算自動化部署的核心環節。通過該流程,企業可實現:

  • 開發效率提升:代碼提交后自動構建、測試、部署,減少人工操作。
  • 質量管控:通過單元測試、SQL 校驗等環節,降低作業上線風險。
  • 資源隔離:YARN 提供多隊列資源管理,實現作業間資源隔離與公平調度。

未來可進一步擴展與監控系統集成(如 Prometheus + Grafana)、實現作業自動擴縮容,構建更完善的實時計算運維體系。

責任編輯:趙寧寧 來源: 大數據技能圈
相關推薦

2022-04-28 09:02:55

Gitcommitlint配置

2022-09-23 14:44:31

前端huskyeslint

2009-09-14 09:40:48

微軟Linux代碼

2021-01-22 05:55:12

GitAngularJStype

2020-11-02 08:21:50

Git辦法代碼

2024-04-08 08:37:41

代碼githook

2021-09-07 08:23:45

GitOpsCICD

2022-01-14 14:50:14

SpringBootymlJava

2022-01-13 17:24:04

SpringBootYml監聽器

2020-12-14 13:47:53

Linus代碼內核

2025-01-02 15:40:23

2020-07-31 07:44:12

代碼自動補全

2010-07-22 10:23:19

2020-11-12 11:55:57

代碼GitJava

2010-09-14 14:58:31

2021-12-09 07:47:58

Flink 提交模式

2020-12-15 17:43:48

Linux 操作系統 開發

2022-08-11 11:50:32

GitLab開源原創

2025-04-16 10:03:40

開發Spring應用程序

2020-10-22 10:34:04

APICloud開發平臺
點贊
收藏

51CTO技術棧公眾號

亚洲一区二区三区四区在线观看| 国产精品自拍av| 日韩高清有码在线| 免费日韩中文字幕| 成年人在线免费观看| 国产精品一区二区久久精品爱涩| 欧美性在线观看| 中文字幕精品亚洲| 粉嫩一区二区三区四区公司1| 日本韩国精品一区二区在线观看| 中文字幕久精品免| 神马精品久久| 国产精品白丝jk黑袜喷水| 91av在线国产| 欧美精品一级片| 日韩不卡一区| 亚洲精品国产综合久久| 欧美国产日韩另类| 午夜精品成人av| 亚洲成人av资源| 欧洲美女和动交zoz0z| 天堂√在线中文官网在线| 国产一区二区在线视频| 国产va免费精品高清在线| 欧美日韩精品亚洲精品| 欧美综合久久| 亚洲女人被黑人巨大进入| 日本成人xxx| 久久99久久久精品欧美| 精品国产电影一区| 欧美在线观看视频免费| 麻豆av在线免费看| 国产精品久久久久久久裸模| 久久久久一区二区三区| 国精产品一品二品国精品69xx| 久久 天天综合| 国产精品久久久久久久美男| 精品免费囯产一区二区三区 | 精品欧美乱码久久久久久1区2区| www.色偷偷.com| 松下纱荣子在线观看| 亚洲国产三级在线| 97超碰国产精品| 尤物视频在线看| 亚洲日本乱码在线观看| 一区二区在线观| 色的视频在线免费看| 国产欧美一区视频| 亚洲国产欧美日韩| 成人不用播放器| 中文字幕国产一区二区| 污视频在线免费观看一区二区三区| 久久久资源网| 国产欧美一区二区精品性色 | 国产免费av在线| 久久蜜桃av一区精品变态类天堂 | 日韩免费在线视频| 亚洲国产av一区二区三区| 亚洲专区一区| 日韩av免费在线播放| 九九九在线观看| 日日夜夜免费精品| 国产精品免费一区| 97精品久久人人爽人人爽| 国产乱人伦偷精品视频不卡| www.久久久| 婷婷丁香一区二区三区| 久久伊人蜜桃av一区二区| 日韩中文一区| 看女生喷水的网站在线观看| 一区二区三区小说| heyzo亚洲| 91伊人久久| 欧美一级日韩免费不卡| 无码成人精品区在线观看| 欧美日韩看看2015永久免费| 亚洲女人天堂网| 国产黄a三级三级| 女人天堂亚洲aⅴ在线观看| 欧美日韩第一视频| 天天操天天操天天操天天| 奇米影视在线99精品| 7777精品伊久久久大香线蕉语言| 黑人操亚洲女人| 国产日韩欧美亚洲| 久久久久久久久久久综合| 伊人春色在线观看| 欧美性xxxx极品hd满灌| 色91精品久久久久久久久| 91蜜桃臀久久一区二区| 亚洲人成伊人成综合网久久久| 亚洲少妇xxx| 在线看片一区| 国产一区二区视频在线观看| 免费a视频在线观看| 国产欧美一二三区| 免费看日b视频| 日韩精品三区| 精品国产自在久精品国产| av黄色在线免费观看| 你懂的成人av| 国产精品久久久久久久午夜| 粉嫩av一区二区夜夜嗨| 欧美国产欧美综合| 91午夜在线观看| 欧美高清影院| 日韩电影视频免费| 小泽玛利亚一区| 石原莉奈在线亚洲二区| 91久久精品一区二区别| 国产精品四虎| 无吗不卡中文字幕| 中文字幕一区二区三区四| 国产成人黄色| 2019中文字幕全在线观看| 99国产精品一区二区三区| 国产午夜一区二区三区| 97在线国产视频| 不卡精品视频| 中文字幕日韩av| 精产国品一区二区| 9l国产精品久久久久麻豆| 9191国产视频| 欧美性www| 一区二区三区四区精品| 亚洲天堂视频网站| 北条麻妃一区二区三区| 日本精品福利视频| 亚洲一区导航| 日韩亚洲精品视频| 中文字幕激情小说| 99视频在线观看一区三区| h无码动漫在线观看| 99久久久国产| 美女av一区二区三区 | www青青草原| 狠狠色综合播放一区二区| 视频一区视频二区视频三区视频四区国产 | 亚洲丰满少妇videoshd| 天天干天天曰天天操| 99久久婷婷国产综合精品电影√| 国产精品免费观看在线| 国产免费av高清在线| 91豆麻精品91久久久久久| 免费观看av网站| 久久精品一区二区三区中文字幕| 精品无人区一区二区三区竹菊| 国产蜜臀在线| 精品乱码亚洲一区二区不卡| 麻豆亚洲av成人无码久久精品| 国产在线视频一区二区三区| 国产高清免费在线| 精品中文视频| 色综合五月天导航| 黄色av网站免费在线观看| 亚洲精选视频免费看| 欧美人与性动交α欧美精品| 欧美成人tv| 国产二区一区| 97人澡人人添人人爽欧美| 欧美精品一区二区三区一线天视频| 国产真实的和子乱拍在线观看| 成人短视频下载| av黄色在线网站| 国产成人黄色| 91香蕉国产在线观看| 免费在线看电影| 日韩成人xxxx| 亚洲在线视频播放| 有码一区二区三区| 中文在线一区二区三区| 丝袜亚洲另类欧美综合| 亚洲电影一二三区| 久久久久亚洲精品中文字幕| 国内精品小视频| 黄色av免费在线观看| 制服.丝袜.亚洲.中文.综合| 国产一级片免费| 久久无码av三级| 欧美成年人视频在线观看| 欧美福利在线| 欧美成熟毛茸茸复古| 亚洲国产伊人| 韩国一区二区电影| 成年午夜在线| 亚洲国产精品成人一区二区| 美女黄页在线观看| 亚洲国产cao| 九九热免费在线| 国产suv精品一区二区6| 日韩视频在线免费看| 欧美国产三级| 日本一区二区三区视频在线观看 | 日韩制服一区| 欧美国产中文字幕| 在线观看国产原创自拍视频| 亚洲国产成人久久综合| 在线观看一二三区| 狠狠躁夜夜躁人人爽天天天天97| 91久久久久久久久久久久久久 | 内射毛片内射国产夫妻| 懂色av中文一区二区三区 | 亚洲黄色一区二区| 国产精品电影一区二区三区| 黄色国产在线观看| 国产福利91精品一区二区三区| 激情五月开心婷婷| 国产综合网站| 经典三级在线视频| 日韩黄色大片网站| 欧美精品亚洲| 国产精品18hdxxxⅹ在线| 成人日韩av在线| 天然素人一区二区视频| 国产91精品青草社区| 怡红院在线观看| 久久亚洲成人精品| 91看片在线观看| 亚洲片国产一区一级在线观看| 亚洲第一黄色片| 91精品午夜视频| 在线观看国产一区二区三区| 一本色道**综合亚洲精品蜜桃冫| 国产一级黄色av| 亚洲靠逼com| 日本中文在线视频| 综合久久一区二区三区| 日韩欧美在线视频播放| 欧美国产一区在线| 级毛片内射视频| 26uuu久久综合| www.88av| 9色porny自拍视频一区二区| 亚洲最大视频网| 国产99一区视频免费| 秋霞午夜鲁丝一区二区| 国产成人精品午夜视频免费| 激情图片中文字幕| 国产精品一卡二卡在线观看| 国产精品自在自线| 久久爱www久久做| www.国产视频.com| 久久精品国产99久久6| 超碰在线97免费| 美国欧美日韩国产在线播放| 成年人在线观看视频免费| 蜜臀精品一区二区三区在线观看 | 中文字幕一精品亚洲无线一区| 国产一二三在线观看| 亚洲欧美国产va在线影院| 女人偷人在线视频| 国产亚洲美女精品久久久| 国产1区2区3区在线| 中文字幕9999| 国产鲁鲁视频在线观看特色| 欧美老少配视频| a级片免费在线观看| 97视频在线看| 欧美xnxx| 91精品综合视频| caoporn成人免费视频在线| 国产在线一区二区三区播放| 天海翼精品一区二区三区| 日本高清久久一区二区三区| 不卡av一区二区| 一级性生活视频| 一区二区久久| 污视频免费在线观看网站| 国内一区二区视频| 国产精品一区二区无码对白| 91啪九色porn原创视频在线观看| 一区二区三区伦理片| 亚洲欧美日韩国产手机在线| 免费观看一级视频| 91久久精品一区二区三区| 国产精品羞羞答答在线| 亚洲а∨天堂久久精品喷水| 激情小视频在线| 久久天天躁狠狠躁夜夜躁2014| 成人在线高清免费| 日韩美女主播视频| 亚洲成人黄色| 日本不卡一区二区三区视频| 91成人精品| 逼特逼视频在线| 国产高清精品在线| 国产真实乱人偷精品人妻| 亚洲美女屁股眼交3| 九九精品免费视频| 91精品国产91久久久久久最新毛片 | 国产精品综合网| 性少妇bbw张开| 一区二区三区四区五区视频在线观看| 亚洲黄色小说图片| 欧美一区二区三区四区久久| 亚洲av片一区二区三区| 超碰91人人草人人干| 伊人色综合一区二区三区影院视频 | 亚洲婷婷综合网| 日韩一区二区免费高清| 成人高清网站| 91精品国产一区| 日韩精品视频中文字幕| 日本不卡久久| 亚洲一区二区成人| 国模大尺度视频| 国产精品美女久久久久久久久久久 | 国产美女永久免费无遮挡 | 进去里视频在线观看| 精品国产人成亚洲区| 久操视频在线播放| 国产精品网站视频| 久久99性xxx老妇胖精品| 亚洲乱码日产精品bd在线观看| 日本视频免费一区| 国产精品伦子伦| 亚洲一二三区视频在线观看| 一本色道久久综合精品婷婷| 亚洲情综合五月天| 忘忧草在线日韩www影院| 成人免费91在线看| 亚洲a在线视频| 日本超碰在线观看| 亚洲国产精品精华液ab| 国产区在线观看视频| 精品国产髙清在线看国产毛片| 免费黄色在线看| 国产精品女人网站| 精品一二三区| www.色就是色| 久久九九久久九九| 好看的av在线| 国产偷亚洲偷欧美偷精品| 成入视频在线观看| 国外成人免费视频| 亚洲伦伦在线| 中文字幕在线播放一区| 午夜亚洲福利老司机| 日本美女一级视频| 91精品国产91久久久久久不卡| 国产毛片久久久| 午夜免费福利小电影| 99视频有精品| 国产精品第5页| 在线视频日韩精品| 开心久久婷婷综合中文字幕| 亚洲一区高清| 九九在线精品视频| xxxx日本少妇| 欧美xxxxx牲另类人与| 超碰97国产精品人人cao| 国模精品娜娜一二三区| 久久久噜噜噜久久狠狠50岁| 一区二区伦理片| 欧美日韩国产色站一区二区三区| 三区四区在线视频| 91在线观看网站| 亚洲精品乱码久久久久久蜜桃麻豆| 老司机午夜免费福利| 欧美日韩性视频| 国产精品四虎| 亚洲自拍偷拍一区| 99精品热视频只有精品10| 日本激情小视频| 欧美日韩国产美女| 欧美14一18处毛片| 欧美精品一区二区三区在线看午夜 | 日韩毛片一二三区| 丰满熟女一区二区三区| 欧美一区二区三区艳史| 日韩综合一区| 日本黄色三级网站| 黑人巨大精品欧美一区二区| av中文在线| 97人摸人人澡人人人超一碰| 在线综合亚洲| 亚洲欧美精品aaaaaa片| 精品国产一二三| 亚洲四虎影院| 欧美亚洲黄色片| 国产精品私人影院| 性一交一乱一精一晶| 国产精品99久久久久久久久久久久| 久久在线视频| 亚洲av网址在线| 777色狠狠一区二区三区| √最新版天堂资源网在线| 日韩国产精品一区二区| 国产成人精品三级| 日本黄色一级视频| 欧美劲爆第一页| 日韩亚洲一区在线| 中文字幕免费在线播放| 欧美日韩国产美| 在线成人av观看| 欧美一区二区视频在线播放| 国产日产欧产精品推荐色| 亚洲精品一级片| 成人免费淫片视频软件| 性感少妇一区|