久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

基于Spark SQL的即席查詢服務(wù)設(shè)計與實現(xiàn)

基于Spark SQL的即席查詢服務(wù)設(shè)計與實現(xiàn) 簡介面向大數(shù)據(jù)課程設(shè)計與期末大作業(yè)的基于 Spark SQL 引擎的即席查詢服務(wù)源碼包完整包含可運行的系統(tǒng)源代碼、部署文檔與代碼注釋適合需要快速交付高完成度項目的學(xué)生參考。壓縮包共 2000 個文件約 16.83MB其中前端以 HTML/CSS/JS 為主后端含 Java 源碼與 XML、Properties 等配置另附 SQL、YAML、Python、Shell 腳本覆蓋從建表、配置到啟動的完整鏈路目錄結(jié)構(gòu)清晰便于按模塊查閱與二次開發(fā)。目前已有 187 人學(xué)習(xí)下載。資源功能上支持即席查詢、結(jié)果展示與基礎(chǔ)管理界面美觀、操作簡單并配有注釋和文檔說明可幫助新手理解 Spark SQL 執(zhí)行流程與查詢服務(wù)實現(xiàn)思路簡單部署即可運行也可作為課程設(shè)計、期末大作業(yè)的高分參考模板具有較高的實際應(yīng)用價值。1. 基于Spark SQL的即席查詢服務(wù)它到底解決什么問題先給這個項目定個位它不是一個數(shù)據(jù)平臺而是一個“能讓用戶隨手提交一條SQL、在Spark上跑完、把結(jié)果拿回來”的薄服務(wù)層。做課程設(shè)計或大作業(yè)時最常見的誤區(qū)是把Spark SQL寫成一個固定報表的批處理程序用戶改個篩選條件就要改代碼、重新打包、重新提交這恰恰丟掉了“即席”這個詞的核心價值。即席查詢服務(wù)要承接的是“未知的、臨時的、不可預(yù)測的”查詢請求——用戶拿到數(shù)據(jù)后想知道某個維度的分布隨口寫一句SELECT ... GROUP BY ...服務(wù)端接收、解析、提交到Spark、把結(jié)果以友好的格式返回。適合做這個方向的人是已經(jīng)能寫Spark SQL、但對“怎么把Spark的能力封裝成一個可以被外部調(diào)用的服務(wù)”還沒有完整概念的同學(xué)。這個項目的交付物包含兩部分源代碼和文檔說明。實話說很多大作業(yè)的源代碼寫得并不差但文檔跟不上導(dǎo)致評閱老師不知道你的設(shè)計思路和參數(shù)依據(jù)。所以這篇文章會把服務(wù)怎么搭、參數(shù)為什么這么設(shè)、哪些地方最容易翻車講透讓你既能寫出能跑的代碼也能寫出一份說得清設(shè)計理由的說明文檔。2. 服務(wù)架構(gòu)與Spark SQL引擎選型為什么不用JDBC直連2.1 即席查詢服務(wù)的分層設(shè)計從HTTP到Spark的完整鏈路一個典型的基于Spark SQL的即席查詢服務(wù)鏈路從上到下分四層接入層、調(diào)度層、執(zhí)行層、存儲層。接入層負責(zé)接收用戶的SQL文本和參數(shù)做基礎(chǔ)校驗和鑒權(quán)調(diào)度層把SQL交給執(zhí)行引擎并管理任務(wù)的生命周期執(zhí)行層是Spark Session容器的管理器負責(zé)創(chuàng)建和復(fù)用SparkContext存儲層對接Hive Metastore或本地HDFS文件。這樣分層的意義在于換掉任何一層都不影響其他層。比如接入層從HTTP改成Thrift執(zhí)行層的SparkSession不用動存儲層從Hive換成Iceberg接入層的接口參數(shù)也不用動。# 服務(wù)入口FastAPI Spark Session池最簡可用版本 from fastapi import FastAPI, HTTPException from pyspark.sql import SparkSession from pyspark.sql.utils import AnalysisException import asyncio import json import uuid app FastAPI() # SparkSession是重資源只能全局建一次禁止每個請求都new一個 spark SparkSession.builder \ .appName(ad-hoc-query-service) \ .master(yarn) \ .enableHiveSupport() \ .config(hive.exec.dynamic.partition, true) \ .config(spark.sql.shuffle.partitions, 20) \ .config(spark.dynamicAllocation.enabled, true) \ .config(spark.dynamicAllocation.minExecutors, 2) \ .config(spark.dynamicAllocation.maxExecutors, 10) \ .config(spark.sql.adaptive.enabled, true) \ .getOrCreate() query_cache {} app.post(/api/query) async def run_query(request: dict): sql_text request.get(sql) max_rows request.get(maxRows, 1000) if not sql_text or len(sql_text) 1024 * 100: raise HTTPException(status_code400, detailSQL為空或超過長度限制) if not sql_text.strip().lower().startswith(select): raise HTTPException(status_code403, detail只允許SELECT類型的查詢) query_id str(uuid.uuid4()) try: # async toThread 防止阻塞FastAPI的事件循環(huán) result await asyncio.to_thread(execute_sql, sql_text, max_rows) return {queryId: query_id, rows: result} except AnalysisException as e: raise HTTPException(status_code400, detailfSQL語法或表名錯誤: {str(e)}) except Exception as e: raise HTTPException(status_code500, detailf執(zhí)行失敗: {str(e)})這段代碼里最關(guān)鍵的決定是SparkSession全工程只創(chuàng)建一次放在模塊頂層。SparkContext啟動要申請Executor、加載元數(shù)據(jù)冷啟動耗時經(jīng)常超過30秒如果每個請求都getOrCreate一次服務(wù)根本扛不住。asyncio.to_thread的作用是把Spark的同步阻塞調(diào)用丟到線程池避免FastAPI的異步事件循環(huán)被卡死。maxRows參數(shù)控制返回行數(shù)上限防止用戶一條SELECT * FROM 大表直接把Driver內(nèi)存打爆。2.2 為什么自研HTTP服務(wù)比用Spark Thrift Server更合適很多同學(xué)會問Spark本身帶了spark-sql的Thrift Server直接用JDBC連不就行了嗎這里要做個取舍。Thrift Server部署簡單確實能讓你像連MySQL一樣連Spark但對于大作業(yè)和課程設(shè)計來說它有三個硬傷第一Thrift Server默認是單實例的所有查詢串行排隊一個跑大GROUP BY后面的查詢?nèi)轮诙銢]法自定義返回格式JDBC拿到的是ResultSet但即席查詢服務(wù)往往希望返回規(guī)范的JSON結(jié)構(gòu)附帶執(zhí)行時間和查詢ID這類元信息第三你沒法做行級安全控制Thrift Server認證依賴Linux用戶映射想要“不同用戶只能查不同表”這類需求非常難搞。所以自研一個HTTP服務(wù)層本質(zhì)上是把Thrift Server里的“查詢管理”部分拿出來自己寫只不過底層從HiveServer2換成了直接調(diào)用Spark的sql()接口。這樣做的好處是靈活——你可以把spark.sql.adaptive.enabled這類參數(shù)暴露給用戶或者對不同來源的請求限制不同的最大返回行數(shù)。壞處是你得自己處理會話管理、超時控制、異常分類這些Thrift已經(jīng)做過的事。對大作業(yè)來說這是一個“可控的復(fù)雜度”寫起來不難但寫清楚了很加分。2.3 文檔說明里必須畫清楚的數(shù)據(jù)流圖文檔說明的重點不是貼代碼而是讓評閱人一眼看出“SQL進來之后到底發(fā)生了什么”。我建議在文檔里畫一張這樣的流程描述HTTP請求到達 → 接入層解析參數(shù)并校驗SQL → 調(diào)度層生成Query ID并入隊 → Spark Session執(zhí)行spark.sql()→ Catalyst優(yōu)化器做邏輯計劃和物理計劃 → 執(zhí)行結(jié)果以Arrow或JSON格式回傳 → 接入層封裝為統(tǒng)一響應(yīng)。這張圖的價值在于它把“Spark SQL引擎”這個黑匣子內(nèi)部的關(guān)鍵步驟也標注出來了。提示在文檔的“性能評估”章節(jié)建議至少跑三組對比數(shù)據(jù)——小表萬行級、中表百萬行級、大表千萬行級記錄各自的響應(yīng)時間、Executor數(shù)量和GC耗時。評閱老師最看重的是你能說出“為什么大表查詢慢了瓶頸在shuffle而不是在CPU”這類結(jié)論。3. 核心代碼實現(xiàn)從SQL提交到結(jié)果集返回的四個關(guān)鍵類3.1 SQL文本校驗白名單、黑名單和詞法檢查的三層防線即席查詢服務(wù)最怕的是用戶提交一條DROP TABLE或者SHUTDOWN所以SQL校驗不能只靠startswith(select)這一層。常見的做法是三層校驗第一層是關(guān)鍵字黑名單攔截DROP、DELETE、INSERT、ALTER、TRUNCATE、CREATE這類高危動詞第二層是正則白名單允許SQL只包含字母、數(shù)字、空格、逗號、括號和常見的比較運算符第三層是Spark自帶的分析器校驗也就是真正執(zhí)行前先調(diào)用spark.sessionState.sqlParser().parsePlan(sql)讓Spark自己去發(fā)現(xiàn)表是否存在、列是否存在、類型是否匹配。前兩層是“快速拒絕”第三層是“準確拒絕”。import re BLOCKED_PATTERN re.compile( r\b(drop|delete|insert|alter|truncate|create|grant|merge)\b, re.IGNORECASE ) SAFE_CHARS_PATTERN re.compile(r^[A-Za-z0-9_\s.,;()\*-/%|!]$) def validate_sql(sql_text: str) - None: # 第一層高危動詞攔截 if BLOCKED_PATTERN.search(sql_text): raise ValueError(SQL包含DML/DDL高危操作已攔截) # 第二層非法字符攔截防止SQL注入拼接攻擊 if not SAFE_CHARS_PATTERN.match(sql_text): raise ValueError(SQL包含非法字符) # 第三層交給Spark解析器驗證語法 try: spark.sessionState.sqlParser().parsePlan(sql_text) except Exception as e: raise ValueError(fSQL語法錯誤: {str(e)}) def execute_sql(sql_text: str, max_rows: int): validate_sql(sql_text) start_time time.time() df spark.sql(sql_text) # 重點限制返回行數(shù)避免collect全量結(jié)果 limited_df df.limit(max_rows) rows limited_df.collect() cost_ms int((time.time() - start_time) * 1000) # 手動把Row對象轉(zhuǎn)成字典控制JSON序列化字段名 return [row_to_dict(row) for row in rows], cost_ms校驗層設(shè)計的原則是“寧可誤殺不可放過”。比如黑名單用了\b詞邊界避免誤傷dropouts這類包含子串的詞白名單把;和空格都放進來因為Spark SQL支持一條語句帶多個子查詢但也把空格、空白符限定在ASCII范圍內(nèi)堵住Unicode編碼繞過。第三層校驗是靈魂——很多同學(xué)只做了第一層就拿來交給Spark執(zhí)行結(jié)果SELECT * FROM no_such_table跑到Spark里才報錯Executor堆棧信息對用戶毫無意義而用parsePlan預(yù)處理后錯誤在進入調(diào)度隊列之前就能被捕獲并轉(zhuǎn)換為友好的HTTP 400響應(yīng)。3.2 異步執(zhí)行與超時控制用Future.await避免任務(wù)永不返回Spark作業(yè)掛在YARN上最怕的是用戶寫了一個笛卡爾積join跑半小時不出結(jié)果HTTP連接還得一直掛著。解決方案是給Spark的sql()執(zhí)行包一層Future超時機制。注意PySpark里你不能直接中斷一個正在跑的Spark作業(yè)——集群上的任務(wù)一旦提交給Executor從Driver端強制取消并不總是立刻生效但你可以選擇“放棄等待”并返回超時錯誤同時調(diào)用spark.sparkContext.cancelJobGroup()來做盡力而為的取消。from concurrent.futures import ThreadPoolExecutor, TimeoutError import threading # 用一個專用線程池跑Spark任務(wù)和HTTP線程池隔離 spark_executor ThreadPoolExecutor(max_workers2, thread_name_prefixspark-runner) def execute_with_timeout(sql_text: str, max_rows: int, timeout_sec: int 60): future spark_executor.submit(execute_sql, sql_text, max_rows) # unique代表給當(dāng)前查詢加一個可識別的jobGroup便于取消 spark.sparkContext.setJobGroup(fquery-{threading.get_ident()}, sql_text[:50]) try: result, cost future.result(timeouttimeout_sec) return result, cost except TimeoutError: spark.sparkContext.cancelJobGroup() raise TimeoutError(f查詢超過{timeout_sec}秒已終止) finally: spark.sparkContext.clearJobGroup()超時數(shù)值的設(shè)定不要拍腦袋。如果大部分作業(yè)在10秒內(nèi)完成把超時設(shè)成30秒意味著你允許三倍方差的存在設(shè)成10秒則會導(dǎo)致正常的查詢頻繁被殺。我一般會根據(jù)實測第95百分位的查詢耗時來定初始值設(shè)60秒跑一周之后看日志里超時查詢的SQL特征再決定是優(yōu)化SQL還是放寬超時。特別注意cancelJobGroup()和clearJobGroup()必須成對出現(xiàn)否則緊接著的下一個查詢?nèi)绻€沒設(shè)置新的jobGroup可能會被上一次的取消信號誤傷。3.3 結(jié)果集序列化Row轉(zhuǎn)字典時要處理的三個類型坑Spark的collect()返回的是Row對象直接交給FastAPI的jsonable_encoder會報錯。常見的做法是轉(zhuǎn)成Python原生字典但這中間有幾個類型坑java.sql.Timestamp和datetime.date不能直接JSON序列化Decimal類型精度高但JSON.stringify時會變成字符串binary類型會變成bytearray需要轉(zhuǎn)成hex字符串或base64。寫一個兼容的row_to_dict函數(shù)是服務(wù)上線前必須完成的臟活。import datetime import decimal from typing import Any, Dict, List def row_to_dict(row) - Dict[str, Any]: result {} for field_name in row.__fields__: value row[field_name] result[field_name] sanitize_value(value) return result def sanitize_value(value: Any) - Any: 遞歸處理嵌套結(jié)構(gòu)和特殊類型 if isinstance(value, datetime.datetime): return value.isoformat() # 統(tǒng)一轉(zhuǎn)ISO 8601字符串 if isinstance(value, datetime.date): return value.isoformat() if isinstance(value, decimal.Decimal): return float(value) # 注意可能損失精度但JSON不支持Decimal if isinstance(value, bytearray): return bytes(value).hex() # binary類型轉(zhuǎn)hex if isinstance(value, list): return [sanitize_value(v) for v in value] if isinstance(value, dict): return {k: sanitize_value(v) for k, v in value.items()} return value這個函數(shù)的關(guān)鍵在于遞歸處理嵌套結(jié)構(gòu)。Spark的collect()如果返回的是ArrayType或MapType字段Row對象里對應(yīng)的值是Python list或dict內(nèi)部的元素同樣可能是Decimal或Timestamp所以必須有遞歸分支。日期轉(zhuǎn)isoformat()而不是str()因為ISO格式帶T分隔符前端JS可以直接new Date(value)解析Decimal轉(zhuǎn)float是有損的但如果你的查詢結(jié)果涉及金額累加建議保留字符串格式——這里要看你服務(wù)的下游是什么前端展示用float沒問題喂給報表系統(tǒng)就建議用字符串。4. 部署參數(shù)與性能調(diào)優(yōu)從一個“能跑”的服務(wù)變成一個“抗造”的服務(wù)4.1 提交模式選型client模式還是cluster模式即席查詢服務(wù)這類“常駐進程”場景推薦用YARN client模式但有個容易被忽視的前提——你的服務(wù)進程必須部署在集群的網(wǎng)關(guān)節(jié)點上且該節(jié)點能訪問HDFS NameNode和YARN ResourceManager。很多同學(xué)第一次部署時把服務(wù)跑在本地Windows機器上報Connect to RM:8032 failed就是因為本地機器不在集群的網(wǎng)絡(luò)白名單里。而cluster模式恰恰相反Driver跑在AppMaster內(nèi)部服務(wù)進程無法通過spark.sparkContext拿到實時作業(yè)狀態(tài)。這個選擇也直接改變了你的超時控制邏輯client模式能調(diào)用cancelJobGroup()cluster模式下你只能通過REST API去殺Application。4.2 必需調(diào)優(yōu)的5個Spark參數(shù)和它們的邊界值參數(shù)默認值推薦值說明spark.sql.shuffle.partitions20020~50即席查詢多為中小數(shù)據(jù)集200個分區(qū)會導(dǎo)致大量空taskspark.dynamicAllocation.enabledfalsetrue讓集群按負載伸縮Executor數(shù)量spark.dynamicAllocation.maxExecutors無10上限過低大查詢失敗過高會占滿隊列資源spark.sql.adaptive.enabledfalsetrue運行時合并小分區(qū)避免數(shù)據(jù)傾斜局部拖慢整體spark.executor.memoryOverhead0.10.2~0.3提升Executor內(nèi)Python進程所需的內(nèi)存預(yù)算spark.sql.shuffle.partitions是影響最大的一個參數(shù)。默認200意味著任何一次GROUP BY或JOIN的shuffle階段都會生成200個小文件如果你的集群只有6個Executor200個Reduce Task平均每個Executor要跑33個每個task的啟動和序列化開銷會白白耗費大量時間。對幾十GB以內(nèi)的即席查詢數(shù)據(jù)20個分區(qū)通常更合理。但是如果查詢涉及數(shù)據(jù)傾斜比如某個熱門品類占了90%的行20個分區(qū)又太少了——AQE開啟后Spark會在動態(tài)優(yōu)化階段自動拆分傾斜的分區(qū)所以你必須同時把spark.sql.adaptive.enabled打開才能讓較低的分區(qū)數(shù)不成為性能瓶頸。4.3 并發(fā)控制與資源隔離為什么不能“有多少請求就開多少線程”SparkSession不是線程不安全的但Spark SQL任務(wù)的并發(fā)調(diào)度需要控制。即席查詢服務(wù)最常見的翻車方式是服務(wù)同時來了50個請求50個Spark作業(yè)一起提交每個占3個Executor集群瞬間打滿然后所有查詢都開始等資源最后一起超時。正確的做法是給服務(wù)加一個信號量或者有界隊列限制同時提交的Spark作業(yè)數(shù)量不超過spark.dynamicAllocation.maxExecutors / 2其余請求排隊。import asyncio from asyncio import Semaphore # 限制同時執(zhí)行的Spark作業(yè)數(shù)量防止集群資源被瞬間打滿 query_semaphore Semaphore(3) async def run_query_limited(request: dict): sql_text request.get(sql) timeout request.get(timeout, 60) async with query_semaphore: try: result, cost await asyncio.to_thread( execute_with_timeout, sql_text, request.get(maxRows, 1000), timeout ) return {status: success, costMs: cost, rows: result} except TimeoutError: return {status: timeout, costMs: timeout * 1000, rows: None}信號量設(shè)置成3意味著同一時刻只有3個Spark作業(yè)在跑。這個數(shù)值不是拍腦袋定的——假設(shè)集群動態(tài)分配最大10個Executor每個中等查詢申請3個Executor那么3個并發(fā)查詢正好占滿9個Executor留1個剩余給AM和調(diào)度余量。如果有10個并發(fā)請求剩下7個會排隊等待但排隊總比“10個作業(yè)互相爭搶資源最后全部超時”要好得多。另一個細節(jié)是排隊提示要友好如果asyncio.wait_for拿不到信號量應(yīng)該給用戶返回一個“當(dāng)前查詢排隊中”的狀態(tài)而不是讓用戶以為服務(wù)掛了。5. 避坑指南即席查詢服務(wù)最容易翻車的5個真實場景5.1 現(xiàn)象collect操作導(dǎo)致Driver內(nèi)存OOM服務(wù)直接宕掉原因用戶提交了SELECT * FROM 超大表df.collect()把全部數(shù)據(jù)拉到Driver端Java堆被撐爆SparkContext掛掉整個服務(wù)不可用。解決limit(max_rows)只控制返回給用戶的行數(shù)但Spark在執(zhí)行collect()之前會在所有Executor上并行處理數(shù)據(jù)Driver的內(nèi)存壓力在于接收結(jié)果集。一定要設(shè)置兩層限制Spark作業(yè)層面加上df.count()的閾值預(yù)判即對大表默認拒絕全量查詢框架層面把maxRows的默認值設(shè)成200行而不是1000。另外給JVM配置時spark.driver.memory至少要給4GB以上并且把spark.driver.maxResultSize設(shè)成1GB超過直接丟棄結(jié)果。5.2 現(xiàn)象spark.sql()執(zhí)行成功后結(jié)果集返回給HTTP客戶端時拋出Object of type Row is not JSON serializable原因PySpark的Row對象不是Python原生結(jié)構(gòu)FastAPI的JSON編碼器不認識。解決:直接使用前面給的row_to_dict函數(shù)。很多同學(xué)圖省事只用df.toJSON()這個接口返回的是JSON字符串但字段順序不穩(wěn)定嵌套結(jié)構(gòu)也會被壓平前端解析很別扭。toJSON()的內(nèi)部實現(xiàn)其實也是走了一遍Row的序列化它的輸出格式里Decimal會被轉(zhuǎn)成字符串Timestamp會變成2024-01-01 00:00:00這種沒有時區(qū)信息的格式而手寫的sanitize_value能統(tǒng)一時區(qū)為UTC并且處理嵌套結(jié)構(gòu)時更可控。5.3 現(xiàn)象服務(wù)跑了一天后spark.sql()開始報AnalysisException: Table not found原因測試時用的臨時表是內(nèi)存里的createOrReplaceTempView服務(wù)重啟后重新注冊的表丟失或者Hive Metastore連接數(shù)達到了上限。解決在服務(wù)啟動時統(tǒng)一初始化注冊所有視圖和臨時表把初始化邏輯放在單獨的init.py里并在文檔里寫明“如果需要添加新表重啟服務(wù)生效”。更隱蔽的坑是同一個SparkSession同時被多個線程用來執(zhí)行spark.sql(USE test_db)這個會話狀態(tài)是全局共享的一個線程改了當(dāng)前數(shù)據(jù)庫其他線程的SELECT * FROM table就會出現(xiàn)表找不到或指向錯誤的庫。解決辦法是讓所有SQL都顯式帶上庫名禁止裸表名。5.4 現(xiàn)象YARN隊列里堆積了大量FAILED狀態(tài)的Application原因超時控制的cancelJobGroup()只取消了SparkContext里的作業(yè)調(diào)度但YARN上的Container釋放需要時間頻繁提交超時查詢會導(dǎo)致大量AM在排隊和銷毀之間反復(fù)橫跳。解決超時時間不要設(shè)太短給查詢服務(wù)單獨設(shè)置一個YARN隊列比如root.adhoc配好容量上限防止即席查詢擠占生產(chǎn)任務(wù)隊列。文檔里應(yīng)該放一段YARN隊列的配置示例和說明這會讓評閱老師覺得你考慮了“運維隔離”層面的問題。5.5 現(xiàn)象不同時區(qū)下查詢結(jié)果里的日期字段差了8個小時原因Spark的TimestampType在Driver端默認轉(zhuǎn)成America/Los_Angeles時區(qū)而你的Web服務(wù)運行在東八區(qū)。解決spark.sql.session.timeZone顯式設(shè)置為Asia/Shanghai并且sanitize_value里對datetime統(tǒng)一用isoformat()輸出前端解析時需要帶上08:00偏移。這個問題在跨地區(qū)部署時幾乎必踩單機本地測試又很難發(fā)現(xiàn)所以文檔說明的“環(huán)境要求”章節(jié)一定要寫清楚時區(qū)配置。6. 進階技巧把這個大作業(yè)做成“能講出亮點”的課程設(shè)計如果你還有余力我建議給服務(wù)加兩個不算太難但很加分的功能查詢?nèi)罩敬鎯徒Y(jié)果集分頁。查詢?nèi)罩静恢皇怯涗汼QL文本和執(zhí)行時間還要記錄用戶提交的原始SQL、Spark的執(zhí)行計劃摘要通過df.explain(True)采集、實際讀取的數(shù)據(jù)量、shuffle字節(jié)數(shù)。這些數(shù)據(jù)積累起來后你可以做一次“慢查詢分析”找出哪些SQL模式最消耗資源然后把結(jié)論寫進課程設(shè)計的心得部分——評閱老師非常吃這一套因為這證明了你不是“把接口寫完就完事”而是有真實的數(shù)據(jù)驅(qū)動改進意識。結(jié)果集分頁用limit offset在Spark層面做但要提醒自己Spark的offset本質(zhì)上還是先掃描再丟棄數(shù)據(jù)量大的時候并不比collect快多少。一個更聰明的做法是把第一次查詢的結(jié)果寫入一個臨時視圖后續(xù)翻頁用SELECT * FROM temp_view LIMIT 20 OFFSET 0去查雖然也要重新執(zhí)行但避免了用戶重復(fù)提交一段又臭又長的原始SQL。加上分頁后maxRows的限制就可以從“返回行數(shù)”放寬到“單頁行數(shù)”集群壓力反而更小了。性能驗證時用TPC-H的三個查詢做基準就足夠有說服力。用q1測掃描和聚合用q5測多表join用q9測帶子查詢的復(fù)雜過濾分別記錄在不同shuffle.partitions參數(shù)下的耗時曲線做成一個簡單的參數(shù)敏感性表格放在文檔里。我記得自己第一次做這類調(diào)優(yōu)時把shuffle.partitions從200改成20q1的耗時從45秒降到了21秒當(dāng)時還以為集群出了故障后來看了Spark UI才發(fā)現(xiàn)200個task里有一大半在空跑。從那之后我也習(xí)慣了一個做法每個查詢完成后把Spark UI的Job頁截圖存下來作為服務(wù)性能分析的第一手證據(jù)——視覺化的證據(jù)在文檔里永遠比文字有說服力。即席查詢服務(wù)這個方向技術(shù)棧完整度很高有HTTP服務(wù)、有分布式計算、有元數(shù)據(jù)管理、有并發(fā)控制而且每一個點都能獨立展開寫。做的時候多想想“用戶的典型請求模式是什么”圍繞這個去設(shè)計超時和并發(fā)限制你的服務(wù)就不會只是一個玩具。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
十八禁视频一区二区| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 国产精品自在线发布| 九九九九9999| 国产熟码AV| 嗯嗯啊啊操死我| 竹菊影视国产一区二区| 天天爽夜夜爽夜夜爽精| www.亚洲成人一区| 91丝袜美女视频| 欧美综合网1| www.97在线| 亚洲乱码尤物193YW| 美女裸体无遮挡永久免费观看网站| 久久视频,这里只有精品 | 白嫩少妇| 少妇被c 黄 免费观看| 久久久久久裸体| 97 超碰 人人做 人人爱| 丁香六月婷婷综合| 又大又白奶子| 99re95| 日韩精品一区二区三区色欲| 无码人妻精品一区二区中文| 操婢日韩| 另类小说综合网| 一区AV| 巨乳特殊服务按摩| 天美传媒婬乱在| 天天肏夜夜肏| 日韩熟女精一区二区三区不卡| 日韩欧美麻豆 | 98人妻精品一区二区色欲| 我要色综合网站| 日本天堂在线播放| 校园春色 欧美| 国产白丝精品在线观看| 一区不卡在线观看av| 被男人吃奶很爽的毛片| 天天爽夜夜爽夜夜爽精| 日韩欧美成人性爱在线| 粉嫩粉嫩一区性色AV片| 97干com| 熟妇熟女一区二三区| 美女在线H91| 青青草十区九区爱夜| 黄色十八禁网站| 亚洲另类色图片| 精品亚洲俞拍视频一区| 啊啊啊啊啊啊啊网址在线观看| 99精品在线| 欧美 日韩第一性色| 九九九九九九综合| 欧美日韩大香蕉| 色在线综合| 国产精品自拍xxxx| 久久久网站| 好吊妞转入那个网| 亚洲 欧美 另类 日韩 人妻一区| 激情综合网一盗摄| 99re这里只有| 国产亚洲深夜激情| 97超碰国产亚洲精品资源| 97欧美精品综合| 亚洲成人妻日韩在线| 97超级色碰碰| 在线a亚洲视频播放在线| 欧美日韩色综合网| 韩国久久97| 久久一二三四不卡 | 欧亚在线视频| AV丝袜少妇| 欧美另类天堂| 日本性爱欧美性爱| 精品少妇后入一区二区三区四区人妻巨乳 | 91精品婷婷国产综合久久竹菊| 懂色av中文字幕一区二区三区天美 | AV和黑人在线播放| 日韩美一区| 91天美传媒在线观看| 老熟女综合网| 亚欧性爱无码| 欧美日韩精品久久| 久久中出| 97精品综合久久| 91高跟美女在线播放| 日韩天天综合| 天天日天天色| 天天欧美97| 精品午夜福利国产一区二区在线观看| 国产又大又粗又长视频在线| 中文字幕成人乱码熟女精品国50 | 啊啊啊97视频| 2021国产成人精品久久| 日韩啪啪网| 9 7超碰在线免费观看| 白嫩91在线亚洲| 日韩成人在线性爱视频| 久久99国产综合精品女同| 十八禁电影伊人网| 91在线视频观看国产| 亚洲 欧美 中文 日韩超碰| 爱妻综合网| 极品销魂美女一区二区| 9/A片| 久久精品久久久久久久| 国产亚洲99久久精品| 国产熟女精品区| 人人操 欧美| 在线观看AV不卡| 亚州综合在线| 亚洲第一页欧美| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 99中文字幕| 亚洲啪啪性视频| 60秒免费视频| 色婷婷久久| 91热热色| 精品久久久久久亚洲| 久久是精品| 操逼逼无码| 人妻天天爽夜夜爽2| 久久九九视频九九视频| 三四中文字幕| 一区,二区,三区网站| 亚洲麻豆av一区二区| 午夜天天碰综合视频| 探花精品 一区二区| 中文字幕日韩国产传媒欧美精品| 91在线免费精品视频| 久久久久久性爱片| 成人精品久久久午夜福利| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 97色涩| 青青操综合网| 97超级久久| 三级三级三级日本99| 国产综合久| 中文高清一区二区的| 性色aV一区二区三区噜噜| 色女女女导航| 成人a级高清视频在线观看| 亚洲色图欧美另类在线| 色丁香久久| 精品黄色电影| 97超碰人操| 91狠狠综合久久| 精品一级| 小骚逼被操的爽不爽| 欧美视频一区二区在线| 亚洲暴力强奸AV| 国产成人+综合亚洲+天堂| 无码粉嫩白虎一线天b区| 久久久一级| 免费黄色片。| 人人操人人色网| 9超碰免费| 抽插无码高清一区| 久久精品午夜国产亚洲AV无码| 久久鲁夜| 久久99操天天日| 国产真乱mangent| 91老熟女91老女人| 蜜臀在线免费观看在线免费观看| 美女自卫慰黄网站免费| 波多野结衣之双飞调教在线播放| 中文字幕人乱码中文字的预防方法| 婷婷九月色| 男人的天堂午夜av| 亚洲国产精品成人久久蜜臀| x97av| 天天欧美色| 精品国产丝袜一区二区三区乱码| 蜜臀无码视频在线观看| 丰满少妇一区二区三区免费看| 久神马| 观看视频图片一区二区三区| 九九人人操| 尤物网址| 久久久一区二区三区三州| a啊啊啊啊啊啊啊啊一区二区| 欧美78| 三级片大波波| 亚洲色图91欧美日韩| 秋霞无码av鲁丝片一区| 天天插夜夜操| 国产一区二区三区高清视频| 天天狂操夜夜狂日| 熟女高潮精品一区二区| 成人无码欧美一级A片狼牙直播| 嫩草影院永久在线制服丝袜| 亚洲AV高潮| 青娱乐导航AV| 熟女丝袜视频| 91最新综合| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 玖玖蜜臀资源网| 无码9区| 国内毛片无码一级毛片| 开心五月激情网| 韩国一级婬片A片AAAAA| 天天插天天操| 亚洲国产无码精品首页久久久| 国产区91柔拿会所技师| av在线不卡一区二区三区| 欧美区亚洲区偷拍区| 亚洲加勒比| 好属操| 另类图片综合| 日韩免费高清大片在线| 91搞逼视频| 日韩免费三级黄片电影| 无码一区二区精品视频久久久春药| 东京热一区二区中文字幕| 精品999999| 屁股久久久久久| 人人摸人人入| 八戒午夜福利理论片| 一级人妻性爱视频| 欧美日韩香蕉| 91久久婷婷| 96精品在线| 丰满少妇一区二区三区专区| 日韩丝袜高跟制服在线观看| 97久久超碰日韩精品| 男人的天堂VA| 久久精品毛片免费不卡| 久久精品国产免费观看99| 又大又白奶子| 在线黄色污污网站| 这里都是精品| 日韩精品一区二区日韩| 天堂种子在线www网资源| 一本一道人妻久久一区二区三区| 男插女青青影院| 亚洲素人综合| 一品道视频一区二区三区| 黑丝91视频| 亚洲Av噜噜一区二区三区妖精| 少妇激情AV| 国产精品国产精品国产| 国产最新小视频在线播放下载| 日本视频在线观看污污污| 99久在线精品99re8热| 欧洲精品在线播放| 99999re| 密乳AV免费观看| 天天日天天色| 欧美日动态视频| 国产精品播放| 国产呦精品一区二区三区下载| 欧美天天插| 久久原创中文| 国产欧美日本亚洲精品| 久久久草成人网站久久久草成人久久久草久久久 | 欧美视频一区二区在线| 91久久国产综合久久| 欧美日本天堂| 久久精品一区二区一8| 色色福利| 超碰在线974| rivers-china.com| 中文字幕美女91| 亚洲人成网www| 天美传媒AV国产在线| 一本久道久久综合狠狠爱一密臀精 | 五月丁香啪啪啪| 欧美九九99久久精品| 日韩国产九九精品一区二区三区毛片| 男女性感激情网站| 1204av韩国| 丁香七月婷婷| 极品人妻少妇综合| 久草免费福利在线播放| 亚洲中文电影| 亚洲一区二区三区不卡国产欧美| 男人的天堂.com| 日韩无码第3页| 丁香六月东京热| 97干天天| 欧美自拍偷拍综合图片| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 99这里有精品视频| 欧美色性情| 五月婷婷AV| 九九九只有精品| 日韩探花精品在线视频| 秘书高跟黑色丝袜国产91在线| 中日韩熟女| 精品人妻一区二区三区视频| ji熟女.com| 天天干2019| 男人的天堂va在线| 熟妇人妻精品一区二区视频色欲| 久久精品区| 色狠狠色| 92性色国产午夜福利在线661| 天天干2019| 亚洲人成在线放东京热| 日韩在线女优天天干| 熟妇亚洲一区二区三区| 乱伦一二三区| 久草精品一区| 女同性恋久久| 欧美综合色图网| 人妻AV在线| 精品无码少妇| 国产美脚女优尤物在线观看| 免费啪啪av| 91色色综合| 一区二区三区欧美激情| 亚洲男人天堂AV| 日韩美脚一区二区网站| 91久久免费视频互動交流| 69精品人人人人| 午夜AV人气不卡| 欧美日韩亚洲国产中文永久天天看| 久久婷婷综合国际产色怕| 久久精品一区二区三区蜜桃臀| 美女黄频a美女大全免费皮| 亚洲熟女一区二区| 白丝AV网站| 操逼国产免费| 不卡日本一区二区| 不卡一区视频| 99这里有精品| 综合欧美日韩在线观看| 91亚洲综合| 欧美亚洲高清不卡| 日韩精品.久久精品.AV女优.天美传媒| 在线视频亚洲无码| 一区二区播放| 欧美曰韩国产精品| 99热| 亚洲高清无码在线桃色| 亚洲男人天堂av| 色婷婷淫色网| 国产日本熟女顶级一区二区三区视频| 中文字幕一区二区在线日韩精品| 男人的天堂va| 男人的天堂久久| 亚洲一二三四区机械| 最近的最新的中文字幕视频| 乱伦一二三区| 91bbb| 免费草草草草草视频| 青青草自拍视频在线播放| 粉嫩粉嫩一区性色AV片| 精品人妻一区二区三区日产乱码| 91精品少妇搡搡搡| 老熟女区| 亚洲中文字幕妇伦久久| 国产伦精品一区二区三区在线观 | 激情综合五月婷婷| 成人日韩3| 久久精品人妻一区| 青青青青青手机视频| 97国产天堂岛| 嗯啊啊啊轻点视频 | 五月天亚洲网| 91精品婷婷国产综合久久竹菊| 男人的天堂在线有码| 九九性爱网| 91社操逼| 脫衣舞一区二区三区| 午夜性生活av免费在线看| 91精品丝袜久久久久久| 成人九九| 0755午夜福利视频| 东京热毛片177b2viP| 后入综合久久| 91亚洲网站| 国产白丝网站| 欧美高清第一页| 欧洲视频在线| 高清无码网址| 欧美午夜一区二区三区| 天天做日日爱夜夜爽| 18禁的网站在线| 国产精品自拍xxxx| 十八岁啪啪视频免费看| 日本欧美一区二区三区免费| 综合在线导航一区| 操逼视频亚洲| 一区二区娱乐网站| 啊啊啊啊嗯嗯嗯用力好爽| 日本岛国黄色网址 | 人妻娇喘 激情视频| 久久久久极品| 91精品导航| 超碰97日韩| 97日亚洲欧美| 国产主播福利| 十八禁的黄污污免费网站| 天天色,天天干,天天干| 亚州操逼网| 99精品在线播放| 六六久久日韩不卡| 伊人网在线观看| 亚洲欧美日韩国产丝袜自拍中文| 男人成人黄色视频在线观看免费下载| 99色热| 啊啊嗯嗯好爽| 无码乱人伦中文视频| 国模精品娜娜一二三区| 啊啊啊用力在线观看| 神马午夜久久久| 久久m| 校园春色美腿丝袜 | 美女被啪到深处抽搐视频| 天天干天天操天天操夜夜操天天操| www.色吧5.com| 不卡一区二区日本视频| 五月婷久久| 欧洲免费一区二| 91色伦综合| 亚洲天堂少妇| 奇米四色网| 国产 日韩 另类 视频一区爱| 婷婷色网| 9ⅰ久久久天天| 亚洲动态色图| 久久久 国产精品| 91狠狠综合久久久久久| 超碰97导航| 白丝一区| 天天干,夜夜爽| 欧美在线啊啊啊| 97se亚洲综合自| 日韩偷拍一区二区三区 | 亚洲男人天堂2| 亚洲色宗合| 无码逼| 久久久久久大| 亚洲 欧美 日韩另类 麻豆| 人妻性爱一区二区| 亚洲第一页色| 精品人妻久久久| 国产精品美女久久久久AⅤ国产馆| 丁香五月久久| 日日日日做夜夜夜夜做无码97| 日韩视频中文字幕| 超碰公开久久网| 骚货 中文字幕 av| 免费A V在线播放| 国产超碰在线一区| 精品久| 色五月网址| 亚洲极品| 国模无码一区二区三区在线| 人人妻人人色| 99e久久国产精品| 国产四虎在线| 天天澡天天狠天天天做| 亚洲精品 大香蕉| 日韩成人人妻网站| 国产97色在线| #NAME?| 欧美性爱在线无码| 人乳av| 夜间福利片1000无码| 黑人中出21连凳花野真衣| 丁香色狠狠色综合久久小说| 北条麻妃99精品青青久久| 亚洲欧美黄| 天天爱天天韩国日本牛牛牛牛 | 久久婷婷综合国际产色怕| 欧美亚洲厕所精品偷拍91| 家庭乱伦国产精品| 青草香蕉网| 国产精品嫩草影院午夜两性| 亚洲精品天天影视综合网 | 人妻插插人妻人| 国产精品com| 色月天AV导航| 911av网站免费观看| 欧美国产成人在线| 亚洲人妻中文高清| 久操频道免费在线呗看| 99热成人| 天天草天天日| 狠狠亚洲| 婷婷在线精品| 9久在线视频只有精品| 蜜桃精久三区| 免费黄色A片| 欧美亚洲系列| 综合 青草 伊久久 影院 综合| 一级岛国大片| 亚洲日韩资源| 偷窥自拍亚洲色图| 日韩色欲久久一二三四区| 99国产精品自在自在| 日韩成人电影AV| 91视频精品| 亚洲欲| 精品色色| 日本一级婬片试看三分钟| 天天天堂影视日韩亚洲91| 99在线观看| 亚欧无码线免费观看视频| 无码久| 韩日精品四区| 性在久久久久久| 91老司机精品| 牛牛久久国产精品视频一二三| 韩国三级理论在线| 亚洲视频中文一区| 中文字幕免费在线观看| 亚洲综合影片| 日韩三级一区 | 成人一级二级| 久久嫩草国产成人一区| 国产又粗又长又爽又色| 人人贴人人摸| 欧美加勒比| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 18禁美女裸体无遮挡啪啪| 91亚洲网站| 色综合99999| 欧美在线官网| 狠狠色婷婷777| 亚洲精品尤物yw在线影院| 欧美日韩狠狠爱| 91天天c| 97视频观看| a级理论午夜日本| 亚洲欧洲中文日韩女优乱码| 欧美色图亚洲色| 熟女91网| 强奸熟女一区二区三区| 一区二区 日韩 欧美 国产 传媒| 大香蕉免费中文| 天天天天天干夜夜夜夜夜操| 久久国产乱子伦精品免费女人| 国产400孕妇孕交群| 四季av一区二区凹凸精品小说| 熟妇艹鸡八| 混色激情av| 99久久久久| 自慰白浆在线观看| 精品国产www久久| 草草影院最新网址| 先锋激情∨在线视频播放| 肉动漫无遮挡h在线观看| 欧美色性情| 综合亚州欧美| 蜜臀久久99精品久久久久久成人小说 | 肥佬影院91| 国产夫妻性生活视频| 欧美色图91p| 天天摸夜夜操视频| 欧美日韩另类字幕中文| 天天插夜夜爽| 国产免费一区| 91欧美少妇| 精品无人区麻豆乱码1区2区图片 | 亚洲国产麻豆一区二区三区| 麻花豆传媒剧国产MV出差| a片偷拍视频| 中文字幕一区二区三区蜜臀| 懂色AV蜜臀无码精品APP| 亚洲综合另类小说色区亚洲成av人片在www| 亚洲性天堂| 色九久| 另类图片天天影视| 草草草视频在线免费看| 欧美人体性爱互联网第一页婷婷日本| 啊啊啊在线观看| 欧美操人视频| 一区二区影院| 在线99热| 91在线免费观看处女| 欧美少妇第一页| 九九九九欧美| 国产丝袜啪啪| 天堂v无码免费视频| 日韩精品一区二区高清| 亚洲人妻中文高清| 东京日日夜夜| 天天α片| 国产97色在线 | 亚洲| 久久久久久久9| 老子午夜伦不卡影院| 玖玖玖玖精品国产剧情| 色婷婷六月| 天堂精品小草| 国产美女高潮视频| 人人做,人人操,人人摸| 成人三级片无码| 夜夜嗨一区二区| 日韩精品99久久久久久中文字幕| 日韩欧美~中文字| 蜜臀在线视频| 老司机老司机午夜影院| 国产欧美伊人| 蜜桃臀一区二区aV| 人人么人人操| 亚洲精品视频在线播放| 久久久网一区| 天天肏天天干| 欧美性爱视频免费一区一A| 天天透伊人| 大香蕉伊然在亚洲91| 亚洲综合电影| 在线国产探花| 蜜桃久久久久久久久久久久 | 久草国产在线视频| 啊啊啊操一区| 女人天堂网| 激情熟女12P| 色丁香五月婷婷| 亚洲男人天堂2013| 亚洲乱码精品一区二区| 超碰人人干| 91天射| 日韩激情无码影院| 污啪啪啪视频| 久久婷婷一区| 岛园激情| 欧美激色| 少妇人妻好深太紧了vr91| 女人天堂AV五区在线| 人妻激情视频| 操逼操网| 欧美激情久久久久| 可以在线观看的黄色网址| 欧美精品另类人妖xxxx| 五月情色天| 国产亚洲综合欧美一区| 91日日夜夜| 黄色区免费观看中文字幕| 久久免费看高潮毛片韩国| 国产高清成人免费视频| 920日本午夜免费| 欧中美三级一区二区三区| 囯产操逼片| 欧美91久久久久| 欧美十八禁导航成人| 欧美A√综合网 | 啊啊啊啊啊在线视频| a'v在线资源| 91蜜臀熟女| 啊啊啊啊啊在线| 欧美日韩超碰在线| 蜜臀99久久精品久久久懂爱| 亚洲色人妻综合| 国产精品99999| 亚洲欧美黄| 日韩人妻资源在线看| 91天堂| 一区二区三区 丝袜 高跟 美腿| 精品久9| 91男女啊啊啊| 国内精品久久人妻性色av| 欧美亚洲AN| 啪啪免费| 丝袜美腿丝袜| 炮色五月| 家庭乱伦国产| 91欧美丝袜| 少妇滛荡视频| 欧美性爱一区二区| 91偷拍欧美亚洲| 日韩综合成人免费视频| 91国精产品| 亚洲欧美精品福利在线| 亚洲欧美碰碰| 熟妇视频一区二区三区在线观看| 国产男女边吃边摸视频网站| 久久久禁| 开心五月婷婷激情| 在线日韩精品一区二区三区| 国产地址二三| 五月婷婷AV| 国产区日韩区在线观看| 色娱乐色呦呦夜夜夜夜av| 精品成人av一区二区三区在线| 日本三级精品| 性色国产东北露脸精品视频| 全球成人中文在线| 搡老女人老91妇女老熟女| 久久夜嗨| 99久久99久久综合| 自怕偷自怕亚洲精品| 久久青娱乐| 色哟哟-国产专区| 69精品久久久久中文字幕| 久草加勒比一区在线| 亚洲资源网| 久久超碰爱| 国产极品99热在线播放69| 风韵犹存大大大大香蕉 | 欧美人人曰人人操人人射射| 国产精品97超碰| 夜夜狼人妻| 国产CHASE男男GAYGA 毛多色婷婷| 中日韓欧美高清| 啊啊啊啊啊啊啊在线| 天天影视网综合少妇| 欧美成人AⅤ大片在线观看| 久草午夜| 综合网少妇| 色老牛| 91美腿丝袜在线观看| 久久99午夜精品一区人妻| 麻豆国产精品午夜视频| 九久久九九久视频| 欧洲亚洲天堂精品| 午夜性生活av免费在线看| 成人精品视频| 激情亚洲天堂| 91麻豆天美国产欧美| 激情综合网五月婷婷五月天| 日韩欧美大片免费高清啪啪| 蜜臀99精品国产高清在线观看| 国产一区二区久久| 亚洲妇色| 91久精品| 欧美淫穴| 亚洲 日本 一 二 三| 一级免费啪啪片| 欧美黑人精品一区二区| 91影库| 色婷婷六月丁香七月婷婷| 久久久久久久精| 天天欧美| 96久久久久久久| 天天天肏屄肏屄肏屄欧美欧美| 97超碰中文字幕| 91久久久老司机| 熟妇人妻一区二区三在线| 麻豆AV一区二区| 欧美 亚洲 制服 精品| 亚洲欧美精品91| 99久久婷婷国产综合精品草原| 手机看av网站在线看| 亚洲黄色网址视频| 一区二区三区精品久久| 一区二区三区精品视频| 爽 好舒服 无码刺激久久| 人人操人人摸人| 天天躁日日躁AAAXX| 丰满的三级少妇欧美久久久| 激情五月天视频| 六月婷婷色综合| 成人婷婷丁香| 91暧暧| 久久深夜无码| 国产妇女精品视频青青草| 嗯嗯啊啊日韩精品| 亚洲清纯综合| 天堂性色| 少妇被c 黄 免费观看| 草草草视频在线免费看| 特级特黄一级毛片免费| 国产精品麻豆视频网站| 中文字幕精品区先锋资源| 免费一级欧美片片线观看| 99性爱视频| 亚洲中文字幕乱码无码一区二区 | 国产亚洲深夜激情| 久日综合网| 9997se| 欧美色乱| 高清无码在线播放网站| 91精品伊人久久久大香线蕉91| 综合色色网| 91啪9色| 偷拍综合亚洲| 亚洲成成熟女人综合一区二区| 国产一区二区二区按摩精品啪视频| 少妇熟女1区2区3区| 国产精品一区二区三区,亚洲综合| 免费一级视频特黄色大片| 黄页18禁| 国产精品乱码久久久、久久| 精…码一二三区| 370p日韩欧美亚洲精品| 日本三级日本三级99| 按摩中文字幕| 久操av在线| 亚洲一区二区三区春色| 欧美人妻精品一区二区| 欧美综合骚| 99国内熟女露脸视频| 亚洲丝袜综合| 天堂中文日本在线观看| 99久久com免费视频′| 美女91色黄18| 久久精品国产亚洲AV清纯| AV污污污污| 岛国AV一区二区电影| 熟女一区二区三区四区| 精品人妻视频入口| 激情五月天色色网| 亚洲视频二区 | 亚洲av乱伦色图网站| 欧美久久毛片基地| 天天cao在线| 日韩不卡毛片Av免费高清| 久草视频制服诱惑| 99少妇| a级成人毛片免费视频高清| 九九九午夜| 99热销国产这里有精品| 强歼乱伦资源网| 久久综合女优| 欧美精品二区视频在线| 国产 码在线成人网站| 在线免费试看60秒| 一区不卡在线观看av| 无码91| 啊啊啊啊啊好多水| 丁香久久| 无码粉嫩白虎一线天b区| 欧美成人一级免费电影| 日日做夜狠狠爱欧美黑人| 97超碰人人模人人拍人人| 天天插天天插| 91性网| 婷婷五月天色| 欧美色九九| 五月天婷婷色色| 91国产丝袜白虎| 综合色啪| 九九操久久国产免费视频| 国产免费一区| av天堂天堂av日韩| 久日91在线| 再深点灬舒服灬太大了添视频| 伊人成人情色综合| 日韩无码视频黄色| 无码人妻丰满熟妇奶水区毛片| 日本精品五区| 台湾佬中文娱乐自偷自拍| 国产毛片毛片4p懂色| 九九热免费国产视频婷婷伊人| av天堂电影网| 1956日韩精品| 日韩福利综合一区| 久久一二三四五六七八九区区| 日本欧美一区二区三区视频麻豆| 99热aaa| 一线黄色免费性爱片| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 亚洲古典另类欧美在线| 国产成人啪一区二区| 国产精品久久久鸭无码的功能| 日本在线15p| 天天日天天舔| 欧美日韩国产成人高清| 麻豆 亚洲 97| 日本黄 R色 成 人网站| 酒色综合网| 亚洲综合网图| 萌白酱自拍视频| 日韩BBN| 国产天美欧美| 伊人久久在线视频观看| 91青青在线视频| 久久久久久久人妻| 午夜亚洲WWW湿好大| 久久精品人妻一区二区| 五月天综合在线| 色色毛片| 欧美精品亚洲精品日韩传电影| 亚洲男人的天堂亚洲| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 粉嫩久久久极品| 美女诱惑爱爱| 97在线观看播放视频| 日日骚av| 少妇500双飞99| 女人高潮抽搐喷水视频网站| 人人人干干人人干| 亚洲涩图欧美| 久久色一区| 欧美疯狂做爰xxxx| 久久草草亚洲蜜桃臀| 亚洲精品久久久久久| 久操99| 在线视频日韩欧美国产| 日韩97| 国产乱不卡| 亚洲综合码| 色婷婷亚洲婷婷| 久久黄片国产一区二区| 久久久精精精| 亚洲综合射| 精品久久99| 色婷婷五月综合激情中文字幕| 国产91亚洲精品一区二区三区| 夜夜嗨TV| 日影院久久婷婷夜夜网| 啊啊啊 在线观看| 国内三级自拍小视频在线观看| 国内精品嫩模A∨私拍小视频| 美女天天干| 国产成人天堂| 日韩中文字幕熟妇人妻| 9久久精品| 男女激情黄色网址| 欧美一区二区一级岛国大片| 91丝袜美女视频| av橘色网站| 四虎在线播放| 欧洲亚洲人妻无码中字久久三区四区 | 综合久欧洲| 日本三级久| 色婷婷成人| 精品性爱一区二区| 国产成人亚洲精品无码古代早漏男 | 久久久97| 日本 欧美 国产一区| 亚欧视频在线| 国产一在线观看| 被男人吃奶很爽的毛片| 亚洲综合另类| 蜜桃av色偷偷av老熟女| 94色色电影网| 国产97视频| 欧美高清16| 啊啊啊好大好深| 91丝袜人妻| 午夜美女诱惑电源网| 国产精品另类一区大香蕉| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 伊人精品视频| 国产精品视频播放| 97久久免费| 欧美少妇性乱| 91丨精品丨国产丨丝袜| 女人的天堂大香蕉网| 午夜精品久久久久| 国产精品第二页| 9精品久久| 欲女人妻性色av| 色香91| 精品无人区麻豆乱码1区2区图片 | 97操操| 920日本午夜免费| 久久久蜜桃一区二区三区| 日本三级韩三级99久久| 老女人爆菊| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 中韩中文字幕在线观看| 欧美 亚洲| 精品人妻中文字幕高清| 午夜福利1区2区3区| 亚洲综合另类小说色区亚洲成av人片在www | 天天看天天干| 色色色色日本| 亚洲aV无码成人在线观看| 日本天天色| 欧美色图亚洲色图成人在在线| 日本97久久久精品| 91操人| 欧美精品庄| 波多野42部激情无码喷潮| 免费精品人妻一区二区三| www色日本| 色av中文字| 天堂射| 黄色工厂这里只有精品| 高清有码一区二区| 午夜精品五区| www.狠狠干.coom| 极品后入免费视频| 亚洲中文字幕av | αⅴ天堂| 国产超碰在线| 极品内射| 天天躁日日躁狠狠狠躁| 91AV入口| 无码国产精品午夜不卡(| 江都AV在线| 97超碰欧美手机在线| 懂色Av| 久精品无码av一区二免费国产在线观看 | 97天天爽| 亚洲s色图| 国产色产精品在线观看| 秋霞影音一区二区三区| 青青草在线成人视频| 午夜精品久久999热蜜桃介男人用| 欧美一级二级三级| 欧美一级久久久久久久大片动画 | 天天摸天天操视频| 亚洲成aⅴ人片不卡无码| 亚洲天堂久久| 亚洲欧美国产va在线| 欧美少妇人妻| 国产免费久久久久| 日韩三级在线观看mp4| 蜜臀99精品国产高清在线观看| 日本熟女免费視颖| 看看小穴| 欧美亚洲天天| 国产操逼逼网| 超碰99热中文字幕| 好爽视频在线观看| 97任你吞精| 久久女同性恋一二区| av网站免费看| 国产精品交换一区二区| 亚洲骚男同com| 欧美91视频| 色呦呦、国产精品| 亚洲精品99999| 乱色视频中文字幕| 成人天天爽| 亚洲精品尤物yw在线影院| 韩国女主播青草福利视频| 久久婷婷成人综合色怡春院| 人人操人人大香蕉| 91久久久老司机| 国产AV色黄看到爽| 中文字幕乱碼在线| 又大又大又大又粗爽高潮观看 | 天堂av最新电影网| 日韩欧美午夜视频在线| 97精品97| 免费日韩黄片| 久久97资源 网| 欧美日韩插逼视频| 污到发麻的视频 国产| 国产女人视频三四五区| 91无码中出人妻视频| 日韩人妻无码不卡网站| 操一区| 日本一线产区和二线产区伦理片| 中国探花熟女| 神马久久免费电影观看| 欧美性爱系列| 天天久久久久久| 色五月首页| 亚洲人妻日日日| 六月色婷婷| 亚州欧美色图| 欧美日韩国第一区| 网站A V在线| 欧美性爱一区| 操逼逼中文字幕| 中文字幕精品专区搜索结果91| 亚洲色图亚洲无码强奸乱伦| 99最新日韩偷拍视频| 久久精品亚洲成a人天堂| 亚洲在线观看| 99精品免费| 十八禁啪啪视频| 青青操在线亚洲视频观看欧美在线| 日韩精品色呦呦| 欧美高潮| 99热综合| 黑人免费福利视频| 热热热热日日漂亮永久永久国产日| 欧美日韩国产三级黄色| 97操综合| 一区二区三区在线资源| 亚洲欧美日韩制服另类| 亚洲涩涩| 超碰精品在线| 一区二区乱码福利| 2017大香蕉国产精品久久| 另类 日韩 熟女| 96精品久久| 91黑丝美女| 韩国黄色片精品久久久| 人妻夜夜爽天天爽三区麻豆AV网站| 成人女人国产| 亚洲 欧美日韩 另类| 亚洲激情视频| 精品无码久久久久| 91中文在线| 老子午夜伦不卡影院| 性感美女啊啊啊在线| 爱爱动态120秒| 精品久久久久久中文| 91性情| 九一综合网| 亚洲色图久久成人| 男女激情黄色网址| 欧美亚洲91| 东方亚洲在线操逼天堂| 久久人人妻| 91精品啪在线观看国产城中村| 亚洲色人| 97在线日韩中文字幕| 中美日韩毛片| 伊人久久婷婷| 无码天天操| 大香蕉伊人网| 精品人妻一区二区蜜桃视频| 欧美图片色综合| 亚洲欧洲另类| 女人喷水视频在线观看| 凹凸视频在线一区二区| 天天在线91| 人人澡人人弄| 97爱爱爱综合| 99精品久久久久久久婷婷蜜桃| 久久久精品91八戒| 天天干18禁| 国产精品69久久久久久久| 成人A片男人的天堂| 欧美亚洲综合色| 日本不卡一区| 国产一区二区三区白丝| 亚洲天堂另类| 久久久专区| 欧色综合| 91久久精品国产| 亚洲色啪| 爽 好舒服 无码刺激久久| 欧美性爱18观看| 午夜美女福利视频| 久久精品国产亚洲av水密被窝| 加勒比少妇AV婷婷六月天超碰超碰| 欧美亚综合色图| 天天影视网综合少妇| 色色婷婷五月天| 天堂8在线新版官网| 久久亚洲AV无码专区国产精品| 人人贴人人摸| 乱伦一二三区| 国产精品久久久啊| 精品对白久久不卡| 最新AV在线| 欧美 亚洲精品首页| 久久成人东京热人妻| 精品女同一区| 欧美日韩精品久久久久东北老熟妇| 欧色性第一页| 中文字幕视频免费| 经典丝袜一区| 欧美日韩亚洲电影| 超碰免费欧美7| 蜜桃丰满熟妇av无码区不卡| 亚洲国内精品成人不卡| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 国内一级精品| 久久精品无码专区| 精品天堂| 91天天| 中文字幕精品免费一区二区| 激情小说图片亚洲首页| 久久久99免费| 黄片色区软件| 日本精品高清一二区一本到| 日亚韩精品视频二区三| 亚洲另类电影| 蜜臀久久99精品久久久老,,| 97久精品| 99精品网站| 超碰97欧美日韩| 大香蕉手机在线| 综合色一区三区二区| 日韩免费a级毛片无码a∨| 日韩av电影成人在线|