色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

Hive遞歸計(jì)算實(shí)踐:臨時(shí)表+循環(huán)迭代實(shí)現(xiàn)任意層級(jí)展開(kāi)

Hive遞歸計(jì)算實(shí)踐:臨時(shí)表+循環(huán)迭代實(shí)現(xiàn)任意層級(jí)展開(kāi) Hive SQL 寫遞歸計(jì)算一直是數(shù)倉(cāng)工程師繞不過(guò)去的一道坎。業(yè)務(wù)方一句“我要看全鏈路組織架構(gòu)”或者“把這個(gè) BOM 的末級(jí)物料全部展開(kāi)”落到 Hive SQL 上就是一場(chǎng)噩夢(mèng)。MySQL 里一條WITH RECURSIVE能搞定的事在 Hive 里就是另一套邏輯。我之前用“寫死 20 層自連接”的方式湊合過(guò)一版姑且叫 1.0后來(lái)業(yè)務(wù)層級(jí)超過(guò) 20 層SQL 直接廢掉才認(rèn)真做了這套 2.0 方案。這套 2.0 的核心思路并不復(fù)雜臨時(shí)表 循環(huán)迭代每一輪只掃增量數(shù)據(jù)再用一張總表防環(huán)路、去重復(fù)。實(shí)測(cè)下來(lái)千萬(wàn)級(jí)節(jié)點(diǎn)、幾十層深度的場(chǎng)景都能穩(wěn)定跑完更重要的是不會(huì)因?yàn)槟硞€(gè)環(huán)導(dǎo)致任務(wù)跑到天荒地老。這篇文章就完整記錄一下這套方案的設(shè)計(jì)思路、完整代碼、性能調(diào)優(yōu)和排坑實(shí)錄給還在 Hive 里硬剛遞歸的朋友們一個(gè)可以直接抄的作業(yè)。1. 為什么需要一套 2.0 方案Hive 本質(zhì)上是為分布式批處理設(shè)計(jì)的標(biāo)準(zhǔn)的 SQL 遞歸查詢能力一直不是它的強(qiáng)項(xiàng)。低版本 Hive 根本不支持WITH RECURSIVE新版本雖然借助 Calcite 加了這個(gè)語(yǔ)法但生產(chǎn)環(huán)境里依賴它跑大規(guī)模遞歸任務(wù)的人依然很少后面我會(huì)具體講原因。所以大部分?jǐn)?shù)倉(cāng)團(tuán)隊(duì)實(shí)際上都在用“土辦法”實(shí)現(xiàn)遞歸。1.1 1.0 方案寫死層數(shù)的自連接1.0 版本的思路很直白既然不知道最深多少層那就假設(shè)一個(gè)最大值比如 20 層然后用LEFT JOIN一層層往上拼最后用UNION ALL合并所有層的結(jié)果。這種方案應(yīng)付有限的、明確已知層級(jí)的需求確實(shí)沒(méi)問(wèn)題。我最早處理一個(gè)“三二級(jí)部門展開(kāi)”的需求時(shí)就是這么干的。但問(wèn)題也很明顯深度是寫死的。一旦需求變成“動(dòng)態(tài)層級(jí)”SQL 就廢了。SQL 冗長(zhǎng)得可怕。20 層JOIN的 SQL 要寫幾百行維護(hù)起來(lái)頭大。性能不穩(wěn)定。每一層JOIN都會(huì)對(duì)上一步的全量結(jié)果再掃一遍越到后面越慢。1.2 2.0 方案要解決的核心問(wèn)題2.0 在設(shè)計(jì)之初定了幾個(gè)明確目標(biāo)支持任意深度最多只受集群資源和參數(shù)限制。每一輪迭代只處理新發(fā)現(xiàn)的增量數(shù)據(jù)而不是全量重算。防環(huán)路。不能因?yàn)?A→B→C→A 這種環(huán)導(dǎo)致死循環(huán)。每一輪結(jié)果都帶有層級(jí)標(biāo)記方便業(yè)務(wù)側(cè)按“第幾層”做過(guò)濾和分析。這套方案從設(shè)計(jì)、編碼到調(diào)優(yōu)大概花了一周落地之后穩(wěn)定跑了很久也經(jīng)歷了多次數(shù)據(jù)量和深度翻倍的考驗(yàn)。下面把方案完整拆開(kāi)講。2. 遞歸計(jì)算的主流實(shí)現(xiàn)路線對(duì)比在做 2.0 之前我把當(dāng)時(shí)業(yè)界常見(jiàn)的幾種 Hive 遞歸方案都捋了一遍這里直接給結(jié)論方便你做技術(shù)選型。2.1 寫死層數(shù)的自連接方案就是 1.0 的做法適用于層級(jí)明確且較淺的場(chǎng)景。優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單、不依賴任何腳本缺點(diǎn)是靈活性差、性能不可控。-- 示例展開(kāi) 3 層部門 SELECT t1.dep_id AS root_dep_id, t3.dep_id AS child_dep_id, CASE WHEN t2.dep_id IS NULL THEN 1 WHEN t3.dep_id IS NULL THEN 2 ELSE 3 END AS depth FROM ods_dep_rel t1 LEFT JOIN ods_dep_rel t2 ON t1.dep_id t2.parent_dep_id LEFT JOIN ods_dep_rel t3 ON t2.dep_id t3.parent_dep_id WHERE t1.parent_dep_id IS NULL;層數(shù)少的時(shí)候還能忍層數(shù)多起來(lái)這段 SQL 會(huì)膨脹到你不想維護(hù)。2.2 原生 WITH RECURSIVE 方案從 Hive 4.0 開(kāi)始社區(qū)通過(guò) Calcite 引入了原生遞歸 CTE 支持。理論上你可以寫這樣的語(yǔ)句WITH RECURSIVE dep_tree AS ( SELECT dep_id, parent_dep_id, dep_name, 0 AS loop_id FROM ods_dep_rel WHERE parent_dep_id IS NULL UNION ALL SELECT c.dep_id, c.parent_dep_id, c.dep_name, t.loop_id 1 FROM dep_tree t JOIN ods_dep_rel c ON t.dep_id c.parent_dep_id ) SELECT * FROM dep_tree;但在實(shí)際生產(chǎn)環(huán)境中我對(duì)這套語(yǔ)法保持謹(jǐn)慎態(tài)度。一方面是因?yàn)楹芏嗥髽I(yè)的 Hive 還是 3.x 版本另一方面是原生遞歸 CTE 在底層執(zhí)行時(shí)容易出現(xiàn)性能抖動(dòng)資源消耗不太好預(yù)估。小數(shù)據(jù)量驗(yàn)證邏輯沒(méi)問(wèn)題一旦上了十億級(jí)節(jié)點(diǎn)還是老老實(shí)實(shí)用迭代方案穩(wěn)妥。2.3 臨時(shí)表 循環(huán)迭代方案這就是 2.0 的核心路線。思路是用一張“結(jié)果總表”保存已經(jīng)找到的所有節(jié)點(diǎn)再用一張“增量表”保存本輪新發(fā)現(xiàn)的節(jié)點(diǎn)每輪迭代從增量表出發(fā)向外擴(kuò)展用總表做去重和防環(huán)。這個(gè)方案的優(yōu)勢(shì)很明顯每一輪只掃增量數(shù)據(jù)而不是全量數(shù)據(jù)性能可控深度上限可以人為配置邏輯完全透明每輪跑了多少數(shù)據(jù)一目了然。缺點(diǎn)是需要寫 Shell 腳本來(lái)控制循環(huán)對(duì)開(kāi)發(fā)者的工程能力有一定要求。2.4 自定義 UDF / Transform 腳本方案還可以用 Python 腳本配合TRANSFORM語(yǔ)法在腳本內(nèi)部實(shí)現(xiàn)遞歸邏輯。這種方式邏輯自由度最高但受限于單機(jī)內(nèi)存和腳本執(zhí)行模型數(shù)據(jù)量大時(shí)容易成為瓶頸。我一般只在“遞歸內(nèi)部有復(fù)雜業(yè)務(wù)規(guī)則”時(shí)才會(huì)考慮它普通展開(kāi)場(chǎng)景用循環(huán)迭代就夠了。下面用一張表把這幾種路線的特點(diǎn)匯總一下方案深度上限實(shí)現(xiàn)復(fù)雜度性能表現(xiàn)適用場(chǎng)景寫死層數(shù)自連接固定層數(shù)低層數(shù)越多越差淺層級(jí)、需求穩(wěn)定原生 WITH RECURSIVE無(wú)低受引擎影響大小數(shù)據(jù)量、Hive 4.0臨時(shí)表循環(huán)迭代可配置中可控需調(diào)優(yōu)企業(yè)級(jí)大規(guī)模數(shù)據(jù)Python UDF 遞歸受單機(jī)內(nèi)存限制高中低小數(shù)據(jù)量、復(fù)雜規(guī)則我最終選擇的是“臨時(shí)表 循環(huán)迭代”下面詳細(xì)講它的設(shè)計(jì)邏輯。3. 2.0 方案核心設(shè)計(jì)雙表迭代框架3.1 結(jié)果總表 增量表的協(xié)同工作方式整套方案的核心是兩個(gè)表結(jié)果總表TOTAL和增量表INC。每一輪的迭代動(dòng)作可以做如下拆解從上一輪的增量表中取數(shù)據(jù)去關(guān)聯(lián)子節(jié)點(diǎn)。關(guān)聯(lián)出來(lái)的新節(jié)點(diǎn)和結(jié)果總表做LEFT JOIN如果已經(jīng)存在則過(guò)濾掉。過(guò)濾后的數(shù)據(jù)寫入新的增量表。將新增量合并進(jìn)結(jié)果總表。如果新增量為空或者達(dá)到了設(shè)定的最大迭代次數(shù)循環(huán)終止。這個(gè)流程里最關(guān)鍵的優(yōu)化點(diǎn)在于每輪迭代的輸入是“上一輪的增量”而不是“歷史全量”。這樣一來(lái)數(shù)據(jù)增長(zhǎng)不是隨層數(shù)線性疊加的整體掃描量小很多這正是 2.0 比 1.0 性能好的根本原因。3.2 環(huán)路檢測(cè)與終止條件設(shè)計(jì)防環(huán)路是遞歸計(jì)算里最不能忽略的一環(huán)。環(huán)路指的是數(shù)據(jù)里出現(xiàn)了 A→B→C→A 這種循環(huán)引用。在雙表迭代的設(shè)計(jì)下環(huán)路其實(shí)已經(jīng)天然被結(jié)果總表?yè)踝×巳魏喂?jié)點(diǎn)只要被訪問(wèn)過(guò)再次出現(xiàn)時(shí)會(huì)被總表過(guò)濾掉。所以迭代不會(huì)因?yàn)榄h(huán)路而無(wú)限循環(huán)最多遍歷完全部節(jié)點(diǎn)就自然會(huì)停下來(lái)。不過(guò)為了更早地剪枝節(jié)省無(wú)謂的 IO還可以在迭代 SQL 里加一個(gè)路徑字段用find_in_set判斷當(dāng)前節(jié)點(diǎn)是否已經(jīng)出現(xiàn)在路徑上。這種做法的代價(jià)是每行都要攜帶一段路徑字符串層級(jí)很深時(shí)字符串會(huì)很長(zhǎng)影響性能。我的經(jīng)驗(yàn)是一般組織架構(gòu)類數(shù)據(jù)層級(jí)小于 20 層用路徑檢測(cè)沒(méi)問(wèn)題如果是 BOM 展開(kāi)這種層級(jí)可能上百的場(chǎng)景僅靠總表過(guò)濾就夠了路徑檢測(cè)不做也罷。下面是我在實(shí)際腳本里用的兩個(gè)終止條件本輪增量為空說(shuō)明已經(jīng)遞歸到底了正常結(jié)束。迭代次數(shù)達(dá)到預(yù)設(shè)的MAX_LOOP說(shuō)明可能存在異常數(shù)據(jù)比如深層次環(huán)強(qiáng)制退出并告警。3.3 數(shù)據(jù)傾斜與發(fā)散節(jié)點(diǎn)的處理思路遞歸迭代中最容易出性能問(wèn)題的是“發(fā)散節(jié)點(diǎn)”。舉個(gè)例子某個(gè)根部門下面掛了十萬(wàn)個(gè)葉子部門那某一輪迭代中這十萬(wàn)條子節(jié)點(diǎn)記錄會(huì)全部由這一個(gè)根部門產(chǎn)生。在 Hive 的分布式計(jì)算模型下這意味著某一個(gè) Reduce 要處理巨大的數(shù)據(jù)量跑得比其它所有 Reduce 都慢也就是典型的數(shù)據(jù)傾斜。處理思路有幾種對(duì)關(guān)聯(lián)鍵做加鹽處理把大節(jié)點(diǎn)的數(shù)據(jù)打散到多個(gè) Reduce。拆根并行。如果業(yè)務(wù)允許把不同的根節(jié)點(diǎn)分組拆成多個(gè)獨(dú)立任務(wù)并行跑。如果增量表和關(guān)聯(lián)表都不大比如小于 2GB直接加MAPJOIN提示把關(guān)聯(lián)表加載到內(nèi)存里繞開(kāi) Shuffle。另外還有一個(gè)容易忽略的問(wèn)題臟數(shù)據(jù)導(dǎo)致的“假發(fā)散”。如果源表里存在大量parent_dep_id為空字符串或特殊字符的孤兒節(jié)點(diǎn)它們會(huì)在某一輪被同時(shí)關(guān)聯(lián)出來(lái)造成一輪迭代的數(shù)據(jù)量暴漲。建表時(shí)對(duì)這種情況要有心理準(zhǔn)備清洗數(shù)據(jù)的時(shí)候要一并處理。4. 實(shí)操全流程完整跑通一個(gè)部門樹遞歸展開(kāi)下面用一個(gè)經(jīng)典場(chǎng)景——部門樹展開(kāi)——走一遍完整流程。假設(shè)有一張部門關(guān)系表ods_dep_rel我把它簡(jiǎn)化成下面這種結(jié)構(gòu)CREATE TABLE IF NOT EXISTS ods_dep_rel ( dep_id STRING COMMENT 部門id, parent_dep_id STRING COMMENT 上級(jí)部門id, dep_name STRING COMMENT 部門名稱, project_id STRING COMMENT 業(yè)務(wù)線標(biāo)識(shí) ) COMMENT 部門關(guān)系原始表 PARTITIONED BY (dt STRING COMMENT 數(shù)據(jù)日期) STORED AS ORC;需求非常明確給定業(yè)務(wù)線project_id找出每個(gè)根部門下所有層級(jí)的子部門并記錄每個(gè)子部門相對(duì)于根部門的層級(jí)深度。4.1 初始化 SQL生成第 0 層數(shù)據(jù)第 0 層就是根節(jié)點(diǎn)。實(shí)際業(yè)務(wù)里根節(jié)點(diǎn)的定義可能不同有的是parent_dep_id IS NULL有的是parent_dep_id 還有的是設(shè)置了專門的根標(biāo)識(shí)字段這里以最常見(jiàn)的parent_dep_id IS NULL為例。-- init_dep_tree.sql INSERT OVERWRITE TABLE tmp_dep_tree_prev SELECT dep_id AS root_dep_id, dep_id AS dep_id, dep_name AS dep_name, 0 AS loop_id, cast(dep_id AS STRING) AS path_str FROM ods_dep_rel WHERE dt ${hiveconf:dt} AND project_id ${hiveconf:project_id} AND parent_dep_id IS NULL;這輪產(chǎn)出的tmp_dep_tree_prev表既是初始結(jié)果集也是第一輪迭代的增量輸入。-- 創(chuàng)建結(jié)果總表如果不存在 CREATE TABLE IF NOT EXISTS tmp_dep_tree_total ( root_dep_id STRING, dep_id STRING, dep_name STRING, loop_id INT, path_str STRING ) STORED AS ORC;然后把初始數(shù)據(jù)寫入總表INSERT INTO TABLE tmp_dep_tree_total SELECT * FROM tmp_dep_tree_prev;注意這里用的是INSERT INTO因?yàn)榭偙硎侵疠喿芳拥摹?.2 單輪迭代 SQL增量展開(kāi)的核心邏輯每一輪迭代的核心 SQL 是同一套邏輯只是輸入表不同。落到腳本里我寫成參數(shù)化的 SQL 文件-- expand_once.sql -- 輸入tmp_dep_tree_prev上一輪增量 -- 輸出tmp_dep_tree_cur本輪新增量 INSERT OVERWRITE TABLE tmp_dep_tree_cur SELECT t.root_dep_id AS root_dep_id, c.dep_id AS dep_id, c.dep_name AS dep_name, t.loop_id 1 AS loop_id, concat_ws(,, t.path_str, c.dep_id) AS path_str FROM tmp_dep_tree_prev t JOIN ods_dep_rel c ON t.dep_id c.parent_dep_id LEFT JOIN tmp_dep_tree_total total ON c.dep_id total.dep_id AND t.root_dep_id total.root_dep_id WHERE c.dt ${hiveconf:dt} AND c.project_id ${hiveconf:project_id} AND total.dep_id IS NULL AND NOT find_in_set(c.dep_id, t.path_str) 0;這段 SQL 里最核心的是三個(gè)地方JOIN以上一輪增量表的dep_id去匹配源表的parent_dep_id找到所有直接子節(jié)點(diǎn)。LEFT JOIN ... WHERE total.dep_id IS NULL過(guò)濾掉已經(jīng)在結(jié)果總表里出現(xiàn)過(guò)的節(jié)點(diǎn)這就是上面說(shuō)的防環(huán)路、防重復(fù)。find_in_set(c.dep_id, t.path_str)從路徑上再做一次檢查防止環(huán)路在極深路徑下帶來(lái)額外的重復(fù)計(jì)算。每個(gè)細(xì)節(jié)都很重要。LEFT JOIN的過(guò)濾條件必須同時(shí)帶root_dep_id否則不同根節(jié)點(diǎn)下出現(xiàn)同一個(gè)部門 ID 時(shí)會(huì)被錯(cuò)誤過(guò)濾掉導(dǎo)致結(jié)果缺失。4.3 Shell 循環(huán)控制腳本讓迭代自動(dòng)收斂有了初始化 SQL 和單輪迭代 SQL剩下就是把循環(huán)串起來(lái)。我用的是 Bash 腳本 hive -f的方式每一輪迭代完成后檢查增量條數(shù)決定繼續(xù)還是終止。#!/bin/bash # 遞歸計(jì)算 2.0部門樹自動(dòng)展開(kāi) set -e DT2024-01-01 PROJECT_IDP001 MAX_LOOP50 CUR_LOOP0 HIVE_CONF-hiveconf dt${DT} -hiveconf project_id${PROJECT_ID} # 1. 初始化第 0 層 hive ${HIVE_CONF} -f ./init_dep_tree.sql hive ${HIVE_CONF} -e INSERT INTO TABLE tmp_dep_tree_total SELECT * FROM tmp_dep_tree_prev; # 2. 循環(huán)迭代 while [ ${CUR_LOOP} -lt ${MAX_LOOP} ]; do echo Loop: ${CUR_LOOP} # 執(zhí)行單輪擴(kuò)展 hive ${HIVE_CONF} -f ./expand_once.sql # 統(tǒng)計(jì)本輪增量行數(shù) INC_CNT$(hive -S ${HIVE_CONF} -e SELECT count(1) FROM tmp_dep_tree_cur; | tr -d ) echo Increment count: ${INC_CNT} if [ ${INC_CNT} -eq 0 ]; then echo No new increment, recursion finished. break fi # 合并增量到結(jié)果總表 hive ${HIVE_CONF} -e INSERT INTO TABLE tmp_dep_tree_total SELECT * FROM tmp_dep_tree_cur; # 輪轉(zhuǎn)表當(dāng)前增量變?yōu)橄乱惠喌妮斎?hive ${HIVE_CONF} -e INSERT OVERWRITE TABLE tmp_dep_tree_prev SELECT * FROM tmp_dep_tree_cur; CUR_LOOP$((CUR_LOOP 1)) done # 3. 輸出最終結(jié)果 hive ${HIVE_CONF} -e SELECT root_dep_id, dep_id, dep_name, loop_id FROM tmp_dep_tree_total ORDER BY root_dep_id, loop_id; 這段腳本有三個(gè)經(jīng)驗(yàn)點(diǎn)值得分享tr -d 是必要的。hive -S -e輸出的count結(jié)果往往帶一些空白字符不清理直接做數(shù)值比較會(huì)出問(wèn)題。用INSERT OVERWRITE TABLE tmp_dep_tree_prev SELECT * FROM tmp_dep_tree_cur做表切換而不是TRUNCATE后原地插入是為了保持上一輪數(shù)據(jù)直到本輪完全成功。一旦中間某一步失敗舊的增量數(shù)據(jù)還在排查和恢復(fù)都會(huì)容易很多。循環(huán)里沒(méi)必要用break后再單獨(dú)把結(jié)果導(dǎo)出去直接到最后統(tǒng)一輸出即可。4.4 結(jié)果校驗(yàn)確認(rèn)遞歸沒(méi)有算錯(cuò)遞歸算完了怎么確認(rèn)結(jié)果對(duì)不對(duì)我的經(jīng)驗(yàn)是至少做兩層校驗(yàn)。第一層總數(shù)校驗(yàn)。用源表跑一個(gè)不依賴遞歸的聚合查詢比如每個(gè)部門的直接子部門數(shù)再和自己算出來(lái)的結(jié)果做交叉比對(duì)。如果源表本身有“該部門所有后代部門數(shù)”這樣的冗余字段校驗(yàn)會(huì)更直接。第二層層級(jí)校驗(yàn)。隨機(jī)挑幾個(gè)已知深度的部門對(duì)照結(jié)果表里的loop_id確認(rèn)深度是否正確。這一步雖然樸素但能有效發(fā)現(xiàn)初始化時(shí)根節(jié)點(diǎn)定義錯(cuò)誤導(dǎo)致的全盤偏移。-- 校驗(yàn)示例檢查是否有節(jié)點(diǎn)的 loop_id 與路徑深度不一致 -- 正常情況下 path_str 里逗號(hào)的數(shù)量加 1 應(yīng)該等于 loop_id SELECT root_dep_id, dep_id, loop_id, path_str, (LENGTH(path_str) - LENGTH(REPLACE(path_str, ,, )) 1) AS path_depth FROM tmp_dep_tree_total WHERE loop_id ! (LENGTH(path_str) - LENGTH(REPLACE(path_str, ,, )) 1);這個(gè) SQL 利用了逗號(hào)計(jì)數(shù)的技巧很直觀。有經(jīng)驗(yàn)的讀者可能已經(jīng)想到這其實(shí)也驗(yàn)證了路徑拼接邏輯是否正確。5. 性能調(diào)優(yōu)與踩坑記錄2.0 方案里踩過(guò)的坑一點(diǎn)也不比業(yè)務(wù)邏輯少。選幾個(gè)最有代表性的寫出來(lái)。5.1 迭代輪次過(guò)多導(dǎo)致的小文件問(wèn)題每一輪迭代都會(huì)生成一批新的 ORC 文件如果最大迭代深度是 30 層結(jié)果總表里會(huì)累積很多小文件。時(shí)間久了總表在做LEFT JOIN過(guò)濾時(shí)甚至?xí)驗(yàn)樵獢?shù)據(jù)膨脹而變慢。我的處理方式是在腳本結(jié)束后對(duì)結(jié)果總表做一次合并壓縮。INSERT OVERWRITE TABLE tmp_dep_tree_total SELECT * FROM tmp_dep_tree_total DISTRIBUTE BY root_dep_id;DISTRIBUTE BY root_dep_id會(huì)讓同一個(gè)根節(jié)點(diǎn)的數(shù)據(jù)落到同一個(gè) Reduce不僅合并了小文件還能讓后續(xù)查詢按根節(jié)點(diǎn)過(guò)濾時(shí)更快。5.2 大增量 join 時(shí)的任務(wù)卡頓當(dāng)某一輪增量特別大比如某個(gè)中間層節(jié)點(diǎn)數(shù)量暴漲時(shí)JOIN過(guò)程容易出現(xiàn)長(zhǎng)尾。我踩過(guò)最厲害的一次是在第 4 層迭代時(shí)單個(gè) Reduce 跑到 3 小時(shí)沒(méi)結(jié)束。排查之后發(fā)現(xiàn)是數(shù)據(jù)傾斜一個(gè)超大父節(jié)點(diǎn)帶了幾十萬(wàn)條子節(jié)點(diǎn)記錄全部路由到了同一個(gè) Reduce。解決方案是在迭代 SQL 的JOIN關(guān)聯(lián)鍵上做前綴加鹽或者直接把源表按parent_dep_id分桶。分桶后JOIN的 Shuffle 數(shù)據(jù)量會(huì)小很多實(shí)測(cè)性能提升非常明顯。不過(guò)加鹽方案會(huì)改變關(guān)聯(lián)邏輯對(duì)非傾斜節(jié)點(diǎn)來(lái)說(shuō)反而增加計(jì)算量。我的建議是先通過(guò)COUNT按parent_dep_id聚合確認(rèn)傾斜節(jié)點(diǎn)的量級(jí)再?zèng)Q定是否加鹽不要盲目?jī)?yōu)化。5.3 分區(qū)參數(shù)穿透導(dǎo)致的串?dāng)?shù)問(wèn)題這個(gè)坑很隱蔽。在源表ods_dep_rel存在多分區(qū)的情況下如果迭代 SQL 里忘記寫c.dt ${hiveconf:dt}那么JOIN會(huì)掃描全分區(qū)。某一次我切換日期參數(shù)后忘了清理老的臨時(shí)表結(jié)果遞歸結(jié)果里混了上一個(gè)日期的歷史數(shù)據(jù)排查了很久。從那以后我養(yǎng)成了一個(gè)習(xí)慣所有迭代 SQL 的WHERE條件里源表分區(qū)條件必須寫全無(wú)論哪個(gè)環(huán)境執(zhí)行都能保證只讀當(dāng)天數(shù)據(jù)。5.4 常見(jiàn)報(bào)錯(cuò)速查表報(bào)錯(cuò)信息或現(xiàn)象可能原因解決辦法迭代一直不停止達(dá)到 MAX_LOOP存在深層次環(huán)路且總表防環(huán)邏輯有問(wèn)題檢查L(zhǎng)EFT JOIN的關(guān)聯(lián)條件是否帶了root_dep_id檢查源數(shù)據(jù)是否有自關(guān)聯(lián)某一輪增量數(shù)據(jù)暴漲臟數(shù)據(jù)導(dǎo)致發(fā)散節(jié)點(diǎn)或孤兒節(jié)點(diǎn)大量掛載清洗源數(shù)據(jù)剔除parent_dep_id為空的孤兒記錄對(duì)關(guān)聯(lián)鍵做分桶結(jié)果總表小文件過(guò)多每輪迭代產(chǎn)生新文件未合并結(jié)束后用INSERT OVERWRITE ... DISTRIBUTE BY root_dep_id合并count(1)判斷不準(zhǔn)導(dǎo)致提前退出hive -S -e返回字符串帶空格用tr -d 清理后再做比較不同根節(jié)點(diǎn)下相同部門被過(guò)濾LEFT JOIN條件漏掉root_dep_id補(bǔ)上AND t.root_dep_id total.root_dep_id定位不到數(shù)據(jù)問(wèn)題臨時(shí)表太多搞不清哪張是上一輪數(shù)據(jù)固定使用prev/cur輪轉(zhuǎn)命名不要?jiǎng)討B(tài)拼接表名6. 這套方案還能怎么擴(kuò)展如果只是做部門樹展開(kāi)這套腳本已經(jīng)夠用了。但遞歸計(jì)算的場(chǎng)景遠(yuǎn)不止組織架構(gòu)。這里列幾個(gè)我實(shí)際做過(guò)的擴(kuò)展方向。6.1 BOM 物料多級(jí)展開(kāi)BOM 展開(kāi)和部門樹最大的區(qū)別在于子節(jié)點(diǎn)關(guān)聯(lián)父節(jié)點(diǎn)時(shí)還帶一個(gè)“用量”字段遞歸展開(kāi)時(shí)要把路徑上的用量做乘積最終得到每一個(gè)末級(jí)物料的累計(jì)需求量。實(shí)現(xiàn)時(shí)只需要在迭代 SQL 的SELECT子句里多帶一個(gè)用量字段合并時(shí)做累乘即可。防環(huán)和終止邏輯完全復(fù)用。6.2 關(guān)系圖譜中的多度人脈查找比如“找出某個(gè)用戶 3 度以內(nèi)的所有關(guān)聯(lián)用戶”。這個(gè)場(chǎng)景本質(zhì)上就是限制深度的遞歸查找只需要在循環(huán)控制腳本里把MAX_LOOP設(shè)為 3并且在初始化 SQL 里固定好起始用戶即可。6.3 數(shù)據(jù)血緣追蹤數(shù)據(jù)倉(cāng)庫(kù)的表和字段之間存在“上游依賴”關(guān)系想查某個(gè)指標(biāo)字段的完整血緣鏈路可以用同樣的迭代框架把“父節(jié)點(diǎn)”換成“上游字段”把“子節(jié)點(diǎn)”換成“下游字段”。血緣數(shù)據(jù)的層級(jí)往往很深而且環(huán)路的可能性比組織架構(gòu)大不少這時(shí)候雙表防環(huán)機(jī)制的可靠性就顯得格外重要。最后說(shuō)點(diǎn)實(shí)在的這套 2.0 方案做完之后我再也沒(méi)有因?yàn)椤斑f歸查不出來(lái)”被業(yè)務(wù)方找過(guò)。回看整個(gè)優(yōu)化過(guò)程最值得投入精力的其實(shí)不是循環(huán)腳本本身而是對(duì)增量驅(qū)動(dòng)和防環(huán)機(jī)制的理解。很多做數(shù)據(jù)開(kāi)發(fā)的朋友一聽(tīng)到 Hive 遞歸就想著去裝插件、換引擎其實(shí)標(biāo)準(zhǔn) Hive 的臨時(shí)表迭代方案處理絕大多數(shù)生產(chǎn)需求都足夠了。如果看完這篇文章你只想記住一個(gè)點(diǎn)那我建議記住這句迭代 增量表 結(jié)果總表過(guò)濾是 Hive 里做遞歸的通用范式。這個(gè)范式一旦建立起來(lái)不管遇到組織架構(gòu)、BOM 展開(kāi)還是關(guān)系圖譜都能快速套用最多就是改改表結(jié)構(gòu)、調(diào)調(diào)終止條件而已。下一次再有人跟你說(shuō)“Hive 做不了遞歸”你可以把這篇文章甩給他。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
三男一女不戴套的A片| 欧美天天干| 亚洲91网。| 偷窥自拍亚洲天堂网爆| 在线免费观看高清无码视频| 97在线公开视频| 超碰97网址| 99熟女| 午夜福利激情在线视频| 欧美96精品在线| 天天天天天超碰| 久久久久免费少妇| 亚洲AV永久无码一区仙野| 亚洲成aⅴ人片不卡无码| 欧美黑人168页欧美黑人167| 91麻豆天美传媒HD| 91麻豆天美国产欧美| 日本激情免费大片| 日本精品中文字幕视频| 欧美少妇色图| 成人三级片一区二区三区视频| 国产精品一区av在线| rivers-china.com| 新97国产超碰| 亚洲狼狼干综合1| 丁香五月婷婷啪啪| 黑人黄片在线免费观看| 欧美日韩操操操| 国产精品一区二区久久精品| 欧洲精品二区| 91天天综合在线观看| 99天天超碰| 嗯嗯啊在线视频| 翔田千里Av在线| 亚洲精品乱码久久久久久蜜桃麻豆| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 69少妇一区二区| 综合亚洲网| 五十路二区在线| 久久夜色一区二区| 天天淫人人妻日日色| 十八禁视频网站| 亚洲天堂AV在线播放| 韩美日操逼| 欧美超碰97| a啊啊啊啊啊啊啊啊一区二区| 快点操死我| 色综合99| 9l视频自拍9l九色成人| 欧美色图20P| 日日噜噜夜夜久久亚洲一区二区| 日韩草久视频| 国产久久一区二区午夜| 久久人妻视频网| 国产精品99久久久www| 国产理论视频在线播放| 欧美性爱第一区| 欧美日韩在线视频网站| 色波多| 亚洲国产综合图区中文字幕| 思思热在线视频免费| 五月天亚洲色图| 色妇综合网| 91丰满| 国产精品乱码久久久久久久久| 97超碰天天爱天天爱| 亚州色交| 麻豆蜜桃视频在线观看| 久久久久久性爱片| www.男人天堂| 精品二区三四区五电影| 国产成人啪一区二区| 偷拍色图| 日本精品一区二区三| Julia Annxxxxx| 加勒比五月天| 91美女视频直播| 欧美综合色图片| 超碰97极品9| 1204人成网站色www| 久久久久久中文| 91丝袜人妻| 九九九只有精品| 91热| 日韩肏逼视频| 青青免费在线视频一区 | 女优免费一区二区永久| 五月天精品| 91在线页| 亚洲色9| 精品国产久久乱码| 久久超碰天天| 亚洲91网| 亚洲成人精品在线一区| 亚洲欧美中文一区二区三| 围产精品一区二区三区视频播放| av强奸乱轮| 一类无码操逼视频| 韩国一级做A片免费的| 国产伦精品一区二区三区在线观| 亚洲性爱无码乱伦av| 99精品在线| AV大香蕉| 99国产精品在线观看| 成人五月天色网| 啊啊啊不要嗯嗯在线观看| 91欧美www| 葡萄牙性视频一二区| 囯产精品久久久久久久久久梁医生 | 色一色综合网| 国产丝袜美女诱惑| 久久久久久久 九九九九九九九| 曰韩av中文字幕专区| 午夜人妻精品综合在线| 蜜桃中文字日产乱幕4区| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 色777999综合| 国产一级高清免费观看| 中文字幕乱在线伦视频中文字幕乱码在线 | 大屁股熟女一区二区三区| 91综合无码| 亚洲日韩精品久久久久一区壹牛 | 九九九九九九九| 亚洲深夜福利| 熟妇的味道HD中文字幕| 手机看av网站在线看| 麻豆人妻精品一区二区| 校园春色家庭伦理欧美激情| 热99这里有精品综合久久 | 女人的天堂大香蕉网| 亚州国产成人精品女人久久| 男人的天堂免费| 青娱乐欧美激情一区二区| 国产女人成人精品视频| 亚洲瓯美色图| 视频在线97| 日韩九九九| 欧美激情另类一区二区| 男人的天堂网免费| 国产情色第一第二页在线观看| 超碰97亚洲区| 中文字幕精品探花视频| 91粉嫩萝控精品福利网站_精品影音先锋国 | 伊人网青青| 日本肉体xxxx裸交| 国产精品午夜成人福利| 精品久久久一本一道| 欧美日韩国产成人高清| 制服乱伦| 成人日韩中文字幕| 亚洲 欧美综合| 东京热一区二区中文字幕| 91精品无码人妻系列| sss视频华人在线| 国产精品伦理| 福利社区午夜一区二区| 亚殴在线| 色婷婷日韩精品一区二区三区| 9久久久久久| 日本狂喷奶水在线播放212| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 在线毛片片免费观看| 手机看av网站在线看| 97国伦国色| 激情在线青青操| 久久毛卡| 青青草手机在线免费观看| 婷婷激情四射| 欧美特大黄一级片片免费| 男人干美女| 91青青草| 色综合五月天| 亚欧洲一区二区视频| 91在线欧美| 国产精品香蕉热久久新品| 热久久精品| 国产农村妇女毛片精品久久| 美女极品一区二区三区| 妇人噜噜| 人人操人人操人人操人人操人人操人人人11.CM| 口爆综合网| 精品少妇高潮久久| 亚欧Av| 97在线青| 成人无码在线视频网站| 蜜桃在线观看一区二区三区| 九九九九9999| 婷婷香蕉| 一区二区不卡视| 欧美精品999| 久操不卡视频| 伊人大香蕉在线| 免费黄色A片| 四虎免费看黄| 岛国片在线视频网站| 97国产色综合| 激情小说在线视频| 久久国色天香香蕉| 亚洲全色网| 好吊色在线观看| 人妻少妇精品视频一区二区三区| 88xx成人精品视频| 红杏大香蕉| 另类欧美综合| 久久久中文| 蜜臀Av一区二区三区| 日韩一性一交一A片俄罗斯| 麻豆国产成人精品| 久久成人国产| 国产蜜臀在线| 欧美精品999| 中文字幕一区二区三区人妻不卡 | 91无码西班牙视频在线| 日本不卡码黄色| 97精品国产| 99热超碰| www.99中文字幕| 一本久久精品中文字| 老司机天天操| 久九9精品| 在线色导航| 久久久国产精品亚洲精品| 国产探花精品在线| 欧美综合在线第一页| 午夜精品探花| 少妇激情一区二区三区视频| 亚洲色五月| 欧美色图亚洲色| 蜜臀av在线播放一区二区三区| 人妻另类| 一本道综合色图| 97精品| 欧美性,亚州色| 亚欧免费| 少好三P| 国产欧美一区激情交| 青青在线视频免费| 好爽,再快点啊哈嗯嗯嗯嗯| 成人免费视瓶| 国产欧洲精品亚洲午夜拍精品| 午夜福利国产欧美日韩夜夜| 懂色AV中文| 精品久久久久久中文| 欧美日韩性爱精品| 亚洲丝袜综合| 欧美在线55555| 操迟操逼在巾线Fre看| 久久99干一本高清| 欧美狠狠操| 操逼操逼逼操操逼91| 中文字幕青青草| 中文字幕国产精品1区| 国产成久久综合片| 久久中文字幕女同性恋一区| 亚洲少妇色| 亚洲日韩在线a不卡99精品| 久久爱超碰网| 亚洲精品 大香蕉| 大屁股人妻女教师撅着屁股| 久久草视频污视频| 97人妻碰碰中文无码久热丝袜| 亚州男人的天堂| 久久婷婷影院| 91春色| 新精精品久久精品| 天天弄天天操| 高清无码一区二区三区| 久久九九97| 亚洲天堂自拍| 五月婷婷综合网| 日韩一级久久毛片| 91网站18+| 日本 成 人 小说 电影 一区二区| 天久久久噜噜噜久久国产精品爽爽| 久久98| 91人人| 手机av亚洲丝袜美腿日韩第一页二页| 亚洲天堂无码| 91久久九九精品国产综合| 黄久在线| 日本女厕偷拍| 亚洲人妻av| 97久久精品| 素人伊尹大香蕉免费下载视频| 国产一区二区视频在线播放| 亚洲AV成人精品网站在AV| 久久精品六区| 97硬碰| 日本片日本片祼观看网站在线看中文版网页在线看| 福利社区午夜一区二区| 2019天天干| 啊啊啊久久久视频 | 福利在线黄片| 丁香五六月啪啪| 91美女精品| 天天内射| 色 婷97| 另类图片五月天| 啪一啪免费视频| 三级日本一区二区三区| 91人妻在线视频| 久久久久96| 在线人妻熟女一区二区三区四区五区| se吧提供国产乱老熟视频胖女人| 舔舔啊| 婷婷情色五月天| 人妻加勒比东京热| 国产大学生高潮在线播放 | 国产97在线播放| 久久熟妇五十路一区| 97干在线| 中文字幕 国产 精品 | 免费作爱一级视频| 超碰在线一区| 人人操人人摸超碰| 人妻无码一区二区三区久久99| 久久草草欧美精品| 日韩成人免费电影| 日本护士高潮| 二男一女成人A片| 一级AV性爱| 91精片| 欧美天堂在线| 久草这里只有精品 | 热久久91婷婷| 综合激情五月丁香| 人人看人人摸人人色| 八戒午夜福利理论片| 大香蕉中文| 日韩精品亚洲一二三| 亚洲国产精品久久久久婷婷老年| 久久超碰亚洲人| 亚洲精品丝袜-不卡成人免费……| 高清一区AV无码| 国产极品馒头逼| 欧美色97| 欧美亚洲系列| 久久久久久久久一区二区三区| 欧美一区二区成人一卡| 97爱欧美| 青青草视频在线观看一区二区| 超碰人妻在线| 综合婷婷| 久久性爱视频| 高潮内射在线| 一区=区三区视频| 800zy一区二区| xxx亚洲午夜天堂| 国产精品 亚洲情色| 色婷婷在线视频精品导航| 天天操av懂色| 黄色成品网站| 天天爽夜夜欢视| 怡红院成人av| 欧美最大综合网| 夜夜 中文视频rt| 超碰伊人在线| 人妻少妇无码| 亚洲丝袜少妇在线| 91人人操| 26uuu最新| 人妻性爱一区二区| 污污汅18禁网站在线永久免费观看| 插入逼91| 岛国在线免费视频| 丰满人妻无码一区二区三区| 欧美性爱系列| caorenqi shipin| 日韩人妻少妇中文字幕| 人妻出轨一区二区三区| surenchaopeng| 精品乱码久久久久| 成人欧美日超碰| 亚洲极品| 国产精品久久久久久久久久久久久久吹| 夜夜嗨免费视频| 欧美色图99| 亚洲色图图片| 大黄片做爱的大的| 天美麻花大全视频| 欧美九九爱| 97免费视频网| 一本色道久久综合亚洲二区三区| 东北操逼| 国产精选视频| 天天懆天天日| 黄页视频网站野外| 97国产超湿| 熟女欧美日韩综合婷婷| 精品一区二区2| 玖玖爱影院| 91免费看一区二区三区| 亚洲一本色道中文无码aV天美| 中文字幕久热视频在线| 99激情视频| 一个人在线看的黄色电影网站| 亚洲综合色男人网| 999综合色| 大干人妻| 亚洲国产另类在线中文| 99久久久久久久久| 丰满少妇人妻久久久久久| 龙兴卡官方查询| 96久久久久久久| 午夜福利激情在线视频| 婷婷综合网站| juliaann丝袜大战黑鬼| 国产乱码久久久| 日本性感人妻91| 殴美大黄片| 精品人妻1237| 热久久无毒不卡| 无码天堂| 极品白嫩美女白浆成人福利在线看| 久久久久久AV无码免费网站| 久久久久久久久久久人妻| 色眯眯av| 成·人免费午夜在线观看| 黄色AAAAAAAAAAA大片| 夜夜嗨一区二区| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 欧美天天干| 激情久久久| 激情终合网| 色香av| 岛国片在线视频网站| 柠檬AV导航| 97干天天| 深夜福利黄片| 99久久婷婷国产综合精品草原| 91狠婷| 亚洲极品| 韩国一级婬片A片无码天美| 免费观看有码高清视频| 国产乱不卡| 97超碰人人操人人操| 影视综合无码少妇| 人人摸人人干人人拍97| 吉川爱美98堂在线| 亚洲色图大香| 99热大香蕉伊在线| 中文字幕,人妻,日韩| 亚洲色欲天天人妻无码系列专区| 新版天堂中文资源8在线| 啊啊啊 在线观看| 亚洲drav色图| 人人艹亚洲| 大香蕉AV丝袜| 9Ⅰ超碰| 操逼逼无码| 天天内射| 天天综合欧美| 青青草天天亲夜夜操网| 精品九九九九九九九九九| 亚洲国产成人综合碰碰三级经典| 久久久亚洲高清不打码| 91在线美女| 婷婷五月天基地| 超碰在线99| av天堂加勒比| 欧美成人一区二区三区在线播放| 久久久夜夜嗨免费视频| 亚洲天堂日本| 人人操人人摸人人看人人插| 91性生活久久久| 天天看天天日| 夜色五月天| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 国产精品不卡一区二区电影| 日韩美女久久一区二区三区| 蜜臀99久久| 志村玲子视频一区二区| 超碰97男女| 亚洲国产成人高清在线| 亚洲人妖网| 最新国内自拍av免费| 人人爽夜夜操| a片久久久久久久久久久久 | 嫩草影院永久在线制服丝袜| 影音先锋每日最新资源在线观看| 女人爽到高潮潮喷18禁网站| 亚欧美色图| blacked精品一区国产| 综合久久99亚洲人妻中文在线| 97天堂| www.99视频| 久久久久久少妇| 欧美探花网| 超碰99热中文字幕| 亚洲自拍天堂| 青青伊人加勒比海| 333kkkk·亚洲com久久| 韩国毛片一区二区三区| 激情接吻视频久久久久久| 色色青青久久| 综合网色| 青青久草| 久久五月婷| 98超碰欧美| 色五月首页| 亚洲熟女人妻中文字幕一区二区 | 色香阁在线| 在线午夜成人无码视频| 欧美熟妇精品黑人巨大一二三区| 亚洲丝袜诱惑| 亚洲一二三精品久久网| 国产久久成人| 9999久久久久| 久/久精品99看9| 999久久久| 亚洲蜜臀懂色| 国语国产操逼伊人AV网| 天天搞欧美| 99精品热| 91成人无码| 97国产色综合| 久久受www免费人成| 囯产精品强| 超碰精品在线| 秋霞一集毛片观看| 91精品免费| www久久久| 免费无码婬片AAAA片直播色戒| 后X久久| 综合影院永久入口国产| 校园春色中文字幕AV| 成年人一级黄色毛片大全在线观看| 男人天堂站| 操逼片国产| 舔人妻中文免费视频| 嗯嗯啊操我| 正在播放国产精品一区| 老鸭窝成人| 91人人爽人人爽| 亚洲国产一区二区日韩专区| 福利大香蕉| 亚洲综合网电影91| 久草视频在线视频在线视频在线观看| 亚洲中文字幕乱码无码一区二区 | 九九99精品| 中国少妇啪啪视频| 久久久久久久久久久999| 国产精品亚洲免费| 国内亚洲高清无码| 后入福利| 97爱免费插| 大香蕉久| 久久久999| 91精品又粗又猛又爽| 亚洲精品丝袜-不卡成人免费…… 久久久久成人蜜桃精品 | 国产欧美日韩精品中文| 97欧美综合| 无码人妻精品一区二区三区九九| 97国产高清视频在线观看| 日本不卡在线二区三区| 少妇人妻激情四射| 久9久| 人人操人人狠狠操| 92性色国产午夜福利在线661| 亚洲大胆人体av| 久久久久久久人妻| 国产高清精品一区二区三区毛片 | 久久鲁干| 2019精品国产无码成人| 99999国产| 久9久精品视频| 丰满人妻一区二区三区四| 国产97视频免费观看| 日韩精品在线视频,日韩精品……| 男人天堂久久日韩| 国产 日韩 欧美 人妻 熟女 中文| 中文一区二区三区影院| 91欧美情色| 一二三四视频在线社区中文字幕| 五月色网| 国产操逼逼网| 先锋影音av先锋一区| 综合欧美亚洲| 久久9视频| 色黄污美女啪啪啪免费网站| 99999亚洲另类| 激情露脸爱| 国产精品熟女乱伦| 国产一进一出视频网站| 国产精品免费1区2区视频| 国产一区在线看| 国产中文字幕在线观看| 九一精品牛牛一区二区| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 少妇xx精品| 国产成人拍国产亚洲精品| 欧美AB在线| 九九久久国产精品怡红院| 久色99999| 啊啊啊好舒服好爽啊啊啊视频| 亚洲一本大道中文字幕无码在线| 97爱| 久久久久久久唑| 小电影欧美91| 97精品视频在线播放| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 日本人妻最新在线中| 96国产精品| 91日日夜夜| 人妻少妇精品久久久| 成人久久无码www| 亚洲熟妇图片| 久久大香蕉手机高清| 亚洲精品99| 五月婷婷基地| 久99热| 五月香婷婷| 99re久久| 日韩操人| 在线只有精品| 亚洲欧洲另类| 久操大香蕉手机视频在线看| 亚洲激情网一二三四区| 日本福利社| 亚洲综合一区二区| 中日韩熟女| 国产免费操逼| 秋霞蝌科网日本一区| 欧美日韩 强奸乱伦| 久久肏大逼| 九九黄色视频在线观看| 在线啊v一区| 秋霞一级视频在线观看免费| 97啪啪| 婷婷亚洲天堂| 亚 欧 美 综合| 神马久久久久眼| 日本一区二区三区欧美日韩中文字幕| 色婷婷综合网| 欧美日韩高潮喷水91| 亚州精人品大香蕉| 日本精品人妻少妇一区二区| 天天干天天日天天射黄色大片| 丁香六月婷婷久久综合| 日本三级久| AV色天香在线| 亚洲蜜臀懂色| 人妻黑丝袜电影| 在线电影亚洲色图| 中国熟妇| 成人五月天丁香激情综合| 国产日韩精品suv| 人人摸.人人色| 操高情无码| 动漫爆乳3D奶水一区在线观看| 看一级特黄a大一片| 色色福利| 操99| 精品无码一区二区| 抽插爽| 亚州欧美综合| 大香蕉伊人75| 日韩免费簧片| 色五月激情AV在线| 天躁夜夜躁2021| 91操熟女| 超碰成人公开| 亚洲欧美成人在线| 久久日韩毛| 色色综合97| 亚洲精品 欧美97色色| 天美传媒AV在线播放| 强奸乱伦免费网站| 多乙久久久久久| 婷婷爱五月| 91美女在线视频| 欧美色图自拍| 久久大黄片| 久久东京伊人一本到鬼色| 亚洲高清无码免费观看视频| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 1769一区| av天堂精品久久| 亞洲久久直播| 五月天久久久| 一区中文字幕二区日韩| 欧美色图小说综合| 欧美91在线| 亚洲成人福利电影免费| 欧美性特| 久久精品国产精品| 欧美 亚洲 在线| 91香蕉视频在线观看免费| 色欲久久综合| 日韩99神马视频片| 亚洲高潮影院| 五月婷婷丁香六月丁香| 亚洲成av人片色午夜乱码| 五月天色图| 久久精品一区一起草| 日本羞羞的视频在线播放| 亚洲综合一区二区| 78p欧美| 在线洲亚线| 夜夜操美女| 超碰免费人人| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 极品少妇99| 又黄又硬又粗又长国产视频| 91亚洲色图| 精品亚洲国产成人av网站| 五月婷色| WWW.加勒比人妻一区不卡.com| 蜜桃狠狠色伊人亚洲综合| 91亚洲色图| 久久亚洲精品成人av| 亚欧精品久久久久久久久久久| 欧美天天综| 97鸡把在线视频| 亚洲AV成人无码一二三久久| 国产激情片在线观看| 亚洲 欧美都市激情| 久久精品视频在线观看| 在线观看啊啊啊啊啊| 97日韩| 色yeye成人免费视频| 大香蕉手机在线视频| 日欧毛片久久| 中文视频在线观看| 久久高清欧美国产| 91色综合激情| 日韩日韩日韩-国产乱码精品一区二区| 后入国产| 日韩黄色成人性爱| 欧美性爱一区| 啪啪啪亚欧美视频| AA特级绝黄| 熟女在线视频| 5252色欧美在线男人的天堂| 免费少妇一区二区| www.狠狠| 天天天操天天天爱| 翔田千里无码一区| 综合熟女| 97伦乱| 亚洲成aⅴ人片不卡无码| 精品视频日日夜夜| 嗯嗯不要视频| 大香蕉乱伦视频网| 久久亚州大香蕉| 久久av一级av少妇av高潮| 亚洲国产一区二区三区在线 | 国产一级αv免费看片| 欧洲精品人妻| 久久精品国产AV一区二区三区| 97超级久久强资源| 九九九九AV| 久久久精品国产亚洲AV无码| 日本精品一区二区三| 亚洲精品xxx| 综合久久六月久久婷婷| 75大香蕉| 日韩熟女无码| 国产在线不卡导航| 97综合久久| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 亚洲综合有码| 九九色热| 欲香欲色综合天天伊人| 久久久五月天| 精产品久久| 婷婷色网| 国产精品一区二区三| 麻豆国产尤物AV| 97天天| 超碰调教97| 亚洲色人| 欧洲Au麻豆| 日本中文字幕不卡视频| 亚洲美欧999| 精品日韩人妻视频| 日本一二区免费| 秋霞一集毛片观看| 亚洲天堂自拍| 天天看天天在线精品| 精品中文日韩字幕视频| 午夜寂寞欧美| 四虎精品亚洲| 成人情色一区二区| 人妻铁牛TV| 国产极品999| 日韩有码 一区二区三区| 91久久久视| 成人激情无码在线视频| 久草久日| 99视频内射三四| 国内外内射高清视频| 九一综合精品视品av| 欧美偷拍区| 色色综合97| 国模无码一区二区三区在线| 日韩欧美~中文字| 日本福利社| 天天射夜夜操| 一牛一区二区三区久久| jizzjizz欧美| 亚洲久久天堂| 殴美牲| 国产精品视频自拍在线| 欧美色图人妻| 国产精品三级视频网站| 中日韓欧美高清| 欧美一区二区在线资源| 欧美人与性动交a美精品| 久久久久久中文| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 91九久| 国产又猛又粗又爽又黄| 国产熟女精品区| 天堂8在线新版官网| 麻豆成人影音在线| 青久操| 丁香六月东京热| 夜夜精品视频| 今日头条成人一区二区三区四虎精品| 亚洲欧洲自拍图片专区满春格| 超碰天天操| 综合色播| 国产精品白丝在线播放| 久久9精品网站| 深夜啪啪啪视频免费| Av手机版天堂网| 白嫩91在线亚洲| 日韩伦理久 久久 清纯| 乱伦Av网| 亚洲色人| av 模特一区了| 欧美亚洲综合色| 久久精品国产99精品亚洲蜜...| 超碰 国产熟女精品一区| 插入综合网| 太久视频| 亚洲欧美第一页| 亚洲综合 欧美| 夜夜中出国产| 黄片aaaaa一区| 99999久久精| 熟妇亚洲一区二区三区| 色狠狠 - 百度| 中文字幕一区二区无码成人| 青青草在线视频人人想人人上| 日本欧美一区二区三区视频麻豆| 色妇91| 久色网| 精品欧美А∨无码黑人大荫蒂 | 欧美96精品在线| 无码人妻精品一区二区三区九九 | 欧差乱伦二三| 国产丝袜高跟美女av免费观看| 青青草视频久久| 日韩精品1区2区中文字幕| 日本道不卡| 国产欧美日产一区二区三区 - 国产欧美日| 久久久激情| 国产高清无码一区三区二区| 中日无幕一二三四区| 国产亚洲精品美女久久久m| 亚洲天堂精品日韩电影| 日本亚欧爱爱| 欧美精品偷拍| 啊啊啊不要好疼视频| 黄色网址在线免费观看| 国产黄色剧情影片麻豆免费播放| 人妻无码一区二区三区久久99| 射丝袜高跟鞋99| 大香蕉九九| 色色福利| 91大神精品长腿在线观看网站| 精品视频久久区| 久久久草成人网站久久久草成人久久久草久久久 | 91夜色| 国产精品一区二区麻豆| 伊人网在线观看| 国产农村妇女一区二区| 激情五月天丁香社区| 在线无码网站| 国产强奸无码乱伦| com 首页 18岁 禁区 女优 免费 精选 同城 | 操逼片中文| 久久久久久99AV无码免费网站| 激情情色五月天| 嗯嗯啊啊好疼| 欧美大香蕉在线观看| 97在线精品| 亚洲古典另类欧美在线| 免费福利视频中文字幕| 精品视频一区二区| 蜜臀AV午夜精品久| 东北操逼| 久久神马影院| 日韩一级二级在线| 日韩人体偷拍| 久久九九99| 亚洲中文字幕精品久久久久久直播| 看大黄色大片原件| 欧美成人性爱视频在线播放| 综合97| 97免费视频在线| 亚洲综合在线91| 肉丝中文无码高清| 亚洲精品久久一区二区三区蜜桃臀| 超碰天天久久79| 精品免费1| 97资源制服丝袜| 天天爽天天| 日韩一级片| 无码日韩网站| 国产精品成人蜜臀AV在线| 可以在线观看的黄色网址| 九九视频黄色片| 波多野结衣之双飞调教在线播放| 亚洲天天更新| 一区二区影视| 性欧美91| 96精品久久| 网友自拍第1页| 97网站在线观看| 中文字幕二区| 少妇精品久久久八区九区| 激情婷婷丁香| 尤物视频偷拍免费| 人人摸人人舔一区二区| 九一国产精品| 欧亚韩国999| 97国产精选| 久超碰这里只有精品| 5252色欧美在线男人的天堂| 久久精品国产97欧美精品亚洲 | 欧美成人A√在线一区二区| 9久久久久| 亚洲加勒比| 欧美激情激情xxxx欧美专区| 亚洲熟妇一,二,三期| 91精品国产91久久青草| 麻豆三极片| 亚洲日韩在线a不卡99精品| 无码137片内射在线影院| 成人av毛片在线观看| 东京热视频网| 人人操人人插人人摸人人干| 啪啪资源网| 国产成人bd在线观看| 亚洲精品成人激情在线| 99熟女| 亚洲一区二区麻豆影院| 亚洲国产一区二区三区在线| 91网亚洲| 超碰欧美在线欧美| 欧美性Fer办公室秘书| www.成人无码| 我想要 啊 啊 啊| 国产成人欧美精品在线| 欧美一级A一级a爱片久久| 91香蕉国产尤物视频| 一区二区乱码福利| 国产免费黄色一级大片| 尤物视频视频官网| 久操91视频| 亚洲**2021在线观看| 又大又长又粗又爽又黄| 91动漫操逼视频| 九九Av| 国产一区二区三区不卡手机在线| 美骚妇av高清在线| 国产自啪精品视频网站黑丝| 久久久青青草| 国产成年女黄特黄| 精品人妻一区二区视频| 91精品无码人妻系列| 日日夜夜天天| 精品无吗久久| 九九九草| 中文久久久| 少妇一区二区三区精选| 亚洲一区二区中文字幕| 嗯嗯啊在线视频| 亚洲视频,小说| 麻豆天美AV传媒第一页| 色欧美亚洲| 天天草夜夜草高潮片| 9999免费精彩视频| 刺激性视频黄页| 青青青艹在线视频| 美女91av| 激情婷婷黑人91| 欧美懂色综合网| 国产精品69人妻无码久久久| 超碰久热| 久久精品72| 国产青青综合伊人| 亚州男人天堂| 天天看特黄的免费网站| 国产兽交视频在线播放| 久久久久久99999国产精品| 日本视频在线中文字幕| 久草成人福利导航| 亚洲人久久久网| 超碰97首页| 中文字幕制服诱惑| 日韩一性一交一A片俄罗斯| 黑丝少妇| 欧美一区二区三区成人性生活| 日韩BBN| 先锋激情∨在线视频播放| 久久婷婷五月综合| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 久久久亚洲| 日韩不卡在线一区二区| 日本久久99| 天海翼久久| 欧美一区二区男人天堂| 日日碰狠狠添天天爽超| 熟女一区二区| 九九九九精品精| 91c色| 日han少妇无码| 无码人妻一区二区三区四区老鸭窝| 性爱Av免费| 97日本超碰综合| 国产情色第一第二页在线观看| 国产白丝av| 亚洲1区2区三区高清中文字幕| 天天看片天天爽| 久久久亚洲熟妇资源| 一区二区三区黄片免费观看| 九九热精品在线| 久久久精精精| 美国aaaaa一级黄片| 欧美97在线观看| 日本一二区不卡| 五月丁香婷婷综合| 九九九九日本 | 91白虎| 污污汅18禁网站在线永久免费观看| 日韩人妻资源在线看| 久9久9久9久9久9久9| 高清国产性猛交xxxx乱大交| 三级片大波波| 青草一区二区| 国产一区二区三区视频在线看| 五月天黄色av| 综合色欧美| 国产乱伦性爱AV| 足交视频老司机| 国产成年女人免费视频播放a| 3571色综合一区二区二区| 国产美女高潮视频| 亚洲av影院在线观看| 欧美欲色| 欧美亚洲高清| 国产欧美亚洲精品a第2页| 在线免费试看60秒| 天天躁日日躁AAAAXXXX国产| 手机不卡视频不卡在线一二三区 | 日韩性爱电影一区| 99黄页网站| 日韩熟女乱伦中出| 欧美内射少妇| 国内偷拍精品一区二区| 国产亚洲 中文欧美久久| 久久无码精品| 色情五月婷婷| 俞拍自拍| 操逼视频亚洲| 97精品在线| 欧美极品性爱天天射| 精品少妇后入一区二区三区四区人妻巨乳 | 亚洲欧美综合| 97精品国产97久久久| 久久嫩草| 国内91熟女人妻丝袜天天精品视频在线 | 国产精品扒开腿做爽爽爽视频| 成人性爱全视频观看| 精品久久九| 国产精品欧美日韩久久| 91天射| 在线欧美69V免费观看视频| 久久久久久久久久黄色网| 欧美爱三级日韩久久| 啊啊啊97视频| 97在线精品观看视频| 97AV在线免费观看| 激情无码日韩| 91网站在线播放| 熟女六十路| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 国产 亚洲 丝袜 制服| 都市激情人妻一区二区青青操视频 | 久久毛卡| 欧美成人国产精品| 亚洲成人一区二区精品| 青青草中出视频| 大香蕉黄色一区| 久热最新在线杭州| 天天综合亚在线| 欧美性爱精品七区| 久久伊人网视频一区二区三区 | 久久 国产 无码| 欧美情色贴图| 狼狼色丁香久久婷婷综合五月 | 中文字幕精品探花视频| 久久嫩草国产成人一区| 免费看黄片现成| 在线一区| 熟女六十路| 久久99国产精品| 美女露胸露屁股| 日韩免费a级毛片无码a∨| 亚州色站 日韩电影| 中文操逼字幕| 裸体美女久久久| 天天日天天干天天整| 91天堂| 操死我干死我| 乱伦图av| 狠狠97| 欧洲综合视频| 日韩免费高清大片在线| 久久精品国产久精国产| 思思热免费视频观看| 久久色精品视频在线| 最新一二三区视频| 日韩亚洲国产视频| 91天堂丝袜美腿| 亚洲熟妇乱女区二区三区| 国产精品探花色| 9九九国产| 极品五月天噜噜| 日本三级一区二区 在线| 精品人妻视频一区二区在线播放 | 亚洲色人| 久久久不能久久久久| 2019精品国产无码成人| 日韩精品国模| 五月激情影院| 免费精品国偷自产在线在线 | 国产精品视频精品一二| 日韩猛交| 东北老女人的激情视频| 欧美日韩性爱精品| 黑人综合网| 一级黄碟| 亚洲色图超碰在线| 国产在线观看91精品一区| 国产少妇与亚洲av| 日韩在线欧美精品一区二区| 九色 蝌蚪 熟女自| 丝袜六区| 欧美成人一级免费电影| 亚洲天堂资源网| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 色青青久久影视| 屁股久久久久久| 4虎在线视频| 超碰97欧美在线|