免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

基于Spark SQL的即席查詢服務(wù)課設(shè):架構(gòu)設(shè)計(jì)與核心代碼解析

基于Spark SQL的即席查詢服務(wù)課設(shè):架構(gòu)設(shè)計(jì)與核心代碼解析 簡介這是一份基于 Spark SQL 引擎的即席查詢服務(wù)完整項(xiàng)目面向高校學(xué)生、期末大作業(yè)與課程設(shè)計(jì)人群解決從零搭建可運(yùn)行查詢服務(wù)的難題。項(xiàng)目提供源代碼與配套文檔說明關(guān)鍵代碼帶注釋新手也能看懂系統(tǒng)整體功能完善、界面簡潔、操作直接簡單部署即可用于演示、答辯或二次擴(kuò)展。壓縮包共 2000 個(gè)文件約 16.83MB涵蓋 983 個(gè) JS、561 個(gè) HTML、291 個(gè) CSS 等前端頁面與交互資源也有 Java 核心源碼、SQL 初始化腳本、YAML/Properties 配置和 Markdown 說明文檔便于按頁面展示、服務(wù)邏輯、數(shù)據(jù)查詢、部署配置等模塊對(duì)應(yīng)學(xué)習(xí)。目前已有 187 人學(xué)習(xí)下載適合直接作為課程設(shè)計(jì)或期末大作業(yè)提交也能幫助讀者快速掌握 Spark SQL 即席查詢服務(wù)從接口設(shè)計(jì)到結(jié)果返回的整體實(shí)現(xiàn)鏈路對(duì)準(zhǔn)備高分結(jié)課展示或深入理解 Spark SQL 應(yīng)用落地均有參考價(jià)值。1. 這門課設(shè)到底在做什么即席查詢服務(wù)為什么非要用 Spark SQL一個(gè)做了三年多的數(shù)據(jù)分析平臺(tái)最頻繁被抱怨的不是報(bào)表跑得慢而是“我就想看一眼昨天的訂單分布憑什么要等 ETL 跑完”這種沒預(yù)定義、臨時(shí)起意、隨口就問的查詢就是即席查詢Ad Hoc Query。它跟固定報(bào)表最大的區(qū)別在于查詢條件不可控、并發(fā)模型不可控、返回?cái)?shù)據(jù)量不可控——三個(gè)不可控直接干翻了傳統(tǒng)關(guān)系型數(shù)據(jù)庫的查詢規(guī)劃和資源隔離方案。而 Spark SQL 引擎恰好是應(yīng)對(duì)這個(gè)場景最穩(wěn)的底子它把 SQL 翻譯成 RDD 上的 DataFrame 算子天然帶分布式執(zhí)行能力又保留了 SQL 這種最大眾的交互方式。課程設(shè)計(jì)選這個(gè)題目本質(zhì)上不是讓你寫一個(gè)“能用 SQL 查數(shù)據(jù)”的程序而是讓你做一個(gè)“能接受大作業(yè)驗(yàn)收”的完整服務(wù)系統(tǒng)源數(shù)據(jù)接入、SQL 解析校驗(yàn)、查詢引擎封裝、結(jié)果返回、狀態(tài)跟蹤、文檔說明一整套鏈路不能缺任何一環(huán)。你手里這份帶源代碼和文檔說明的課設(shè)包解決的就是“從零開始做到底拆幾個(gè)模塊、每個(gè)模塊怎么寫、跑通了怎么演示”這三個(gè)問題。適合的人群是正在做大數(shù)據(jù)方向畢業(yè)設(shè)計(jì)或課程設(shè)計(jì)的本科生/研究生以及想快速搭一套查詢服務(wù)原型去公司內(nèi)部做技術(shù)驗(yàn)證的在職工程師。接下來我會(huì)按一套我實(shí)際跑過的路徑把這個(gè)項(xiàng)目拆成從架構(gòu)到踩坑的完整講述。2. 即席查詢服務(wù)的架構(gòu)設(shè)計(jì)為什么選 Spark SQL 而不是 Presto 或 Hive2.1 引擎選型Spark SQL 在課設(shè)場景下的三個(gè)不可替代優(yōu)勢先明確一點(diǎn)這不是“哪個(gè)引擎最強(qiáng)”的問題而是“哪個(gè)引擎最適合在這個(gè)項(xiàng)目里被講清楚”。你交上去的大作業(yè)需要的是可解釋性強(qiáng)的架構(gòu)、可運(yùn)行的最小閉環(huán)、以及答辯時(shí)能應(yīng)對(duì)比對(duì)的問題。Spark SQL 在這三點(diǎn)上都比 Presto 和 Hive 合適。Presto 的架構(gòu)是典型的無狀態(tài)協(xié)調(diào)節(jié)點(diǎn)加分布式執(zhí)行器它擅長大規(guī)模并發(fā)查詢但這套架構(gòu)的復(fù)雜度在于內(nèi)存管理和數(shù)據(jù)源連接器你要在課設(shè)里把 Presto 的 coordinator 和 worker 的內(nèi)存參數(shù)、連接器 SPI 講透工程量直接翻倍。Hive 則把 SQL 翻譯成 MapReduce 或 Tez 任務(wù)執(zhí)行延遲太高在線查詢的體驗(yàn)很差寫出來不像一個(gè)“服務(wù)”更像一個(gè)“批處理腳本”。Spark SQL 的優(yōu)勢在于三件事。第一它提供了Dataset/DataFrame統(tǒng)一編程入口SQL 和程序代碼可以互相嵌入這對(duì)課設(shè)演示特別友好——你可以先用 SQL 查一次再用 DataFrame API 查一次展示同一套邏輯的兩種寫法。第二Spark Thrift ServerSTS本身就是現(xiàn)成的即席查詢服務(wù)端實(shí)現(xiàn)你的課設(shè)可以基于它做分支改造而不是從零造輪子。第三Spark SQL 的 Catalyst 優(yōu)化器是教科書級(jí)別的查詢優(yōu)化案例無論是文檔撰寫還是答辯問答這塊都特別出內(nèi)容你是真的可以把一條 SQL 的優(yōu)化前后計(jì)劃打出來貼在文檔里的。2.2 整體模塊劃分一個(gè)最小可用查詢服務(wù)的五個(gè)組成部分源碼包里常見的結(jié)構(gòu)是圍繞一條完整鏈路拆的我結(jié)合自己的經(jīng)驗(yàn)把它標(biāo)準(zhǔn)化為五層。第一層是接入層負(fù)責(zé)把用戶提交的 SQL 字符串接進(jìn)來做基礎(chǔ)合法性校驗(yàn)非空、長度限制、關(guān)鍵字黑名單。第二層是解析層使用sparkSession.sql()或Dataset的toDF()觸發(fā) Catalyst 解析把字符串變成 Logical Plan。第三層是執(zhí)行層通過explain()輸出物理計(jì)劃然后執(zhí)行并收集結(jié)果。第四層是結(jié)果封裝層把Row對(duì)象序列化成 JSON 或 CSV。第五層是元數(shù)據(jù)管理層負(fù)責(zé)表注冊(cè)、格式聲明、分區(qū)信息。有人會(huì)問課設(shè)場景要不要引入 YARN 資源池或 Mesos 這類調(diào)度框架我的意見是不要。單機(jī)模式下 Spark SQL 已經(jīng)把執(zhí)行引擎和資源管理打包好了你再引入 YARN 就多了一個(gè)部署依賴維度答辯環(huán)境的機(jī)器配置一旦不夠問題排查的復(fù)雜度會(huì)指數(shù)上升。代碼包里如果有yarn相關(guān)配置你保留即可但跑演示時(shí)默認(rèn)local[*]模式就夠了。2.3 查詢流程閉環(huán)從 SQL 字符串到結(jié)果集的六步關(guān)鍵路徑我一般會(huì)在文檔里畫一張時(shí)序圖不要求形式漂亮但要傳達(dá)六個(gè)節(jié)點(diǎn)。第一步客戶端把 SQL 串提交到服務(wù)入口通常是 HTTP 接口或命令行交互。第二步服務(wù)入口做初見校驗(yàn)SQL 不能為空、不能超過設(shè)定長度上限、不能包含DROP/TRUNCATE這類危險(xiǎn)語句。第三步把合法 SQL 交給 SparkSession觸發(fā)sql()調(diào)用由 Catalyst 完成解析、綁定、優(yōu)化。第四步執(zhí)行物理計(jì)劃分布式算子在集群或本地線程池上跑。第五步結(jié)果集通過collect()或take(n)拉回驅(qū)動(dòng)端。第六步封裝成 JSON 寫回客戶端。從第二步開始就有很多細(xì)節(jié)可以寫進(jìn)文檔說明里比如為什么要有危險(xiǎn)語句黑名單——即席查詢服務(wù)一旦暴露在公司內(nèi)網(wǎng)最怕的就是有人提交一條DROP TABLE IF EXISTS。這個(gè)設(shè)計(jì)不是過度防御是真實(shí)運(yùn)維事故換來的教訓(xùn)。代碼包里如果沒做這一步你自己加也非常簡單按分號(hào)拆 SQL 串逐條正則匹配危險(xiǎn)關(guān)鍵字命中就拒絕執(zhí)行。3. 從源碼跑通最小服務(wù)核心代碼拆解與三個(gè)必調(diào)參數(shù)3.1 搭建項(xiàng)目骨架基于 Maven 的 Spark SQL 即席查詢工程初始化拿到源碼包后第一步不是讀代碼而是先把項(xiàng)目結(jié)構(gòu)跑起來。這里我給出一個(gè)可復(fù)現(xiàn)的最小 Maven 工程配置你直接照抄就能編譯通過。properties spark.version3.1.2/spark.version scala.version2.12.15/scala.version /properties dependencies dependency groupIdorg.apache.spark/groupId artifactIdspark-core_2.12/artifactId version${spark.version}/version /dependency dependency groupIdorg.apache.spark/groupId artifactIdspark-sql_2.12/artifactId version${spark.version}/version /dependency dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.12.3/version /dependency /dependencies這里有幾個(gè)點(diǎn)需要注意。第一Spark 3.x 必須對(duì)應(yīng) Scala 2.12 編譯產(chǎn)物你把spark.version改成 2.4.x 的話spark-core_2.12的 artifact 可能不存在。第二Jackson 依賴務(wù)必顯式聲明版本因?yàn)?Spark 內(nèi)部傳遞依賴的 Jackson 版本經(jīng)常被覆蓋沒有顯式聲明時(shí)序列化階段極易出現(xiàn)NoSuchMethodError。第三這一步不要加provided作用域——課設(shè)交付時(shí)源碼包是單獨(dú)存在的不依賴集群環(huán)境的 Spark 安裝目錄。編譯命令放在pom.xml同級(jí)目錄下執(zhí)行mvn clean package -DskipTests -Dmaven.javadoc.skiptrue這里的-DskipTests是跳過單元測試運(yùn)行因?yàn)?SparkSession 啟動(dòng)較慢測試類過多會(huì)拖慢構(gòu)建速度。-Dmaven.javadoc.skiptrue是跳過 JavaDoc 生成減少構(gòu)建時(shí)間和失敗點(diǎn)。構(gòu)建產(chǎn)物在target/ad-hoc-query-1.0-SNAPSHOT.jar。3.2 核心類 AdHocQueryService會(huì)話管理、SQL 提交與結(jié)果封裝的完整實(shí)現(xiàn)public class AdHocQueryService { private SparkSession sparkSession; private static final int DEFAULT_MAX_ROWS 200; public AdHocQueryService(String appName, String master) { this.sparkSession SparkSession.builder() .appName(appName) .master(master) .config(spark.sql.adaptive.enabled, true) .config(spark.sql.shuffle.partitions, 8) .getOrCreate(); } public QueryResult executeQuery(String sql) throws IllegalQueryException { // 基礎(chǔ)校驗(yàn) if (sql null || sql.trim().isEmpty()) { throw new IllegalArgumentException(SQL 不能為空); } if (containsDangerousStatement(sql)) { throw new IllegalQueryException(SQL 包含被禁止的危險(xiǎn)操作); } long startTime System.currentTimeMillis(); DatasetRow dataset sparkSession.sql(sql); ListRow rows dataset.take(DEFAULT_MAX_ROWS); ListMapString, Object resultRows new ArrayList(); for (Row row : rows) { MapString, Object rowMap new LinkedHashMap(); for (StructField field : dataset.schema().fields()) { rowMap.put(field.name(), row.getAs(field.name())); } resultRows.add(rowMap); } long endTime System.currentTimeMillis(); return new QueryResult( resultRows, dataset.schema().json(), endTime - startTime, rows.size() ); } private boolean containsDangerousStatement(String sql) { String normalized sql.trim().toUpperCase(); String[] dangerousKeywords {DROP , TRUNCATE , ALTER , CREATE DATABASE, DELETE FROM}; for (String keyword : dangerousKeywords) { if (normalized.contains(keyword)) { return true; } } return false; } }逐段說明這段代碼的邏輯。第一spark.sql.adaptive.enabled設(shè)成true是讓 Spark 3.x 開啟自適應(yīng)查詢執(zhí)行AQE它會(huì)根據(jù)運(yùn)行時(shí)統(tǒng)計(jì)數(shù)據(jù)自動(dòng)調(diào)整 join 策略和 shuffle 分區(qū)數(shù)。在線即席查詢的查詢模式千變?nèi)f化AQE 能在很大程度上減少“一條慢 SQL 拖死整個(gè)服務(wù)”的概率。spark.sql.shuffle.partitions設(shè)成 8是因?yàn)檠菔经h(huán)境通常是 4 核 8G 的虛擬機(jī)shuffle 分區(qū)數(shù)超過核數(shù)只會(huì)增加調(diào)度開銷不會(huì)帶來并發(fā)收益。第二dataset.take(rows)用的是 take 而不是 collect。兩者最大的區(qū)別在于take 會(huì)在首個(gè)分區(qū)獲取足夠數(shù)據(jù)后提前終止任務(wù)collect 會(huì)把全量結(jié)果拉回驅(qū)動(dòng)端。即席查詢服務(wù)的大忌就是放任一條SELECT * FROM 大表把驅(qū)動(dòng)端內(nèi)存撐爆。這里的DEFAULT_MAX_ROWS就是兜底防線。如果你希望支持分頁可以改造成limit offset的 SQL 拼接但直接在 DataFrame 上 take 實(shí)現(xiàn)更簡單。第三結(jié)果行里是用field.name()作為 key可能有的 Row 里同名列來自 join 操作為區(qū)分同名列最好在 SQL 里寫別名或者用row.schema().fields()進(jìn)行索引定位。3.3 命令行入口支持單次查詢和批量查詢的交互式客戶端#!/bin/bash JAR_PATH/home/user/ad-hoc-query-1.0-SNAPSHOT.jar # 單次查詢模式 java -cp $JAR_PATH:$SPARK_HOME/jars/* com.course.query.AdHocQueryCli \ --sql SELECT COUNT(*) FROM demo_table \ --master local[2] # 批量查詢模式文件里每行一條 SQL java -cp $JAR_PATH:$SPARK_HOME/jars/* com.course.query.AdHocQueryCli \ --file /home/user/query_script.sql \ --master local[2]參數(shù)設(shè)計(jì)上--master單獨(dú)提供而不是寫死進(jìn)程里是因?yàn)槟憧梢栽诒緳C(jī)演示時(shí)用local[2]到答辯或部署展示時(shí)用spark://host:7077或 YARN 模式不用改代碼。這里的$SPARK_HOME/jars/*是運(yùn)行時(shí)依賴的關(guān)鍵直接用-cp拼 jar 包路徑而不采用spark-submit是為了讓演示環(huán)境不需要額外配置 Spark 環(huán)境變量——只要機(jī)器上有 JDK 和這份 JAR 包就能跑。這個(gè) CLI 類本身只有兩個(gè)分支邏輯解析--sql或--file調(diào)用AdHocQueryService.executeQuery()將結(jié)果打印成對(duì)齊的文本表格或 JSON。文本表格實(shí)現(xiàn)需要手動(dòng)計(jì)算中英文列寬不是特別復(fù)雜但容易在中文列名上用空格補(bǔ)位出現(xiàn)對(duì)不齊的問題。簡單做法是直接輸出 JSON用Jackson的DefaultPrettyPrinter做格式化答辯演示時(shí)視覺上更專業(yè)。3.4 參數(shù)配置三個(gè)必調(diào)參數(shù)與兩個(gè)推薦調(diào)整參數(shù)下面的表整理了這個(gè)課設(shè)必調(diào)參數(shù)的行為和適用場景抄作業(yè)時(shí)可以直接對(duì)照修改。參數(shù)推薦值作用調(diào)整依據(jù)spark.sql.adaptive.enabledtrue開啟 AQE 自動(dòng)優(yōu)化關(guān)閉時(shí)復(fù)雜 join 可能性能驟降spark.sql.shuffle.partitions8 或與核數(shù)一致控制 shuffle 后的分區(qū)數(shù)分區(qū)越多小文件越多spark.sql.session.timeZone與業(yè)務(wù)時(shí)區(qū)一致避免時(shí)間字段偏移 8 小時(shí)不寫時(shí)默認(rèn) UTCspark.driver.maxResultSize2g限制 driver 端收集結(jié)果上限超過時(shí)任務(wù)靜默失敗spark.sql.broadcastTimeout600控制廣播 join 超時(shí)時(shí)間默認(rèn) 300 秒不夠大表廣播最容易忽略的是spark.sql.session.timeZone但它在即席查詢場景中翻車率極高。用戶查“今天”的數(shù)據(jù)你按 UTC 跑返回結(jié)果時(shí)區(qū)不對(duì)業(yè)務(wù)側(cè)說數(shù)據(jù)對(duì)不上全鏈路查完發(fā)現(xiàn)是語義層時(shí)區(qū)沒校準(zhǔn)。在 Spark 3.x 里還可以通過spark.timezone()動(dòng)態(tài)設(shè)置不影響已有查詢。4. 擴(kuò)展為完整服務(wù)把即席查詢改造成 HTTP 接口并接入數(shù)據(jù)源4.1 用 SparkSession 管理多租戶查詢兩個(gè)互不干擾的會(huì)話模型課設(shè)只做到命令行提交往往不夠“服務(wù)化”很多同學(xué)的代碼包里會(huì)提供一個(gè) HTTP 接口的擴(kuò)展版本。但這里我要提示一個(gè)關(guān)鍵坑SparkSession 不能隨便 new 多個(gè)。每個(gè) SparkSession 對(duì)應(yīng)一套執(zhí)行環(huán)境和一個(gè)元數(shù)據(jù)目錄默認(rèn)是in-memory多個(gè) Session 各自維護(hù)表注冊(cè)會(huì)導(dǎo)致服務(wù)端內(nèi)存翻倍還可能出現(xiàn)“我在這個(gè)會(huì)話里注冊(cè)了表你在那個(gè)會(huì)話里查不到”的詭異現(xiàn)象。常見做法是維護(hù)一個(gè)全局單例 SparkSession所有請(qǐng)求復(fù)用同一個(gè)會(huì)話。但多租戶場景下這又引入了新的問題一個(gè)租戶的臨時(shí)表會(huì)被另一個(gè)租戶看到。我在課設(shè)里做了一組封裝來解決這個(gè)問題——臨時(shí)表用帶前綴的唯一命名例如tmp_userid_yyyyMMddHHmmss查詢前在 SQL 里做字符串替換。這個(gè)方法不需要引入多 Session 的復(fù)雜度而且所有臨時(shí)表在 SparkContext 停止時(shí)統(tǒng)一清理不占額外資源。另外一個(gè)需要考慮的點(diǎn)是 SQL 執(zhí)行時(shí)長。HTTP 接口接收查詢請(qǐng)求后如果請(qǐng)求長時(shí)間不返回會(huì)占住線程池。這里的兜底做法是使用Future包裹執(zhí)行邏輯設(shè)定超時(shí)時(shí)間比如 30 秒超時(shí)后直接返回“查詢超時(shí)”的響應(yīng)底層 Spark 任務(wù)繼續(xù)跑但不等待結(jié)果。4.2 接入源數(shù)據(jù)CSV、Parquet、JDBC 三種數(shù)據(jù)源的加載與注冊(cè)一個(gè)即席查詢服務(wù)不可能永遠(yuǎn)查內(nèi)置測試表接入真實(shí)數(shù)據(jù)源是必經(jīng)之路。源碼包里最常見的示例數(shù)據(jù)來源是 CSV我給你看一段標(biāo)準(zhǔn)的加載注冊(cè)代碼。DatasetRow csvDF sparkSession.read() .option(header, true) .option(inferSchema, true) .option(delimiter, ,) .csv(/opt/data/orders.csv); csvDF.createOrReplaceTempView(orders);這個(gè)寫法有四個(gè)細(xì)節(jié)。第一inferSchema會(huì)導(dǎo)致 Spark 對(duì)全文件做一次掃描推斷字段類型對(duì)于幾百 MB 級(jí)別的大文件一次 OK但如果是幾 GB 的 CSV建議去掉該選項(xiàng)并手動(dòng)指定 schema——推斷模式的數(shù)據(jù)類型經(jīng)常出錯(cuò)比如日期列被推斷成string。第二CSV 文件名如果包含日期分區(qū)比如orders_20250101.csv推薦用sparkSession.read().option(basePath, /opt/data).csv(/opt/data/orders_*.csv)這樣 Spark 會(huì)自動(dòng)把文件路徑中的分區(qū)信息識(shí)別成分區(qū)列。第三createOrReplaceTempView的視圖只存在于當(dāng)前 SparkSession 內(nèi)不是持久化的全局表要跨 Session 使用需要createGlobalTempView但上面提到過多 Session 模式在課設(shè)里并不值得做。第四JDBC 數(shù)據(jù)源的加載需要加--packages org.apache.spark:spark-jdbc_2.12:3.1.2且要注意連接參數(shù)里不寫用戶名密碼進(jìn)連接串用Properties對(duì)象傳入。4.3 結(jié)果封裝與返回JSON 序列化時(shí)如何保住字段類型這個(gè)環(huán)節(jié)看著簡單坑特別多。前面代碼里我用row.getAs(field.name())拿到字段值然后直接放進(jìn)MapString, Object。這里面有一個(gè)真實(shí)踩過的坑Spark 的Row.getAs返回的Decimal類型是java.math.BigDecimal但當(dāng)你用 Jackson 序列化成 JSON 時(shí)默認(rèn)輸出的BigDecimal可能是科學(xué)計(jì)數(shù)法形式比如1.0E10。處理辦法是給 Jackson 定制ToStringSerializer或者在序列化前統(tǒng)一轉(zhuǎn)為String。我選了后者因?yàn)楦谇岸苏故敬鷥r(jià)是丟失了數(shù)值類型信息。如果要求保留類型可以走StructType.json()輸出 schema然后前端按 schema 解析 value 類型。一個(gè)更隱蔽的問題是java.sql.Timestamp的序列化。Jackson 默認(rèn)把它序列化成時(shí)間戳數(shù)字不是 ISO 字符串且這個(gè)行為在不同版本 Jackson 里還不一致。我一般會(huì)在ObjectMapper里注冊(cè)JavaTimeModule并設(shè)置WRITE_DATES_AS_TIMESTAMPS為false這樣輸出就是2025-01-15T10:30:00Z格式業(yè)務(wù)側(cè)不用再單獨(dú)做轉(zhuǎn)換??蛻舳私邮斩说拇a塊也順帶給你一個(gè)參考模板public class QueryResponse { private int code; private String message; private ListMapString, Object data; private String schema; private long costTimeMs; // 省略 getter/setter }這個(gè)響應(yīng)結(jié)構(gòu)的價(jià)值在于它把“查詢結(jié)果”和“查詢狀態(tài)”解耦了。前端拿到code ! 0就知道任務(wù)失敗不再盲從data字段。schema字段單獨(dú)攜帶用于前端根據(jù)字段類型渲染單元格。costTimeMs是計(jì)時(shí)信息既能展示在演示界面上又能在文檔說明里作為性能證據(jù)。5. 課設(shè)避坑與常見問題現(xiàn)象、原因、解決的五個(gè)實(shí)戰(zhàn)記錄5.1 現(xiàn)象SQL 執(zhí)行拋 job aborted原因是 executor 堆外內(nèi)存溢出這個(gè)是最常見的高頻翻車點(diǎn)。表現(xiàn)為任務(wù)跑到一半控制臺(tái)出現(xiàn)ExecutorLostFailure和Container killed by YARN for exceeding memory limits這類異常。原因分析需要分層。第一層是 Spark 默認(rèn)把spark.memory.offHeap.enabled設(shè)為false但部分源碼包為了追求性能會(huì)開啟堆外內(nèi)存并設(shè)置spark.memory.offHeap.size演示機(jī)器內(nèi)存不夠時(shí)直接崩。第二層是 shuffle 過程中的序列化緩沖區(qū)累積。第三層是dataset.take(200)會(huì)導(dǎo)致首個(gè)分區(qū)任務(wù)拉取全部數(shù)據(jù)到 driver但 executor 端已經(jīng)物化了大量中間結(jié)果。解決路徑按三步走。第一步本地運(yùn)行時(shí)先關(guān)掉堆外內(nèi)存把spark.memory.offHeap.enabled設(shè)回false。第二步在spark-defaults.conf里加spark.shuffle.spill.numElementsForceSpillThreshold10000強(qiáng)制 shuffle 過程中的小批次提前落盤。第三步如果數(shù)據(jù)量真的很大把查詢改成先count()或filter()縮小范圍后再collect不要一把梭。5.2 現(xiàn)象并發(fā)提交 10 條查詢時(shí)互相阻塞性能斷崖式下滑原因在 Spark UI 的 Executors 頁面能看出來——所有查詢共享同一個(gè) executor 的線程池長尾任務(wù)占滿了線程短查詢只能排隊(duì)。這不是 Spark 的參數(shù)調(diào)優(yōu)問題而是架構(gòu)設(shè)計(jì)問題。解決方法是做一個(gè)查詢隊(duì)列用Executors.newFixedThreadPool(n)把查詢請(qǐng)求丟進(jìn)線程池n設(shè)為可用核心數(shù)減一。同時(shí)給每條 SQL 設(shè)置執(zhí)行超時(shí)——不是在 Spark 層面而是在隊(duì)列層面。如果隊(duì)列滿了直接對(duì)客戶端返回“當(dāng)前并發(fā)已滿請(qǐng)稍后重試”而不是無腦堆積。這個(gè)設(shè)計(jì)來源于線上真實(shí)場景沒有隊(duì)列保護(hù)的即席查詢服務(wù)不可能穩(wěn)定運(yùn)行。還有一個(gè)小技巧對(duì) SQL 做標(biāo)準(zhǔn)化。SELECT * FROM orders WHERE user_id 1和SELECT * FROM orders WHERE user_id 2會(huì)被分成兩個(gè)任務(wù)但如果加了spark.sessionState.conf.set(spark.sql.optimizer.enableEagerEvaluation, true)部分場景可以加速更常用的手段是開 AQE 后spark.sql.adaptive.coalescePartitions.enabled會(huì)自動(dòng)幫查詢合并小分區(qū)減少調(diào)度壓力。5.3 現(xiàn)象找不到表或視圖原因是元數(shù)據(jù)目錄串了 Session這個(gè)現(xiàn)象通常出現(xiàn)在你按我前面建議的方式把所有查詢放到同一個(gè) SparkSession 后服務(wù)重啟導(dǎo)致內(nèi)嵌元數(shù)據(jù)丟失。內(nèi)嵌 Hive Metastore 存儲(chǔ)在derby.log和metastore_db目錄里Spark 默認(rèn)的in-memory目錄在 Session 結(jié)束即銷毀表定義自然沒了。解決方式有兩種。第一種在文檔說明里明確要求項(xiàng)目啟動(dòng)時(shí)執(zhí)行建表初始化腳本先啟動(dòng)一個(gè)初始化 Session建表后再關(guān)閉避免臨時(shí)表架構(gòu)與服務(wù)強(qiáng)耦合。第二種如果想做到“數(shù)據(jù)目錄可復(fù)用”把配置改成config(hive.metastore.warehouse.dir, /opt/hive/warehouse)并設(shè)置enableHiveSupport()但前提是環(huán)境里有外置的 Hive Metastore 服務(wù)。課設(shè)場景下我用第一種方案多一些因?yàn)椴恍枰~外啟動(dòng)服務(wù)演示時(shí)更可控。5.4 現(xiàn)象SQL 執(zhí)行很慢但數(shù)據(jù)量其實(shí)很小原因是數(shù)據(jù)傾斜即席查詢最容易踩的數(shù)據(jù)傾斜場景是count(*) from t group by user_id一個(gè)極端熱門 user 會(huì)拖慢整個(gè) stage。Spark 3.x 下AQE 的spark.sql.adaptive.skewJoin.enabled默認(rèn)開啟但如果課設(shè)源碼或配置里把 AQE 關(guān)了就會(huì)打回原形。對(duì)于這類問題的排查步驟是先在 Spark UI 的 SQL 標(biāo)簽頁里看哪個(gè) stage 長時(shí)間處于運(yùn)行狀態(tài)查看該 stage 的 task 明細(xì)里是否有某個(gè) task 的處理時(shí)間遠(yuǎn)大于同 stage 的其他 task。確認(rèn)傾斜后最粗暴有效的方法是加spark.sql.adaptive.nonEmptyPartitionRatioForBroadcastJoin0.3這類參數(shù)來規(guī)避極端情況。如果參數(shù)調(diào)試效果不明顯就改 SQL用filter把熱門 key 先拆出來單獨(dú)計(jì)算再union all合并結(jié)果。5.5 現(xiàn)象本地跑通了打包到服務(wù)器上跑就報(bào)ClassNotFoundException原因幾乎總是依賴沖突或打包方式不正確。你本機(jī)可能裝了完整 Spark 發(fā)行版IDE 運(yùn)行時(shí)有 Spark 的 jar 包在 classpath 上到服務(wù)器后你只帶了 Fat Jar而 Fat Jar 里沒有把 Spark 相關(guān)的類打進(jìn)去。問題是很多課設(shè)源碼直接照搬網(wǎng)上的maven-shade-plugin配置把 Spark 依賴也打進(jìn)了 Fat Jar這樣在服務(wù)器上有完整 Spark 環(huán)境時(shí)反而會(huì)沖突。正確做法是把 Fat Jar 里排除 Spark 依賴運(yùn)行時(shí)靠spark-submit去加載/path/to/spark/jars/*。如果你需要的是可以直接交給別人用的 JAR 包那就要把 Spark 目錄也隨包發(fā)給使用者并寫清楚SPARK_HOME環(huán)境變量。6. 最后的進(jìn)階技巧把查詢歷史做成熱緩存與慢查詢?nèi)罩灸愕恼n設(shè)能再上一個(gè)檔次大部分課設(shè)做到能查詢、能返回結(jié)果就交差了但如果你想拿高分或讓答辯老師眼前一亮加一個(gè)簡單的查詢歷史緩存層非常見效。核心思路是把結(jié)構(gòu)相同的 SQL去掉字面量值后模式一致和它的執(zhí)行計(jì)劃緩存起來第二次遇到時(shí)走緩存不重新解析和執(zhí)行。實(shí)現(xiàn)上用 ConcurrentHashMap 就可以key 是歸一化后的 SQL 模式字符串。歸一化怎么做用正則把數(shù)字、字符串字面量替換成占位符比如SELECT * FROM orders WHERE user_id 123歸一化成SELECT * FROM orders WHERE user_id ?value。緩存 value 存的是上次查詢結(jié)果的引用和過期時(shí)間。注意這個(gè)緩存只適用于確定性的查詢凡是 SQL 里有now()、current_date這類函數(shù)都應(yīng)在歸一化過程中識(shí)別并禁用緩存。另一個(gè)值得做的是慢查詢?nèi)罩?。你可以包一層QueryRecorder類在executeQuery前后記錄 SQL 指紋、開始時(shí)間、結(jié)束時(shí)間、耗時(shí)、返回行數(shù)。代碼里只需要在executeQuery外層做 AOP 式的環(huán)繞處理或者直接在AdHocQueryService里加兩行System.currentTimeMillis()。日志落到磁盤上是一個(gè) JSON 文件后面你可以寫個(gè) 20 行的小腳本統(tǒng)計(jì)什么類型的 SQL 平均耗時(shí)最長。這個(gè)信息在答辯時(shí)拿出來講比空口說“做了優(yōu)化”有力得多——因?yàn)槟阌辛俗C據(jù)鏈哪條 SQL 慢、為什么慢、優(yōu)化后快了多少。養(yǎng)成一個(gè)習(xí)慣每次拿到新的課設(shè)源碼第一件事是逐行看spark-defaults.conf和pom.xml的依賴聲明而不是先點(diǎn)運(yùn)行按鈕。因?yàn)檫@兩個(gè)文件決定了你的服務(wù)在別人機(jī)器上能不能跑起來。我遇到過太多“在我電腦上明明可以的”這種問題90% 都是依賴范圍和參數(shù)配置沒鎖死。最后再說一句即席查詢服務(wù)的本質(zhì)是“可控的靈活性”你要讓用戶覺得什么都能查但系統(tǒng)要悄悄地把“什么都敢查”的后果兜住。希望這套從架構(gòu)到踩坑的路徑能幫你在課設(shè)答辯時(shí)站穩(wěn)腳跟。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美猛片| 丁香婷婷五月天网站| 五月婷俺去也| 五月天婷婷在线观看| 丁香五月天社区| 免费亚洲成人电影AV| www.开心激情| 91久久色| 九九热九九| 大香蕉99热| 天天干天天操天天爽| 亚洲精品又粗又大又爽A片| 天天久久66xxx| 欧美啪啪9| 丁香五月在线自慰| 五月综合激情| 99热无码首页| 久久人人九九| 成人片黄网站色大片免费毛片| 伍月婷丁香婷| 九九99偷拍视频| 色婷婷九月| 欧洲电影在线观看免费版英语版| 天天干夜夜谢| 99热99成人| 99亚洲视频| 影音先锋91| 九九在线视频| 五月婷免费视频久久久| 97爱综合| 六月激情婷婷| 六月丁香VA| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 五月丁香在线看| 久久一级AV| 狠色狠色综合久久| 日韩无码专区| 婷婷五月天丁香久久| 色播五月天激情| 激情五月色婷婷| 婷婷欧美综合| 99在线视频精品| 97色综合视频| 久热这里| 亭亭玉月丁香| 五月婷婷免费| 中文无码婷婷| 亚洲综合五月天婷婷| 俺也高清无码高清视频| 激情色中文| 做爰丰满少妇1313| 超碰9| 激情五月深爱五月| 九九青草热| 日韩成人av在线| 天天爽夜夜爽夜夜爽精品| 五月激情综合网| 五月丁香婷婷伊人| 五月六月婷婷激情网| 欧美性生交XXXXX无码小说| 丁香六月情| 无码区婷婷五月花开| www.99色| 色噜噜婷婷| 六月亚洲| 草综合网| 开心五月综合激情网| 99ER热精品视频| 久久99热这里只频精品6学生| 国产伊人五月天| 超碰99热精品在线| 丁香五月性爱| 久久久免费精彩视频| av在线色五月丁香婷区久| 91ncm视频| 日本色色影片| 五月丁香久久| 丁香五月影院| 91九色在线| 五月天.com| 2050人人操免费工开爱| Xx色综合| 成人五月天在线观看| 婷婷综合干| 丁香六月婷| 五月丁香六月色| 久久婷婷五月综合色播| 丁香六月天AV| 六月婷婷六月天天在线免费| 激情五月激情综合俺也去婷婷小说| 九九久久玖玖爱| 91狠狠综合久久| 日本久热| 久久久久久9| 精品久久久久久久人妻| 国色天香伊人狠狠色| 五月天婷婷丁香花| 色噜久| 精品一二三区久久AAA片| 亚洲成人高清在线| 五月久久婷婷丁香| 久久99网站| 国产精品蜜臀99| 第四色色六月色综合| 亚洲色激情| 五月丁香中文婷婷中文| 99色| 婷激情五月天视频导航| 新久久五月天激情| www.五月婷婷久久.com| 视色综合| 丁香五月天狠狠| 色五月在线视频观看| 高清无码一区二区三区四区| 狠狠久综合| 婷婷六月爽| 99 r热| www.99热在线观看| 婷婷第六色| 久热超碰| 天天插轮理| 天天干天天干天天干天天干天天干天天 | 久操人妻| 202丰满熟女妇大| 色综合久| av五月丁香| 97色射| 97人人操人人拍| 婷婷激情五月呦呦| 日本一级特黄大片AAAAA级| 久久精品99久久久久久久久| 五月色综合| 六月丁香久久| 婷婷色网站| 国产精品久久7777777精品无码| 五月丁香婷爱在线| 色噜噜狠狠色综合成人网| 色天堂在线| 婷婷午夜激情| 婷婷丁香日韩五月| 五月天久久www| 一区二区成人电影| 九九热精品视频九九| 五月婷婷69| 婷婷激情综合| 98国产精品综合一区二区三区| 激情婷婷丁香| 伊人婷婷五月天| 激情五月图| 色五月成人在线| 噜噜网免费视频| 亚洲综合九九| 狠狠色精品综合| 国产成人高清| 99爱免费视频在线观看| 激情综合五月天| 亚洲这里只有精品| 婷婷伊人綜合| www.五月激情.com| 亚洲精品国产成人AV在线| 夜夜谢天天干| 久久婷综合网| 狠狠狠狠操| 婷婷少妇激情| 欧美久久久中文字幕| 亚洲一级AV在线免费播放| 91婷婷丁香五月| 亚洲激情无码久久| 超碰精品在线| 欧美、日韩、中文、制服、人妻| 五月丁香六月合| 国产精品电影网| 久久多色| 香蕉中文在线| 97久久香草精品视频| 久人操| 色五月婷婷五月天| 91色噜噜狠狠狠狠色综合| 色天天综合色| 天天干天天爽| 啪啪啪综合网| 99热资源在线| 天天日夜夜欢| 丁香五月天综合| 欧美槡BBBB槡BBB少妇| 青青草五月天| 99视频在线精品免费观看2| 婷婷综合五月| 丁香五月欧美激情| 婷婷操久久| 九九99精品免费播放| 丁香婷婷人妻| 色欲色香综合网| 99热伊人综合| 亚洲激情精品| 色婷婷aV四虎| 综合伊人狠狠| 色婷婷av综合网| 停停色综合伊人| 在线观看的av| 色婷婷免费观看| 五月丁香六月婷婷操操操| 国产肥白大熟妇BBBB视频| 猫咪伊人久久| 亚洲婷婷91丁香| 91婷婷五月丁香碰| 99热免费精品| 五月丁香香蕉| 人人干人人看| 国产Va视频| 狠狠干夜夜干| se色99| 国产超碰在线| 狠色狠色狠狠色综合网| 九九亚洲天堂| 怡红院视频| 9九九久久精品无码专区| 天天干天天日天天插| 久久九九热视频| 影视av久久久噜噜噜噜噜三级| 99色在线观看视频| AV成人在线播放| 色婷婷丁香五月| 九九人人看| 色导航色婷婷五月天在线观看| 中文AV网站| 五月丁香在线偷拍视频| 久久久色情| 久色欧美| 先锋五月婷婷丁香草草| 中文幕无线码中文字蜜桃| 婷婷丁香五月激情中文字幕版| 99精品国产热久久91色欲| 亚洲综合另类| www.久久| 国产又黄又爽又激情不遮挡视频在线观看 | 天天舔日日肏夜夜爽| 牛牛澡牛牛爽| 九月激情综合| 亚州激情在线视频| 99综合成人视频在线观看| 开心五月天激情网站| 久久人人添人人爽添人人片αV| 色狠狠综合网| 色婷婷色综合激情91| 五月天婷婷色色网| 婷婷五月天综合蜜桃| 丁香五月影| 综合久久六月| 99热这里只有精品21| 色优久久| 婷婷五月草| 午夜婷婷丁香| www.久9| 98色花堂98t.R| 五月天久久久| 97超级碰人人| 超碰人人艹| 婷婷丁香六月影视| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 夜夜操狠狠操天天操| 日本一区二区三区精品视频| 中文字幕在线日亚州9| 色婷婷五月天中文字幕| 婷婷自拍| 亚洲黄网AV| 国产精品色色| 99热精国产这里只有精品| 色色色1网址| 婷婷激情六月综合| 婷婷五月丁香久久| 婷婷五月成人色综合| 日本91在线播放| 碰97久久| 色高清无码视频| 91打屁股视频网站| 日本性视频| 国产亚洲色婷婷久久99精品91| AV天堂婷婷五月天| 色婷婷91激情小说| 99ri在线观看视频| 色情开心五月| 久久久婷婷五月天| 色狠狠色噜噜AV天堂五区| 丁香五月激情网| 婷婷五月丁香色情| 天天久综合网永久入口17v| 国产偷人爽久久久久久老妇APP| 久久激情天堂| 色色AV色色色东莞| 亚洲AV色婷婷人禽五月天| 香蕉久久国产AV一区二区| 丁香五月婷婷操逼| 香蕉97碰碰碰欧美| 八戒青柠影视剧在线观看| 久99视频在线观看| 无码区婷婷五月花开| 678五月丁香亚洲综合| 综合AV在线| 色五月婷婷影视| 色五月情| 在线视频区| 五月丁香在线| 99精品性爱| 强伦轩人妻一区二区电影| 婷婷色情小说| 国精产品一区二区三区| 青青草视频福利| 天天玩天天摸| 热热久久精品视频| 五月深爱婷婷| 亚洲VA在线| 精品无码色欲AV| 亭亭五月丁香综合欧美| 99热乎| 久草性爱| 91精品啪| 99视频极品在线香蕉| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 婷婷六月丁香1| wwW天天干| 欧美一级色| 激情另类综合| 亚洲avjiujiur91| VA婷婷| 《诡秘之主》在线观看| 99'无码| 色五月开心婷婷| 99精品无码视频| 五月婷俺去也| 人人天堂操| 狠狠操天天日| 五月天天天天天天天天天天天天天天天婷婷婷| 襙逼网| 99热这里只有国产精品| 99热精品无码| 99热在线精品观看| 日本不卡一区二区三区| 久久99精品久| 亚洲XX网| 色婷婷69| 5月激情天| 五月激情丁香五月| 五月天色在线| 丁香五月婷婷基地| 这里只有精品视频在线| 91碰免费视频| 婷婷大乡焦噜噜| 色情久久久| 色婷婷综合综合网| 99re久热只有精品6在线直播| 色五月婷婷、老熟女| 亚洲色 视频| 国产偷人妻精品一区| 丁香 久久| 婷婷丁香人妻天天爽| 欧美日韩成人在线| 1024成人免费看| 99久久終合| 超碰A V在线| 九九热大香蕉| 亚洲激情免费视频| 五月丁香综合网| 色色色1网址| 91干视频| 欧美婷婷五月丁香| 另类视频五月天| 久久人妻超碰一区| PORNY九色9l自拍视频成人| 丁香月五月天婷婷久久| 五月天色色婷婷| 亚洲精品视频在线播放| 一本色道久久88加勒比—| 色色综合色视频| 丁香五月婷婷乱| 五月婷婷成人| 丁香五月天91| 色综合爱综合| 99热婷婷| 亚洲免费av在线| 色色色综合视频| 丁香婷婷视频在线| 天天干人人奸97| 亚州激情九月| 五月婷婷激情综合拍| 色婷婷影视| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 2015在线中文字幕| 美女婷婷六月色| 天天干 夜夜爽| 韩国真做片在线观看| 狠狠se| 五月色情婷婷开心五月色情| 五月婷婷啪| 日韩成人电泉AV| 激情五月丁香色婷婷| 人妻aV在线| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 国产成人AV在线播放| 激情综合网 激情五月天| 五月婷啪啪| 97人碰人操| 六月综和久久| 激情综合五| 色色色综合色| www.色五月.com| 五月情涩综合婷婷| 五月婷婷天| 五月桃花网综合| 亚洲性受XXXX五月丁香| 91人操人人人操人| 五月丁香在线观看99| 99成人小视频| Www.Av网9| 丁香婷在线| 极品少妇XXXX精品少妇偷拍| 桃色激情婷婷伊人网| 少妇综合网| 综合AV在线| 噜噜狠狠色综合久| 一区二区乱码视频| 色五月综合激情| 天天久综合网永久入口17v| 六月婷婷在线| 六月撸婷婷| 丰满人妻一区二区三区| 大香蕉网站,大香蕉综合| 亚洲免费av在线| 日韩一级网站| 性爱网五月天| 丁香六月婷月91婷月| 婷婷五月花| 五月丁香免费视频| 五月丁香激情综合| 日日干日日s| 国产精品18久久久| xxx综合在线| 亚洲日韩操B| 国产高清精品色| 99热超碰在线| 天天热夜夜操| 黄色毛片精品| 九九色热| 五月婷婷综合网| 四色永久成人网站| 天天射夜夜骑| 激情五月份婷婷| 丁香婷婷五月色成人网站| 五月婷中文字幕| 99日韩| 丁香久久久| 五月天久久www| 国产精品国产成人国产三级| 天天爱综合网| 日本的α片xxxwww| 9视频1在线| 99久久久久| 丁香五月骚喷水视频| 婷婷五月丁香99| 婷婷成人视频| 五月丁香婷婷综合| 香蕉97碰碰碰欧美| 九艹在线| 另类激情五月| 六月丁香av| 五月天婷婷久久| 五月天婷婷在线播放免费| Blackedraw视频一区二区| 五月婷婷六月开心| 91久久99久久91熟女精品| 99久久99九九99九九九| 精品一区二区三区木瓜| 无码啪啪| 91精品视频男人的天堂| 超碰99在线观看| 女人天堂 AV| 色婷婷免费观看| 成人做爰A片免费看网站找不到了 国产露脸150部国语对白 | 99热欧美精品| 被强行糟蹋的女人A片| 深爱五月激情| 婷婷六月久久| 99综合| 日韩aⅴ视频| 五月天综合视频| 婷婷久久午夜网| 亚洲五月天色色| 五月天婷婷久久| 激情亚洲网| 丁香五月色色色色| 超碰男人色| 久综合4| 思思热视频| 99热这里只有精品18| 亚洲综合网激情五月天| 麻豆科斗777| 任你艹| 另类精品视频在线观看| 人人干99| 欧美色色色色色色色| 五月丁香人妻| 五月丁香婷婷婷激情爱爱| 五月婷久久综合| 中文字幕乱码亚洲精品一区| 思思热在线观看| 99精品热| 色婷婷丁香五月| 天天操夜夜操| 亚洲日韩一页精品发布| 亚洲精品久久久久久久久久飞鱼| 成AV人片一区二区三区久久| 一点色成人网| 99色综合久久| 亚洲视频码| 秋霞九九无码| 国产操肏网站| 午夜激情五月| 九九热精品99| 亚洲精品无码久久| 激情综合网色播五月| 亚洲精品午夜国产va久久成人| 丁香色六月婷婷| 99日在线视频| 狠狠干,狠狠操| 色欲一区二区三区精品A片| 中字幕视频在线永久在线观看免费| 国产99久久久国产精品免费看| 丁香五月天激情| 精品亚洲国产成人A片在线鸭王| 欧美成人AAA片一区国产精品| 精品国产AV色一区二区深夜久久| www99精品日韩| 中文不卡av| 日韩操啪| 亚洲色综合| 高清无码.com| 五月天色网站| 色色激情网| 色综合久久888| 欧美日本韩国亚洲| 91久久五月天| 色婷婷欧美在线| 亚洲免费99| 五月婷婷六月丁香| 日本三级大片| 天天肏天天肏| 青青草性爱视频| 五月丁香综合啪啪対白| 亚洲人成色A777777在线观看| 色色色色综合网| 国产美女无遮挡裸体毛片A片| 九九色网| 久久这里只有精品5| 色综合性视频| 久久与婷婷| 99re在线播放| 色噜噜狠狠色综合成人网| 99re思思在线视频| 五月婷婷片| 可以看的av网站| 五月婷婷碰碰| 欧洲激情网站| 色五月婷婷一二| 99ri精品| 大香蕉人在线65| 久久这里都是精品视频| 色情综合| 97精品综合久久内射| 五月丁香六月婷婷啪啪综合 | 精品久久二6| 黄色激情五月天| 久热免费视频| 久久婷网| 丁香五月六月婷婷殴美综合| 色五月成人| 色五月婷婷自拍| α久久| 亚洲欧美成人在线| 99热热热国产超碰| 六月丁香影院| 精品一二三区久久AAA片| 婷婷五月AV| 欧美成人精品老美女噜噜噜| 亚洲亚洲人成综合网络 | 五月婷视屏在线观看| 开心激情站| 青青草色在线视频观看| 99爱视频| 第1影院之五月婷婷| 色插综合网| 一起草性爱不卡视频| 亚洲Av成人在线观看| 五月四色色| 99爱爱| 99热这里都是精品| 99碰网站| 99热精品99| 天天舔天天爽| 亚洲天堂无码| 色色色色色网| 成人短视频在线免费观看| 99热只有这里才是精品| 九九无码AV| 色五月天综合| 夜夜爽77777妓女免费下载| 狠狠色色| 天天干天天插| 婷香五月网在线| a网站免费观看| 久久婷五月综合| 婷婷五月综合啪| 欧美啪啪五月天| 天天婷婷| 成人网站av免费网站推荐| 五月婷婷五月天在线| 国产伊人大香蕉| 五月婷婷丁香在线| 五月色亚洲| 97色欧美| 天天日天天添| 丁香六月啪啪| 天天干天天干天天干天天干天天干天天干天天 | 色婷五月天| www.色色五月天.com| 99久久婷婷五月综合| 97视频91| 亚洲爆乳无码精品AAA片蜜桃| 综合婷婷六月| 国产高清av黄色看片| 久99热| 中文字幕第四色.999| 色五月五月天色婷婷色五月| 欧美日韩成人免费在线| 欧美在线视频99| 99亚洲综合| 五月丁香啪啪啪| 婷婷开心综合人妻小说网址| www.第四色99| 九九干视频| 九九热精品| 男女啪啪做爰高潮无遮挡| 先锋av性爱成人电影| 丁香六月婷婷激情| 97人人看| 巴基斯坦粉嫰无码视频| 情一色一乱一伦一91A| 亚洲99综合| 女人天堂av| yw.av| www.五月婷婷.com| 六月色婷婷欧美| 九月婷婷综合在线| 九九精品热| 亚洲婷婷成人五月天| 91啪啪啪啪| 操一操干一干| 五月婷婷影| www.婷婷| 狠狠狠狠青草| 五月婷婷综合激情| 婷婷五月天AV| 六月激情婷婷综合| 四月婷婷五月丁香| 色欧美一级| 色女人久久| 婷婷五月天天| 91丨九色丨熟女丰满| 久久AAAA片一区二区| 久久五月天婷婷| 色婷婷成人丁香| 壅壅儕家a| 狠狠五月天| 99久热这里只有精品| 亚洲久热| 婷婷综合色网| 婷婷六月香| 婷婷五月天电影网| 91九色欧美| 丁香五月在线视频黑人| 亚洲综合久| 99ri网站在线观看| 99精品久久| 婷婷色在线视频| 五月天婷婷黄色| 啪啪91| 激情五月婷婷视频一区二区三区| 91夫妻视频| 色色色色网| 天堂久久性| 影音先锋人妻出差| 五月综亚洲| 另类天堂| 激情久久久久久| 999九九九久久久99HD| 女人被躁到高潮嗷嗷叫小| 中文字幕av久久爽一区| 另类小说色婷婷| 婷婷六月激情在线视频| 久久婷婷五月丁香| 五月天开心色情网| 婷婷5月色| 五月丁香婷婷啪啪| www,色婷婷| 99九九热视频免费| 日韩精品VIP| 天天日色情| 国外亚洲成AV人片在线观看| www.色婷婷| 国产亚洲99久久精品| 久久玖玖综合| 五月婷在线| AV性爱网| www.久久99热地址发布| 99久在线精品99re5热视频| 99这里只有精品|v| 色五月激情婷婷| 婷婷五月天资源| 国产精品A片| 在线观看玖玖资源免费观看| 婷婷中文字幕版| 日日色五月天| 亚洲国产成人裸舞| 亚洲激情免费视频| 玖玖热视频| 99亚洲精品视频| 天天干,夜夜爽| 中文字幕综合| 婷婷99狠狠| 99热99在线| 风流少妇A片一区二区蜜桃| 香蕉AV777XXX色综合一区| 99精品成人无码A片观看金桔| 欧美性爱五月天| 蜜桃人妻无码AV天堂三区| 99国产精品久久久久久久久久久 | 无码人妻激情| 夜夜爽天天爽| 日欧一片内射VA在线影院| 天堂婷婷综合| 久久码久久无清| 五月丁香花激情综合网| 激情五月天婷婷图| 97色伦另类图片小说视频 | 99免费热视频在线| 亚洲人人操| 激情性爱五月天网页| 一本九九色| 五月久熟女| 好吊操这里只有精品| 婷婷五月婷婷五月| 日本一毛片| 国产精品成人在线| 中文字幕91,综合| 亚洲激情婷婷| 色播五月丁香综合| 婷婷五月免费视频| 色五月成人| 色情婷婷久久五月天| 国产婷婷综合在线免费视频| 五月丁香久久综合| 五月婷婷精品无在线| 91大神操美女| 日韩丰满少妇无码内射| 久re热视频| 91精品熟女| 色五月婷婷在线观看| 久久婷婷五月天懂色| 日韩成人中文| 久久久www| 六月色国内综合| 色色色婷婷五月天| 九九九九九九热| 超碰人人操在线| 开心五月婷| 日日爽日日| 涩涩激情五月婷婷| 久久99热这里| 日本在线视频播放91| 欧美日本免费一道免费视频 | 久9综合| 丁香婷婷网| 99视频只有这里精品| 99爱在线视频| 狠狠se| 色婷婷影音| 亚洲色婷婷| 日韩有码久久| 日日肏夜夜干| 色婷婷狠狠18禁| 久婷久婷| 桃色激情网| 99国产在线精品视频| 亚洲免费看片| 丁香五月天之婷婷影院| 丁香五月天大香蕉啪啪| 99色综合网| 五月天激情四射网站| 婷婷丁香五月天激情四射| 亚洲日本激情| 五月丁香影院| 国产精品视频| 思思热视频在线| 91九色PORNY肉丝在线| 亚洲小说五月婷婷| 天天综合在线网| 色99自拍| 九九视屏| 丁香六月av| 色丁香影院| 婷婷狠狠综合网入口| 亚洲avjiujiur91| 五月天色丁香| 久/久精品99看9| 五月丁香大相交| 亚洲视频无| 婷婷性爱五月天| 婷婷色综合中心站| 69色色视频| 日B日潘金莲BB| 好好干av| 亚洲综合色婷| 激情狠狠丁香月| 99精品国产乱码久久久人妻| 国产成人VA| 欧洲色| 激情综合网,婷婷| 天天天天干| 丁香六月av| www.狠狠| 色五月视频无码播放| 国产真实乱对白精彩| 日韩无码人妻一区二区三区综合| 激情五月天婷婷| 日本色婷婷久久99精品91| 97人人草| 欧爱综合视频| 成人国产欧美大片一区| 狠色狠色狠色狠色狠色网| 成人午夜天| 色久免费| xxxx五月天色色| 激情五月婷婷五月丁香五月开心五月 | 五月婷婷日本| 九色91国产| 色欲久久综合| 99在线精品视频| 狠狠干在线视频| 综合久久十三| 丁香五月欧美| 激情久久五月天| 成人在线视频网| 婷婷玉月丁香五月在线视频| 黄色av高清| 五月婷婷综合网| 久久性爱视频| 疯狂做受XXXX高潮A片动画| 婷婷播播五月天| 亚州婷婷五月激情综合| 色停停香蕉视频| 九九综合久久丁香婷婷,开心激情综合网| 婷婷五月天激情网| 天天艹天天综合网| 中文幕无线码中文字蜜桃| 婷婷五月天激情综合网| se99热久久一本| 欧美成人A片AAA片在线播放| 五月婷免费视频久久久| 日韩婷久| 五月天.com| 丁香五月综合亚洲| 国产操B视频| 能看的av| 亚洲九九视频| 天天AV导航网| 午夜色丁香| 久久久久9999| 色五月激情五月| 大功率国产在线| 婷婷五月天最新网址| 久久婷婷色| 日操五月婷| 婷婷色色欧美| 拍真实国产伦偷精品| 2025色婷婷| 五月天色狠狠| 丁香五月伊人| 超碰99在线| 五月丁香亚洲婷婷| 色狠狠狠干| 精品自拍97| 久久丁香| 五月亭亭狠狠| 亚洲五月丁| 婷婷综合视频| 成人AV播放| 在线播放中文字幕| 可以免费观看的AV| 五月丁香 啪啪啪| 日韩999| 丁香五月婷综合| 久久免费精彩视频| 精品网站:999WWW| 国产精品蜜臀99| 婷婷五月综合激情| 成人短视频在线免费观看| 中文字幕丰满孑伦无码专区| 在线视频另类| 噜噜噜噜综合在线| 九九一综合精品| 久久99免费视屏| 五月天停停日日| 五月婷婷黄网站大全| 久/久精品99看9| 综合另类视频| 五月天综合在线观看视频| 开心五月丁香啪| 五月婷婷干干干| 综激情网| 97五月天婷婷综合激情网| 99热超碰人| 国产又爽又猛又粗的视频A片 | 五月天色婷伊人| 色色五月天丁香| 久久在线92| 色色色五月| 婷婷热色| 熟妇高潮一区av| 久久AAAA片一区二区| 99热免费在线| 人妻综合网| 另类视在线| 久久Xx| 六月丁香网| 色五月av| 99热只有| 99色视频| 九九青草热| 天天干天天做| 色婷婷小说网| 成功精品影院| 99久久这里只有精品| 婷婷淫淫狠狠六月| 天天狠狠六月婷丁香影院| 婷婷五月无码| 亚洲成人婷婷| 四色五月婷婷| 五月天婷婷丁香基地在线观看| 狠狠高潮精品亚洲1| 日日天天干| 天天做天天爱天天爽| 日日夜夜天天| 亚洲美女高潮久久久久久69| www.婷婷六月天| 五月丁香六月婷| 亚洲九九视频| 极品人妻VIDEOSSS人妻| 日韩黄在免| 丁香五月婷婷综合激情啪啪啪| 九久九精品| 欧美人人超级碰| 色激情五月| 亚洲中文字幕网| 婷婷激情五月天网站| 丁香婷婷五月天色播| 婷婷色情小说| 饮料下药迷倒漂亮女同事强干| 色色综合激情| 欧洲亚洲精品| 中文字幕日本最新乱码视频| 丁香婷婷欧美综合| 色欧美日| 激情色色| 99视频精品8 | 日本97在线视频| 日本片日本片祼观看网站在线看中文版网页在线看 | 亚洲激情五月婷婷日日| 婷婷丁香综合成人| 日日干天天| 伊人婷婷五月天| 在线观看国产高清视频免费网站| 99欧美热| 91久久综合亚洲鲁鲁五月天| 激情文学天天| 天天天综合网| 97色婷| 1024在线一区| 99热丁香| 5月婷婷6月丁香aV| 免费视频99| 97在线精品| 婷五月天| 激情五月婷黄版| 99热这里只有精品一区| 991精品在线视频| 日日干夜夜干| 色五月天丁香婷婷色| 成人操呦av| 亚洲色爱综合| 五月天成人综合| 国产高清视频91九九九久久久| 五月色丁香| 偷拍视频五月天| 色99热| 怎么样可以看免费的一级av| 久久婷丁香五月| 丁香五月综合在线播放 | 日本nghangse中文字幕| 婷婷五月色播网| 噜噜网免费视频| 五月丁香综合| 久久久久亚洲AV成人无码电影| 开心五月婷婷在线视频免费观看| 色吧五月婷婷| 丁香五月激情五月| WWW.夜夜操.com| 激情九色| 亚洲AV久久久久久久久久久久久久久久| 亚洲成人综合网在线免费观看| 99成人网一区| 激情丁香五月天| 国产精产国品一二三在观看| 大香蕉99| 少妇达人正片在线播放_ikun_福利吧| 色五月av| 五月婷婷AV| 在线观看中文字幕| 男男野外做爰全过程69| www.99在线| 夜丁香五月婷婷| 丁香六月婷婷| 色婷婷色情| 婷婷激情五月天激情| 国产无遮挡又黄又爽免费网站| 久久婷婷色| 思思热在线| 激情婷婷五月社区| 五月丁香花伦理电影| 日狠狠| 91人人网| 五月天婷婷社区| 国产人人操| 热99热9| 日本欧美成人片AAAA| 欧美婷婷六月丁香综合色| www.婷婷.com| 亚洲成片在线观看| 天天天天天久久久久久| 色婷婷小说| 梁铮版《蜘蛛女侠》在线| AV在线资源| 久久99久久99精品免观看粉嫩| 九九热最新地址| 久久丁香综合精品综合| 婷婷五月开心中文字幕在线| 欧美经典片免费观看大全| 日本色频| www.minyis.com【JT】实力收量可预付QQ2101460746 | 五月丁香美女视频| 日韩成人网址| 欧美日韩123| 久久98热re| 伊人大香蕉在线视频| 亚洲视频99| 丁香五月天婷婷大香蕉| 亚洲六月色| av一区二区电影免费在线观看| 五月天婷婷五月| 久9综合| 99热这里有精品2| 天天干在线播放| 婷婷深爱网| 日本三级99人妇网站| 五月婷婷丁香综合| 碰久久精品w| 婷婷五月激情视频在线| www,超碰| 激情婷婷丁香五月天| 丁香九月婷| 久久97| 婷婷五月天激情四射五月天激情| 婷婷五月天久久久| 亚洲第一色色色色| 婷婷综合中文| 婷婷丁香色情| 婷婷第一页| 91丨九色丨高潮丰满日本| 91碰| 日韩无码成人电影| 97色伦另类图片小说视频| 色九九综合色| 玖玖资源在线视频| 99热精品99| 日韩aaaaa| 99精品在线下载| 久久婷鲁| 久久性操| 这里只有精9| 国产成人综合亚洲| 色综合色| 五月天激情综合在线| 欧美顶级少妇做爰HD | 色婷婷五月综合| 久久99视频| 51精品国自产在线| 丁香五月综合在线视频| 开心五月综合激情网| 成人做爰A片免费看网站找不到了 噼里啪啦在线观看免费完整版视频 | 久久91久久精品久久| 丁香六月成人| 另类天堂| 青青草大香| 色色无码| 巴基斯坦粉嫰无码视频| 五月婷婷黄色毛片| 九九色综合九九色| 色五月视频,小说| 超碰成人av| 婷婷六月天| 丁香五月天狠狠| 精品五月丁香| 婷婷黄色五月| 99热97| 亚洲激情.com| 99热色无码| 殴美97色| 九久9精品| 激情五月五月婷婷| 欧美五月丁香在线| 婷婷五月天丁香久久| 激情AV| 久久婷婷五月综合网| 14色综合婷婷| 色综合久久88色综合天天人守婷| 男女免费视频999| 31色区视频免费看| 区美毛片子| SESE无码AV| 激情深爱五月婷婷| 9色在线| 色综合色综合色综合色综合| 亚洲性爱干干| 精品99视频| www.色五月| 婷婷色中文字幕| 五月开心激情| 激情久久天天| 性爱动图国产麻豆一区二区三区| 牛牛色av| 操操操B| 久9视频| 欧美大香蕉视频| 操日挥操日日| 五月丁香婷婷六月天| 五月天啪啪视频| 亚洲精品444久久久久久| 综合色影院| 丁香婷婷五月天成人| 91九色网| 欧美精品99久久久| 丁香六月综合激情| 狠狠插狠狠| va婷婷在线| 久久这里精彩免费在线观看| 九月婷婷综合网| 91n网站cad入口在线观看| 亚洲亚洲人成综合网络 | 99在线视频观看| 天天干天天干天天| 丁香五月自拍| 9久国产| 色噜噜五月天| 中文字幕婷婷五月天在线观看| 777久久综合视频| 色六月丁香婷婷啪啪啪| 99热在线精品播放| 性爱人人网| 天天透天天干| 天天艹| 天天综合网色欲香| 九月色婷婷婷| 大香蕉婷婷婷| www.91五月| WWW色五月| 99色免费观看全部| 五月丁香婷婷伊人| 综合aV在线| 伊人网色婷婷五月天| 欧美三级巜人妻互换| 少妇人妻偷人精品无码视频新浪| 狠狠干综合| 丁香五月婷婷五月| 熟妇内谢69XXXXXA片| 激情网 久久| 超碰免费人人肏| 热婷婷av| 九九视屏| 99热这里有精品首页10| 婷婷网影院| 婷婷激情九月| 色婷婷久久| 天天五月丁香五月| 婷婷丁香五| 五月天久久www| 99福利视频| 99成人精品视频| 欧美性丁香色色五月天干干| 99精彩视频| 久操大| 日本色婷婷| 中文字幕在线免费看线人| 97操在线| 六月婷婷AV| 9999热在线观看| 99日本黄站| 久久久久久久久久久久久久人妻视频| 激情五月伊人婷婷| 婷婷五月天论坛| 五月天com| 伊人久久婷婷| 丁香五月偷拍| 婷婷五月天亚洲综合网| 九九精品热播| 婷婷综合色色| 亚洲综合色丁香婷婷六月| 99色亚洲| 久久三级视频| 白人荫道BBWBBB大荫道| 丁香九色不卡aaa| 另类激情四射| 婷婷激情综合无月| 久久人妻伦理| 120分钟婬片免费看| 99久久国产宗和精品1上映| 婷婷五月精品中文| 五月丁香婷婷爱激情综合网| 婷婷成人综合五月| 99操免费视频| a久久| 日韩在线一级| 精品久久人妻热| 五月天婷婷在线播放| 五月丁香在线观看| 九九婷婷激情综合网| 日韩色久| 婷婷五月婷婷五月天| 在线网黄| 成人精品视频99在线观看免费| 色婷婷精品视频| 五月天久久婷婷婷| 天天爽天天操| 亚洲日韩乱码一区二区三区四区| 色综合久久综合| 婷婷五月亚洲激情| 五月天综合视频网| 最近韩国日本免费高清观看| 九九九午夜视频| 欧美性丁香色色五月天综合爱爱| 五月天婷婷小说| 极品人妻VIDEOSSS人妻| 97色啪| 国产成人va在线| 99亚州综合精品成人网| 五月丁香婷婷激情四射迷人| 婷婷的五月天另类视频| 午夜激情综合| 婷婷婷久久|