精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

狠狠操综合网| 97超碰在线公开在线看免费| 裸体素人女欧美日韩| 亚洲少妇激情视频| the porn av| free性欧美hd另类精品| 成人黄色在线看| 日韩av高清不卡| 91麻豆精品成人一区二区| 国产精品15p| 色香蕉久久蜜桃| 日本精品免费视频| 欧美偷拍视频| 国产精品一二三四| 国产91精品在线播放| 国产盗摄一区二区三区在线| 亚洲资源网站| 日韩精品一区二区三区视频| 成人av在线一区二区| 久久色在线播放| 久久免费精品国产| 日韩一级视频| 日韩欧美在线视频观看| 中文字幕乱码免费| 98在线视频| 成人av电影免费在线播放| 成人国产精品一区| 男人日女人网站| 国内精品福利| 成年人精品视频| 91视频免费看片| 亚洲高清极品| 亚洲国产精品久久精品怡红院| 热久久久久久久久| av有声小说一区二区三区| 亚洲成人手机在线| 熟女视频一区二区三区| 自拍视频在线免费观看| 久久综合狠狠综合久久激情| 不卡在线观看av| 最好看的2019的中文字幕视频| 色婷婷免费视频| 免费一级欧美在线大片| 欧美精品久久久久久久多人混战| 日韩免费高清在线| 亚洲人体视频| 欧美午夜视频一区二区| 免费不卡av在线| 久久免费电影| 一区二区欧美在线观看| 国产高清不卡无码视频| 午夜小视频在线观看| 亚洲天堂久久久久久久| 一区二区三视频| 求av网址在线观看| 中文字幕一区二区三中文字幕| 国产高清不卡一区二区| 91久久久久久久一区二区| 在线亚洲欧美日韩| 麻豆免费精品视频| 国产精品一区二区三区久久久| 懂色av蜜臀av粉嫩av喷吹| 日本va欧美va瓶| 国产精品高潮在线| 中文字幕在线观看第二页| 日韩国产精品久久久久久亚洲| 国产精品va在线播放| 伊人久久亚洲综合| 韩国三级中文字幕hd久久精品| 91亚洲国产成人精品性色| 国产手机精品视频| 成人免费精品视频| 久草一区二区| 国产三区四区在线观看| 国产精品美女一区二区三区| 桥本有菜av在线| 欧美人与性动交α欧美精品图片| 亚洲第一av色| 免费黄色特级片| 成人亚洲视频| 日韩欧美高清在线| 黄色a一级视频| 精品午夜久久| 超在线视频97| caoporn国产精品免费公开| 日本中文字幕免费在线观看| 狠狠干综合网| 国产91久久婷婷一区二区| 91久久精品国产91性色69| 国产九九视频一区二区三区| 国产精品视频福利| 成人影视在线播放| 亚洲黄一区二区三区| 波多野结衣综合网| 激情亚洲小说| 亚洲第一区在线| 欧美老女人性生活视频| 国产精品大片免费观看| 日本久久久a级免费| 国产浮力第一页| 2023国产精品| 亚洲欧洲另类精品久久综合| 免费污视频在线| 欧美午夜在线一二页| 人妻 丝袜美腿 中文字幕| 极品美女一区二区三区| 色综合老司机第九色激情| www.av88| 性xxxx视频播放免费| 久久国产精品99精品国产| 国产伦精品一区二区三区在线| 第九色区av在线| 亚洲午夜影视影院在线观看| 国产精品久久久毛片| 精品欠久久久中文字幕加勒比| 色老头一区二区三区| av中文在线播放| 国产麻豆成人精品| 日韩欧美视频一区二区三区四区| a国产在线视频| 7777精品伊人久久久大香线蕉最新版| 久久精品国产亚洲av麻豆| 女人天堂亚洲aⅴ在线观看| 国产国产精品人在线视| 国模人体一区二区| 亚洲人成在线观看一区二区| 黄色一级免费大片| 亚洲资源网站| 97国产精品久久| 午夜精品久久久久久久爽| 国产精品久久毛片a| 日韩视频在线免费看| 91丝袜一区二区三区| 中文精品久久| 国产精品综合不卡av| 欧美3p视频在线观看| 午夜精品123| 韩国三级hd两男一女| 欧美大片专区| 亚洲伊人一本大道中文字幕| 香蕉视频在线播放| 在线精品国精品国产尤物884a| 成人免费av片| 新67194成人永久网站| 国产欧美日韩一区二区三区| 激情av在线播放| 91精品久久久久久久91蜜桃| www.涩涩爱| 久久99久久99| 在线国产伦理一区| 综合欧美精品| 欧美成人在线影院| a毛片在线免费观看| 亚洲欧美福利一区二区| 亚洲一区二区中文字幕在线观看| 天天做天天爱天天综合网| 国产在线精品成人一区二区三区| 91大神xh98hx在线播放| 国产精品毛片视频| 亚洲国产精品人人做人人爽| 中文字幕在线观看91| 国产在线不卡| 国产成人精品日本亚洲11 | 美女色狠狠久久| 亚洲人av在线影院| 99成人精品视频| 国产精品久久久久9999吃药| 波多野结衣国产精品| 亚洲精品久久| 俄罗斯精品一区二区三区| 成人三级小说| 亚洲精品视频中文字幕| 亚洲国产成人精品女人久久| 国产欧美一区二区精品性| 制服丝袜综合网| 66视频精品| 2014国产精品| 成人ssswww在线播放| 亚洲人成网站999久久久综合| 中文av免费观看| 一区二区三区精品在线观看| 尤物网站在线观看| 韩日精品一区| 国产精品资源网| 制服丝袜综合日韩欧美| 亚洲高清999| 欧洲成人免费aa| 免费a在线看| 亚洲精品在线免费播放| 欧美在线观看不卡| 亚洲欧洲日韩在线| 日韩片在线观看| 久久国产夜色精品鲁鲁99| 成人免费网站入口| 精品国产一区二区三区久久久樱花| 成人激情春色网| 夜鲁夜鲁夜鲁视频在线播放| 久久久99久久精品女同性| 人人妻人人澡人人爽久久av| 欧美在线制服丝袜| 久久久综合久久| 国产欧美在线观看一区| 精品国产免费久久久久久婷婷| 欧美综合二区| 黄瓜视频免费观看在线观看www| 91精品国产乱码久久久竹菊| 国产精品久久久久久久天堂 | 欧美日韩直播| 精品国产伦一区二区三区观看方式| 免费看成人午夜电影| 日韩中文在线播放| 久久噜噜噜精品国产亚洲综合| 成人免费在线视频网| 精品福利二区三区| 亚洲一区中文字幕永久在线| 欧美日韩国产一区二区| 97在线观看免费高| 国产视频在线观看一区二区三区| 成年人看片网站| 激情图区综合网| 欧美日韩大尺度| 国产精品婷婷| 加勒比成人在线| 亚洲视频在线免费| 亚洲第一导航| 九九精品久久| 久久久com| 北条麻妃一区二区三区在线| 成人午夜激情网| 日韩高清在线| 国产成+人+综合+亚洲欧美丁香花| 国产激情视频在线看| 九色精品免费永久在线| 中文日本在线观看| 国产亚洲综合久久| 国产精品毛片一区二区三区四区| 亚洲国产精品成人精品| 男人操女人动态图| 波多野结衣亚洲| 日韩中文字幕在线| 高清毛片在线看| 国产一区二区三区日韩欧美| 日色在线视频| 国产视频欧美视频| 亚洲人妻一区二区| 亚洲精品xxx| 亚洲av电影一区| 日韩高清av一区二区三区| 乱色精品无码一区二区国产盗| 日韩精品在线一区二区| 国产欧美综合视频| 日韩欧美一区二区不卡| 精品女同一区二区三区| 91精品国产综合久久精品| 国产又粗又猛又爽又黄的视频一| 欧美性做爰猛烈叫床潮| 中文字幕日本人妻久久久免费 | 美女网站免费观看视频| 日韩精品国产欧美| 网站一区二区三区| 久久av老司机精品网站导航| 亚洲欧美日韩三级| 国产在线麻豆精品观看| 手机免费av片| 天堂日韩电影| 精品国产一二三区| 欧美 日韩 中文字幕| 亚洲激情视频网| 美丽的姑娘在线观看免费动漫| 在线电影中文日韩| 日本电影在线观看网站| 久久综合久久八八| 激情图片在线观看高清国产| 国产91精品高潮白浆喷水| av在线日韩| 亚洲va久久久噜噜噜久久天堂| 一级毛片精品毛片| 激情久久av| 欧美三级美国一级| 久久观看最新视频| 国产视频亚洲| 亚洲无吗一区二区三区| 国产在线视频精品一区| av无码av天天av天天爽| 国产精品无遮挡| 欧美成人黄色网| 精品日本高清在线播放 | 制服丝袜亚洲精品中文字幕| 国产丰满果冻videossex| 亚洲国产欧美在线成人app| 国产特黄在线| 欧美成人国产va精品日本一级| 91超碰国产在线| 国产精品丝袜一区二区三区| 日韩在线精品强乱中文字幕| 一本色道久久综合狠狠躁篇怎么玩| 日本少妇xxxxx| 亚洲精品老司机| 久久99国产综合精品免费| 欧美日韩不卡一区二区| 亚洲av电影一区| 欧美成人亚洲成人日韩成人| 不卡一二三区| 97碰碰视频| 波多野结衣在线观看一区二区三区 | 啊啊啊一区二区| 国内国产精品久久| 3d动漫精品啪啪一区二区下载 | 亚洲无码精品一区二区三区| 日韩亚洲欧美成人一区| 国产露出视频在线观看| 欧美高清视频免费观看| 2019年精品视频自拍| 国产欧美日韩一区| 亚洲电影影音先锋| 日本激情视频在线| bt欧美亚洲午夜电影天堂| 婷婷激情四射网| 在线精品观看国产| 天堂v视频永久在线播放| 欧美成人中文字幕在线| 国产69精品久久久久9999人| 欧美lavv| 亚洲免费在线| 91高清视频免费看| 国产又大又粗又爽| 亚洲第一av在线| 婷婷色在线资源| 成人国产精品免费视频| 成久久久网站| 日韩 欧美 高清| 久久综合色婷婷| 久久网一区二区| 日韩一级片网站| 黄在线免费观看| 成人国产精品一区二区| 成人一级毛片| 免费涩涩18网站入口| 久久久精品免费免费| 天堂а√在线中文在线新版| 亚洲精品大尺度| 国产丝袜视频在线播放| 99理论电影网| 欧美日韩精选| 亚洲AV无码久久精品国产一区| 1024成人网| 国产三级在线观看视频| 欧美第一黄色网| 综合伊人久久| 日韩成人手机在线| 国产剧情一区二区三区| 成人高潮免费视频| 欧美一区二区免费| 影音先锋在线视频| 99国产超薄丝袜足j在线观看 | 亚洲成人资源网| 日韩在线xxx| av网站免费线看精品| 国产无遮挡裸体免费视频| 亚洲国产精品成人av| 周于希免费高清在线观看| 欧洲一区二区日韩在线视频观看免费| 可以看av的网站久久看| 阿v天堂2014| 欧美人牲a欧美精品| av在线麻豆| 97超碰人人模人人爽人人看| 亚洲午夜91| 免费a级黄色片| 在线观看av不卡| 秋霞午夜在线观看| 波多野结衣久草一区| 亚洲人人精品| 99久久久无码国产精品衣服| 欧美性大战久久| 在线你懂的视频| 激情视频在线观看一区二区三区| 性高湖久久久久久久久| 久久视频精品在线观看| 日韩一卡二卡三卡国产欧美| 国产区美女在线| 免费亚洲精品视频| 精品一区二区在线视频| 国产无遮挡又黄又爽| 亚洲人成欧美中文字幕| 欧美成人aaa| 国内精品在线观看视频| 欧美韩日一区二区三区四区| 国产免费黄色录像| 91精品国产色综合| 97精品国产| www.男人天堂| 欧美日韩日日骚| 男人久久天堂| 亚洲电影第三页| 97久久久久久久| 欧美精品免费在线| 国产成人手机高清在线观看网站| 亚洲理论中文字幕| 一本大道久久a久久精二百|