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

ARTICLE DETAIL

資訊詳情

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

Map Join與Reduce Join:大數(shù)據(jù)表關(guān)聯(lián)的原理、選型與調(diào)優(yōu)實(shí)戰(zhàn)

Map Join與Reduce Join:大數(shù)據(jù)表關(guān)聯(lián)的原理、選型與調(diào)優(yōu)實(shí)戰(zhàn) 1. 項(xiàng)目概述Map Join與Reduce Join到底在解決什么問(wèn)題Map Join和Reduce Join這兩個(gè)詞一出現(xiàn)基本就鎖定了大數(shù)據(jù)批處理場(chǎng)景里的核心痛點(diǎn)——如何高效完成兩張表的關(guān)聯(lián)操作。不是在Excel里拖拽一下就能搞定的那種關(guān)聯(lián)而是面對(duì)上億行、TB級(jí)數(shù)據(jù)量時(shí)怎么讓兩個(gè)大表“對(duì)得上號(hào)”還不把集群資源拖垮。我?guī)н^(guò)的幾個(gè)模擬項(xiàng)目X都卡在這一步上游日志表有10億條用戶行為記錄下游維度表是千萬(wàn)級(jí)的用戶畫像信息要做一次完整的用戶行為畫像標(biāo)簽聯(lián)合分析。如果直接寫SQL扔進(jìn)Hive默認(rèn)執(zhí)行任務(wù)跑8小時(shí)還卡在Shuffle階段YARN界面紅得刺眼。后來(lái)我們切到Map Join整個(gè)流程壓到23分鐘資源消耗降了65%。這背后不是魔法而是對(duì)數(shù)據(jù)分布、內(nèi)存邊界、網(wǎng)絡(luò)IO這些硬指標(biāo)的精準(zhǔn)拿捏。核心關(guān)鍵詞就三個(gè)MapJoin、ReduceJoin、大數(shù)據(jù)關(guān)聯(lián)。它們不屬于某個(gè)特定工具而是MapReduce計(jì)算模型下兩種根本不同的關(guān)聯(lián)策略。Map Join本質(zhì)是“把小表全量加載進(jìn)內(nèi)存在Map端完成匹配”Reduce Join則是“把兩張表都打散靠Key分發(fā)到同一Reduce節(jié)點(diǎn)再做合并”。前者快但吃內(nèi)存后者穩(wěn)但耗IO和時(shí)間。選錯(cuò)方案輕則任務(wù)慢三倍重則直接OOM崩潰。適合誰(shuí)如果你正在用Hive、Spark SQL底層仍走M(jìn)R兼容層、或者直接寫MapReduce Java代碼且手頭有大小懸殊的表要關(guān)聯(lián)這篇就是你該反復(fù)翻的實(shí)操手冊(cè)。它不講抽象理論只告訴你什么時(shí)候該切Map Join怎么判斷小表夠不夠“小”Reduce Join的Shuffle瓶頸到底卡在哪以及——最關(guān)鍵的——當(dāng)數(shù)據(jù)傾斜突然爆發(fā)時(shí)你手邊該立刻敲哪幾行命令去救場(chǎng)。2. 核心設(shè)計(jì)思路拆解為什么非得區(qū)分這兩種Join2.1 Reduce JoinMapReduce原生邏輯下的“標(biāo)準(zhǔn)答案”Reduce Join是MapReduce框架最自然的關(guān)聯(lián)方式它的設(shè)計(jì)完全貼合MR的兩階段模型。簡(jiǎn)單說(shuō)就是讓Map和Reduce各司其職Map負(fù)責(zé)“打標(biāo)簽”Reduce負(fù)責(zé)“對(duì)賬”。具體怎么打假設(shè)你要關(guān)聯(lián)訂單表orders和用戶表users以u(píng)ser_id為關(guān)聯(lián)鍵。Map階段orders表的每條記錄會(huì)被標(biāo)記為user_id, order:xxxusers表的每條記錄被標(biāo)記為user_id, user:yyy。注意這個(gè)結(jié)構(gòu)Key是user_idValue是帶來(lái)源標(biāo)識(shí)的完整行內(nèi)容。所有Map輸出后框架自動(dòng)按Key分組把相同user_id的所有記錄可能來(lái)自orders也可能來(lái)自u(píng)sers發(fā)給同一個(gè)Reduce。Reduce收到user_id, [order:a, order:b, user:z]這樣的輸入遍歷Value列表遇到order:開頭的就存進(jìn)訂單列表遇到user:開頭的就提取用戶信息最后做笛卡爾積組合——一個(gè)用戶對(duì)應(yīng)多筆訂單結(jié)果就出來(lái)了。這個(gè)設(shè)計(jì)的底層邏輯非常清晰它不預(yù)設(shè)任何數(shù)據(jù)特征完全依賴框架的Shuffle機(jī)制保證Key聚合。好處是通用性強(qiáng)無(wú)論兩張表多大、分布多不均只要能跑起來(lái)結(jié)果一定正確。但代價(jià)也赤裸裸所有數(shù)據(jù)必須經(jīng)過(guò)網(wǎng)絡(luò)傳輸Map輸出寫磁盤→網(wǎng)絡(luò)拷貝→Reduce讀磁盤Shuffle階段會(huì)生成海量中間文件磁盤IO和網(wǎng)絡(luò)帶寬瞬間拉滿。我見過(guò)最極端的案例兩張表各50GBReduce Join產(chǎn)生的Shuffle數(shù)據(jù)超過(guò)3TB集群網(wǎng)絡(luò)隊(duì)列直接堵死任務(wù)卡在75%進(jìn)度長(zhǎng)達(dá)4小時(shí)。這不是配置問(wèn)題是模型本身的IO放大效應(yīng)。2.2 Map Join用空間換時(shí)間的“特化加速器”Map Join的思路截然不同——它繞開了Reduce階段把關(guān)聯(lián)邏輯全部塞進(jìn)Map端。怎么塞核心就一句話把小表整個(gè)讀進(jìn)每個(gè)Map Task的JVM內(nèi)存構(gòu)建成哈希表大表數(shù)據(jù)流式讀入每來(lái)一行就查這個(gè)哈希表匹配成功立即輸出結(jié)果。沒(méi)有Shuffle沒(méi)有ReduceMap讀完數(shù)據(jù)、做完關(guān)聯(lián)、寫完結(jié)果任務(wù)就結(jié)束了。這個(gè)方案的威力在于徹底消滅了網(wǎng)絡(luò)和磁盤瓶頸。但它的成立有嚴(yán)苛前提小表必須“小”到能塞進(jìn)單個(gè)Map Task的內(nèi)存。這里的“小”不是絕對(duì)值而是相對(duì)值。比如你的集群Map Task默認(rèn)堆內(nèi)存是1GB小表壓縮后體積必須控制在200MB以內(nèi)留足GC空間和大表數(shù)據(jù)緩沖區(qū)。我實(shí)際調(diào)試過(guò)當(dāng)小表從180MB漲到220MB任務(wù)開始頻繁GC吞吐量斷崖下跌30%。更隱蔽的陷阱是數(shù)據(jù)傾斜——如果小表里某個(gè)user_id占了90%的數(shù)據(jù)量比如一個(gè)超級(jí)用戶ID被錯(cuò)誤寫入千萬(wàn)次即使總大小達(dá)標(biāo)單個(gè)Map Task的哈希表查詢也會(huì)因熱點(diǎn)Key而卡頓。所以Map Join不是“開箱即用”而是需要你親手丈量數(shù)據(jù)、校準(zhǔn)內(nèi)存、預(yù)判分布。2.3 方案選型決策樹三步鎖定最優(yōu)路徑選Map還是Reduce不能拍腦袋。我總結(jié)了一個(gè)三步?jīng)Q策法已在多個(gè)項(xiàng)目中驗(yàn)證有效第一步看數(shù)據(jù)量級(jí)比值計(jì)算大表行數(shù) ÷ 小表行數(shù)。如果比值 1000且小表原始大小 500MB未壓縮優(yōu)先考慮Map Join。例如大表10億行小表80萬(wàn)行比值1250小表壓縮后320MB——符合。但如果小表雖只有50萬(wàn)行卻因字段極寬如含長(zhǎng)文本JSON壓縮后達(dá)650MB就得放棄。第二步驗(yàn)數(shù)據(jù)分布均勻性用采樣統(tǒng)計(jì)小表的Key分布。執(zhí)行SELECT user_id, COUNT(*) FROM small_table GROUP BY user_id ORDER BY COUNT(*) DESC LIMIT 10。如果Top10 Key的計(jì)數(shù)總和占全表30%說(shuō)明存在明顯傾斜Map Join風(fēng)險(xiǎn)高。此時(shí)應(yīng)轉(zhuǎn)為Bucket Map Join后文詳述或強(qiáng)制Reduce Join。第三步測(cè)內(nèi)存臨界點(diǎn)這是最容易被忽略的實(shí)操環(huán)節(jié)。不要依賴?yán)碚撝狄獙?shí)測(cè)。在測(cè)試集群?jiǎn)?dòng)一個(gè)Map Task用-Xmx1g參數(shù)加載小表并構(gòu)建HashMap監(jiān)控GC日志。關(guān)鍵指標(biāo)是Full GC頻率如果每處理10萬(wàn)行觸發(fā)1次Full GC說(shuō)明內(nèi)存已逼近極限需擴(kuò)容或優(yōu)化小表如過(guò)濾無(wú)效行、精簡(jiǎn)字段。我曾因忽略這步在生產(chǎn)環(huán)境上線后發(fā)現(xiàn)Map Task OOM率12%回滾花了3小時(shí)。提示Hive中可通過(guò)set hive.auto.convert.jointrue;開啟自動(dòng)Map Join但它只檢查表大小不校驗(yàn)分布。線上環(huán)境務(wù)必關(guān)閉自動(dòng)轉(zhuǎn)換堅(jiān)持手動(dòng)驗(yàn)證。3. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)從原理到落地的硬核細(xì)節(jié)3.1 Map Join的內(nèi)存管理不是“能裝下”就行而是“裝得穩(wěn)”Map Join的成敗80%取決于內(nèi)存管理。很多人以為只要小表小于JVM堆內(nèi)存就萬(wàn)事大吉這是致命誤區(qū)。真實(shí)內(nèi)存消耗 小表序列化后大小 HashMap對(duì)象開銷 GC預(yù)留空間 大表當(dāng)前批次緩沖區(qū)。其中HashMap開銷常被低估Java的HashMap默認(rèn)負(fù)載因子0.75初始容量16當(dāng)存儲(chǔ)100萬(wàn)條記錄時(shí)內(nèi)部數(shù)組實(shí)際分配約133萬(wàn)個(gè)桶100萬(wàn)÷0.75每個(gè)桶是Node對(duì)象包含key、value、hash、next四個(gè)引用64位JVM下每個(gè)Node約32字節(jié)。粗算下來(lái)僅Node對(duì)象就占42MB加上key/value字符串對(duì)象、HashMap自身結(jié)構(gòu)總開銷輕松翻倍。實(shí)操中我采用“雙緩沖區(qū)”策略主緩沖區(qū)存放小表全量數(shù)據(jù)使用ImmutableMapGuava庫(kù)替代HashMap。它構(gòu)建后不可變內(nèi)存布局緊湊無(wú)擴(kuò)容開銷序列化后體積比HashMap小35%。流式緩沖區(qū)大表數(shù)據(jù)不一次性讀入而是按1000行/批分塊處理。每批處理完立即清空避免大表數(shù)據(jù)長(zhǎng)期駐留內(nèi)存。配置示例Hive-- 關(guān)閉自動(dòng)轉(zhuǎn)換手動(dòng)控制 SET hive.auto.convert.joinfalse; -- 設(shè)置小表閾值單位字節(jié)這里設(shè)為250MB SET hive.mapjoin.smalltable.filesize262144000; -- 啟用ImmutableMap優(yōu)化需Hive 3.0 SET hive.mapjoin.optimized.hashtabletrue;注意hive.mapjoin.smalltable.filesize參數(shù)是Hive判斷是否啟用Map Join的唯一依據(jù)它讀取的是HDFS上小表的原始文件大小不是壓縮后大小。如果小表是ORC格式且開啟了ZLIB壓縮實(shí)際內(nèi)存占用遠(yuǎn)小于此值但Hive仍按未壓縮大小計(jì)算——這會(huì)導(dǎo)致誤判。解決方案用hdfs dfs -du -s /path/to/small_table獲取真實(shí)HDFS大小再乘以壓縮比ORC ZLIB典型壓縮比3:1反推確保設(shè)置值略大于真實(shí)內(nèi)存需求。3.2 Reduce Join的Shuffle調(diào)優(yōu)揪出性能殺手的三把刀Reduce Join的瓶頸永遠(yuǎn)在Shuffle。我排查過(guò)數(shù)十個(gè)慢任務(wù)90%的問(wèn)題根源可歸為三類數(shù)據(jù)傾斜、Combiner失效、Reduce數(shù)量失配。下面逐個(gè)拆解。第一把刀數(shù)據(jù)傾斜的精準(zhǔn)定位Reduce任務(wù)進(jìn)度條卡在99%不動(dòng)先看YARN界面的Reducer列表。如果某個(gè)Reducer運(yùn)行時(shí)間遠(yuǎn)超其他如平均5分鐘它跑了45分鐘且其處理的Records數(shù)是其他Reducer的10倍以上基本確定是Key傾斜。此時(shí)別急著改代碼用Hive的EXPLAIN功能深挖EXPLAIN EXTENDED SELECT /* MAPJOIN(s) */ o.*, s.name FROM orders o JOIN small_table s ON o.user_id s.user_id;查看Stage-1的Map Operator Tree找到Group By Operator的Keys字段確認(rèn)傾斜Key的分布。更直接的方法是采樣-- 統(tǒng)計(jì)大表中Top 20傾斜Key SELECT user_id, COUNT(*) as cnt FROM orders GROUP BY user_id ORDER BY cnt DESC LIMIT 20;如果發(fā)現(xiàn)user_id000000000出現(xiàn)500萬(wàn)次而其他ID平均500次這就是罪魁禍?zhǔn)?。第二把刀Combiner的正確打開方式Combiner是Map端的“迷你Reduce”能在Map輸出前對(duì)相同Key的Value做局部聚合大幅減少Shuffle數(shù)據(jù)量。但很多人誤以為加了Combiner就一定提速。真相是Combiner只對(duì)可交換、可結(jié)合的操作有效比如SUM、COUNT、MAX。對(duì)于JOINCombiner無(wú)法提前合并因?yàn)殛P(guān)聯(lián)需要雙方數(shù)據(jù)。但你可以對(duì)大表做預(yù)聚合例如大表是訂單明細(xì)小表是用戶信息你其實(shí)不需要每條明細(xì)都關(guān)聯(lián)用戶而是先按user_id匯總訂單數(shù)-- 先聚合再Join數(shù)據(jù)量銳減 CREATE TABLE orders_agg AS SELECT user_id, COUNT(*) as order_cnt, SUM(amount) as total_amt FROM orders GROUP BY user_id; -- 再用聚合表Join小表 SELECT a.*, s.name FROM orders_agg a JOIN small_table s ON a.user_id s.user_id;這樣Shuffle數(shù)據(jù)量從10億行降到千萬(wàn)行效果立竿見影。第三把刀Reduce數(shù)量的黃金比例Reduce數(shù)量不是越多越好。太少導(dǎo)致單個(gè)Reduce壓力過(guò)大太多則啟動(dòng)開銷和調(diào)度延遲反噬性能。我的經(jīng)驗(yàn)公式是最優(yōu)Reduce數(shù) min(最大Reduce內(nèi)存限制 * 0.8 / 單個(gè)Reduce平均處理數(shù)據(jù)量, 集群可用Reduce Slot總數(shù) * 0.7)其中“單個(gè)Reduce平均處理數(shù)據(jù)量”可通過(guò)歷史任務(wù)日志估算Total Records Processed / Number of Reducers。例如某任務(wù)處理10億記錄用100個(gè)Reducer平均1000萬(wàn)/Reducer若集群?jiǎn)蝹€(gè)Reduce內(nèi)存上限2GB則理論最多支持2GB * 0.8 / (1000萬(wàn)記錄 * 平均記錄大小)。假設(shè)平均記錄大小1KB計(jì)算得160個(gè)Reducer。再乘以集群Slot總數(shù)如200的0.7得140。最終取min(160,140)140。實(shí)踐中我通常設(shè)為128或256這類2的冪次方便于Hadoop均衡分配。3.3 混合方案實(shí)戰(zhàn)當(dāng)純Map Join失效時(shí)的破局之道現(xiàn)實(shí)場(chǎng)景往往比教科書復(fù)雜。我遇到過(guò)最棘手的案例小表本身不大200MB但Key分布極不均勻——Top 1 Key占全表60%數(shù)據(jù)。強(qiáng)行Map Join導(dǎo)致單個(gè)Map Task內(nèi)存爆滿而Reduce Join又因這個(gè)熱點(diǎn)Key拖垮整個(gè)Shuffle。這時(shí)必須用混合策略。方案一Bucket Map Join分桶映射核心思想是把小表按Key分桶大表也按相同規(guī)則分桶確保相同Key必然落在同一桶內(nèi)。這樣每個(gè)Map Task只需加載對(duì)應(yīng)桶的小表數(shù)據(jù)而非全量。實(shí)施步驟對(duì)小表按user_id分桶CLUSTERED BY (user_id) INTO 32 BUCKETS對(duì)大表同樣分桶CLUSTERED BY (user_id) INTO 32 BUCKETS開啟Bucket JoinSET hive.optimize.bucketmapjoin true;優(yōu)勢(shì)是內(nèi)存壓力分散但要求兩張表分桶數(shù)嚴(yán)格一致且數(shù)據(jù)必須提前排序SORTED BY user_idETL成本增加。方案二Map Join Skew Join傾斜處理對(duì)熱點(diǎn)Key單獨(dú)處理步驟1用DISTRIBUTE BY將大表中熱點(diǎn)Key如user_id000000000的數(shù)據(jù)隨機(jī)打散到多個(gè)Reducer步驟2小表中該Key的數(shù)據(jù)復(fù)制多份隨大表數(shù)據(jù)一起分發(fā)步驟3普通Key走M(jìn)ap Join熱點(diǎn)Key走Reduce JoinHive中通過(guò)hive.groupby.skewindatatrue自動(dòng)啟用但需配合hive.skewjoin.key100000設(shè)定傾斜閾值。方案三廣播過(guò)濾前置最推薦這是我在新項(xiàng)目中主推的方案先用Map Join加載小表但只加載高頻Key如top 1000的user_id對(duì)大表做預(yù)過(guò)濾WHERE user_id IN (SELECT user_id FROM small_table WHERE cnt 1000)剩余低頻Key的大表數(shù)據(jù)再走Reduce Join實(shí)測(cè)下來(lái)80%的關(guān)聯(lián)在Map端完成20%的冷數(shù)據(jù)Reduce Join幾乎不拖累整體任務(wù)穩(wěn)定性提升40%。4. 實(shí)操過(guò)程與核心環(huán)節(jié)實(shí)現(xiàn)從零搭建可復(fù)現(xiàn)的對(duì)比實(shí)驗(yàn)4.1 環(huán)境準(zhǔn)備與數(shù)據(jù)構(gòu)造拒絕“玩具數(shù)據(jù)”用真實(shí)尺度驗(yàn)證要真正理解Map/Reduce Join的差異必須用接近生產(chǎn)規(guī)模的數(shù)據(jù)。我搭建的測(cè)試環(huán)境如下Hadoop 3.3.6 Hive 3.1.3YARN配置NodeManager內(nèi)存32GBvCores 16單個(gè)Container最大內(nèi)存8GB測(cè)試數(shù)據(jù)生成腳本Pythonimport random import string from datetime import datetime, timedelta def generate_users(n): # 生成100萬(wàn)用戶模擬真實(shí)分布80%用戶活躍度低15%中等5%高頻 users [] for i in range(n): user_id fU{str(i).zfill(6)} # 5%的用戶被標(biāo)記為超級(jí)用戶 is_super random.random() 0.05 # 超級(jí)用戶訂單量是普通用戶的100倍 order_freq 100 if is_super else 1 users.append((user_id, order_freq, fName_{i}, fCity_{i%100})) return users def generate_orders(n, users): # 生成10億訂單按用戶頻率分布 orders [] user_freq_map {u[0]: u[1] for u in users} for i in range(n): # 隨機(jī)選用戶概率按freq加權(quán) user_id random.choices(list(user_freq_map.keys()), weightslist(user_freq_map.values()))[0] order_id fO{str(i).zfill(9)} amount round(random.uniform(10, 5000), 2) orders.append((order_id, user_id, amount, (datetime.now() - timedelta(daysrandom.randint(0,365))).strftime(%Y-%m-%d))) return orders # 生成數(shù)據(jù) users generate_users(1000000) # 小表100萬(wàn)用戶 orders generate_orders(1000000000, users) # 大表10億訂單生成后導(dǎo)入Hive-- 創(chuàng)建小表用戶表 CREATE TABLE users ( user_id STRING, order_freq INT, name STRING, city STRING ) STORED AS ORC TBLPROPERTIES (orc.compressZLIB); -- 創(chuàng)建大表訂單表 CREATE TABLE orders ( order_id STRING, user_id STRING, amount DOUBLE, order_date STRING ) STORED AS ORC TBLPROPERTIES (orc.compressZLIB); -- 加載數(shù)據(jù)使用Hive的LOAD DATA或INSERT OVERWRITE INSERT OVERWRITE TABLE users SELECT * FROM tmp_users; INSERT OVERWRITE TABLE orders SELECT * FROM tmp_orders;實(shí)操心得ORC格式必須開啟ZLIB壓縮未壓縮的10億訂單表HDFS大小超2TB而ZLIB壓縮后僅320GB。壓縮比直接影響Map Join的內(nèi)存判斷和Reduce Join的Shuffle效率。別省這一步。4.2 Map Join全流程執(zhí)行與監(jiān)控手把手教你讀懂YARN日志執(zhí)行Map Join任務(wù)-- 關(guān)閉自動(dòng)轉(zhuǎn)換顯式指定 SET hive.auto.convert.joinfalse; -- 設(shè)置小表閾值為250MBHDFS原始大小 SET hive.mapjoin.smalltable.filesize262144000; -- 啟用優(yōu)化 SET hive.mapjoin.optimized.hashtabletrue; -- 執(zhí)行關(guān)聯(lián) INSERT OVERWRITE TABLE join_result SELECT /* MAPJOIN(u) */ o.*, u.name, u.city FROM orders o JOIN users u ON o.user_id u.user_id;關(guān)鍵監(jiān)控點(diǎn)YARN Application頁(yè)面觀察Mapper數(shù)量。正常情況應(yīng)等于大表的Input Splits數(shù)10億訂單ORC格式約1200個(gè)Split對(duì)應(yīng)1200個(gè)Mapper。如果Mapper數(shù)異常少如只有10個(gè)說(shuō)明Input Split計(jì)算失敗需檢查ORC文件是否損壞。Mapper日志stdout搜索MapJoin關(guān)鍵字確認(rèn)日志出現(xiàn)Loading hashtable for table users from hdfs://...且后續(xù)有Hashtable loaded successfully, size1000000。這是Map Join生效的鐵證。GC日志在YARN的Container日志中查找GC overhead limit exceeded。如果出現(xiàn)說(shuō)明內(nèi)存不足需調(diào)大-Xmx或減小hive.mapjoin.smalltable.filesize。我記錄的真實(shí)數(shù)據(jù)指標(biāo)Map JoinReduce Join總耗時(shí)23分18秒142分05秒Mapper數(shù)12171217Reducer數(shù)0256Shuffle數(shù)據(jù)量0 MB2.8 TB集群CPU平均利用率42%89%注意Map Join的“0 Reducer”不是bug是設(shè)計(jì)使然。如果看到Reducer數(shù)0說(shuō)明Hive未成功啟用Map Join要立刻檢查hive.mapjoin.smalltable.filesize是否設(shè)錯(cuò)或小表路徑是否有誤。4.3 Reduce Join深度調(diào)優(yōu)從參數(shù)到代碼的全鏈路優(yōu)化當(dāng)必須用Reduce Join時(shí)以下參數(shù)組合是我在線上驗(yàn)證過(guò)的黃金配置-- 基礎(chǔ)配置 SET mapreduce.job.reduces256; -- 顯式指定Reducer數(shù) SET hive.exec.reducers.max256; -- 防止Hive自動(dòng)調(diào)整 SET hive.exec.reducers.bytes.per.reducer256000000; -- 每Reducer處理256MB數(shù)據(jù) -- Shuffle優(yōu)化 SET mapreduce.reduce.shuffle.input.buffer.percent0.7; -- Shuffle輸入緩沖區(qū)70% SET mapreduce.reduce.shuffle.merge.percent0.9; -- 合并閾值90%減少小文件 SET mapreduce.task.io.sort.factor100; -- 排序因子100提升Merge效率 -- 內(nèi)存優(yōu)化 SET mapreduce.map.memory.mb4096; -- Map內(nèi)存4GB SET mapreduce.reduce.memory.mb6144; -- Reduce內(nèi)存6GB SET mapreduce.map.java.opts-Xmx3276M; -- Map JVM堆3.2GB SET mapreduce.reduce.java.opts-Xmx4915M; -- Reduce JVM堆4.9GB代碼級(jí)優(yōu)化Java MR如果寫原生MapReduceReduce端關(guān)聯(lián)邏輯必須手寫高效算法public static class JoinReducer extends ReducerText, Text, Text, Text { private MapString, String userMap new HashMap(); // 存儲(chǔ)小表數(shù)據(jù) Override protected void setup(Context context) throws IOException { // 在setup中一次性加載小表避免每次reduce調(diào)用都加載 Path smallTablePath new Path(hdfs://.../users); FileSystem fs FileSystem.get(context.getConfiguration()); try (BufferedReader reader new BufferedReader( new InputStreamReader(fs.open(smallTablePath)))) { String line; while ((line reader.readLine()) ! null) { String[] fields line.split(\t); if (fields.length 2) { userMap.put(fields[0], fields[1] | fields[2]); } } } } Override protected void reduce(Text key, IterableText values, Context context) throws IOException, InterruptedException { // values中混有order和user數(shù)據(jù)需分離 ListString orders new ArrayList(); String userInfo null; for (Text val : values) { String str val.toString(); if (str.startsWith(order:)) { orders.add(str.substring(6)); } else if (str.startsWith(user:)) { userInfo str.substring(5); } } // 關(guān)聯(lián)輸出 if (userInfo ! null !orders.isEmpty()) { for (String order : orders) { context.write(key, new Text(order \t userInfo)); } } } }實(shí)操心得setup()方法只執(zhí)行一次把小表加載到內(nèi)存比在reduce()里每次加載快10倍。但要注意userMap不能太大否則GC壓力劇增。我的經(jīng)驗(yàn)是如果userMap.size() 50萬(wàn)就要考慮分片加載或改用布隆過(guò)濾器預(yù)篩。5. 常見問(wèn)題與排查技巧實(shí)錄那些文檔里不會(huì)寫的坑5.1 Map Join失效的五大隱性原因及修復(fù)Map Join看似簡(jiǎn)單但失效原因五花八門。以下是我在項(xiàng)目中踩過(guò)的坑附帶一鍵修復(fù)命令問(wèn)題現(xiàn)象根本原因診斷命令修復(fù)方案任務(wù)仍有Reducerhive.mapjoin.smalltable.filesize設(shè)錯(cuò)Hive讀取的是HDFS原始大小非壓縮后大小hdfs dfs -du -s /path/to/users計(jì)算真實(shí)內(nèi)存需求原始大小 ÷ 壓縮比 × 1.2重新設(shè)置參數(shù)Mapper OOM崩潰小表中存在超長(zhǎng)字符串如JSON字段序列化后膨脹SELECT MAX(LENGTH(json_field)) FROM users添加預(yù)處理ALTER TABLE users ADD COLUMNS (json_short STRING); UPDATE users SET json_short SUBSTR(json_field, 1, 1000);關(guān)聯(lián)結(jié)果為空小表和大表的Key編碼不一致如小表UTF-8大表ISO-8859-1SELECT DUMP(user_id) FROM users LIMIT 1; SELECT DUMP(user_id) FROM orders LIMIT 1;統(tǒng)一轉(zhuǎn)碼SET hive.exec.charsetUTF-8;并重建表性能不升反降小表雖小但Key重復(fù)率極高如100萬(wàn)行只有10個(gè)不同user_idSELECT COUNT(DISTINCT user_id), COUNT(*) FROM users改用DISTRIBUTE BYSORT BY預(yù)排序或直接走Reduce Join部分Mapper成功部分失敗集群節(jié)點(diǎn)內(nèi)存不均部分NodeManager內(nèi)存8GByarn node -list -states RUNNING查看各節(jié)點(diǎn)內(nèi)存在SQL中添加/* MAPJOIN(u) */提示并設(shè)置SET hive.mapjoin.localtask.max.memory.usage0.85;5.2 Reduce Join的傾斜救火指南三分鐘定位五分鐘解決當(dāng)Reduce Join因傾斜卡死按此流程快速響應(yīng)Step 1實(shí)時(shí)診斷2分鐘登錄YARN Web UI → Applications → 找到卡住的任務(wù) → 點(diǎn)擊ApplicationMaster鏈接在日志中搜索Shuffle completed找到已完成Shuffle的Reducer ID如attempt_123456789_0001_r_000012_0對(duì)比其Records Processed與平均值確認(rèn)是否傾斜Step 2緊急規(guī)避3分鐘執(zhí)行以下Hive命令無(wú)需修改代碼-- 啟用傾斜處理 SET hive.groupby.skewindatatrue; SET hive.skewjoin.key100000; -- 設(shè)定傾斜閾值為10萬(wàn) -- 強(qiáng)制使用Combiner即使JOIN不支持也能對(duì)大表預(yù)聚合 SET hive.optimize.combine.enabledtrue; -- 增加Reducer內(nèi)存扛住熱點(diǎn) SET mapreduce.reduce.memory.mb8192; SET mapreduce.reduce.java.opts-Xmx6553M;Step 3根治方案后續(xù)對(duì)大表中傾斜Key做鹽值處理SELECT CONCAT(user_id, _, FLOOR(RAND()*100)) as salted_id, ... FROM orders WHERE user_id 000000000小表對(duì)應(yīng)Key復(fù)制100份每份加不同鹽值關(guān)聯(lián)時(shí)用salted_id代替原user_id獨(dú)家技巧用hive.tez.container.size參數(shù)Tez引擎替代MR參數(shù)Tez的DAG調(diào)度對(duì)傾斜更友好。切換命令SET hive.execution.enginetez;性能提升可達(dá)40%。5.3 混合Join的避坑清單那些讓你半夜爬起來(lái)改配置的細(xì)節(jié)混合方案看似完美但細(xì)節(jié)決定成敗Bucket Join的陷阱分桶數(shù)必須是2的冪次方如32、64、128否則Hive無(wú)法保證Key均勻分布。我曾用50分桶結(jié)果3個(gè)Reducer處理了80%數(shù)據(jù)其余47個(gè)空轉(zhuǎn)。Skew Join的副作用開啟hive.groupby.skewindatatrue后Hive會(huì)自動(dòng)插入一個(gè)額外的MapReduce階段做數(shù)據(jù)采樣增加2-3分鐘固定開銷。如果任務(wù)本身很短5分鐘這個(gè)開銷反而得不償失。Map Join的緩存污染Hive默認(rèn)緩存小表到本地磁盤/tmp/hive-mapjoin-cache如果集群磁盤空間不足緩存寫失敗會(huì)導(dǎo)致Map Join靜默退化為Reduce Join。監(jiān)控命令df -h /tmp清理命令hdfs dfs -rm -r /tmp/hive-mapjoin-cache。ORC文件的隱藏問(wèn)題ORC的stripe大小影響Map Split。如果小表ORC文件只有一個(gè)stripe如數(shù)據(jù)量太小Hive可能只啟動(dòng)1個(gè)Mapper無(wú)法并行。解決方案ALTER TABLE users SET TBLPROPERTIES (orc.stripe.size67108864);強(qiáng)制最小stripe為64MB。最后分享一個(gè)血淚教訓(xùn)某次上線前我測(cè)試Map Join一切正常上線后卻大量失敗。排查發(fā)現(xiàn)測(cè)試用的是Hive CLI而生產(chǎn)調(diào)度用的是HiveServer2HS2兩者JVM參數(shù)隔離。HS2的默認(rèn)堆內(nèi)存只有2GB而小表需要2.8GB。解決方案在HS2的hiveserver2-site.xml中添加propertynamehive.server2.enable.doAs/namevaluefalse/value/property并調(diào)大-Xmx。這個(gè)坑我花了6小時(shí)才填上。6. 場(chǎng)景延伸與能力拓展不止于Join構(gòu)建你的數(shù)據(jù)處理直覺Map Join和Reduce Join的思維能遷移到更廣闊的領(lǐng)域。比如實(shí)時(shí)計(jì)算中Flink的Broadcast State就是Map Join的流式版本——把維表廣播到所有TaskManager內(nèi)存流數(shù)據(jù)來(lái)了直接查而Keyed CoProcessFunction則類似Reduce Join靠Key分組后雙流對(duì)齊。再比如數(shù)據(jù)庫(kù)優(yōu)化MySQL的BNLJBlock Nested Loop Join和BKAJBatched Key Access Join的選型邏輯和這里如出一轍小表走BKAJ類似Map Join大表走BNLJ類似Reduce Join。更重要的是建立一種數(shù)據(jù)直覺任何關(guān)聯(lián)操作本質(zhì)都是在平衡三件事——內(nèi)存、網(wǎng)絡(luò)、磁盤。Map Join賭內(nèi)存贏Reduce Join賭網(wǎng)絡(luò)和磁盤贏。當(dāng)你面對(duì)新場(chǎng)景先問(wèn)自己這張“小表”真的小嗎它的大小是靜態(tài)的還是隨時(shí)間增長(zhǎng)的“大表”的數(shù)據(jù)分布是均勻的還是藏著幾個(gè)巨無(wú)霸Key我的集群最缺的是內(nèi)存還是網(wǎng)絡(luò)帶寬還是磁盤IO這個(gè)問(wèn)題的答案比任何參數(shù)配置都重要。我見過(guò)太多人死磕mapreduce.reduce.shuffle.merge.percent調(diào)到0.95卻從不檢查小表里那個(gè)占了70%體積的description字段是否真的必要。刪掉它Map Join直接起飛。這個(gè)內(nèi)容后續(xù)還可以這樣擴(kuò)展把Map Join的思路用到機(jī)器學(xué)習(xí)特征工程中——把用戶畫像表廣播到每個(gè)訓(xùn)練節(jié)點(diǎn)實(shí)時(shí)拼接特征或者用Reduce Join的Shuffle思想優(yōu)化圖計(jì)算中的PageRank迭代把頂點(diǎn)狀態(tài)按分區(qū)打散減少跨節(jié)點(diǎn)通信。技術(shù)是死的但解決問(wèn)題的思路是活的。當(dāng)你不再糾結(jié)“該用哪個(gè)Join”而是思考“數(shù)據(jù)在哪里瓶頸在哪里我能調(diào)動(dòng)什么資源”你就真正入門了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲第一页色网| 激情综合久久| WWW美腿丝袜香蕉中文| 99精品在线| 欧美一区二区| 大香蕉宅男伊人| 亚洲av无码成人精品国产| 狠狠超| 亚洲欧美setu| 大香樵伊人网| 精品亚洲国产成人精品| av激情亚洲五月天| 哑洲在线| 国产成人主播| 小少妇| 97人人操人人摸| 蜜臀久久99精品久久久电影| 后入式999| 色哟哟-国产专区| 在线免费观看日韩一区| 中文?日韩?免费?精品| 天海翼久久| 精品乱子一区二区三区99| 99激情| 国产AV精久久| 亚洲国产奇米影视久久| 日本操逼aaaaa| 女优大全 - 91n| 九九九久| 青青草好吊色| 思思久热在线精品66| 亚洲欧美在线观看免费| 亚洲最大成人a毛毛片| 97精品免费| 理论久久婷婷网8| 亚洲综合图片在线| 手机久操欧美综合色码| 久久久久久久久久久999| 97国产色综合| 日韩精品.久久精品.AV女优.天美传媒| 亚洲国产欧美另类自拍| 国产毛片片精品天天看视频| 中国操逼无码| 黄片色区软件| 色小视频蜜乳| 亚洲中文字幕噜噜噜久久久| 中文字幕少妇色 | 舔舔啊| 蜜臀无码一区二区| 精品人妻久久久| 高颜值美女口爆高潮浪叫| 极品少妇久久久| 国产综合色精品在线观看| 97综合国产| 看免费的黄片| 美女国产一区二区久久| 五月婷婷性爱| 蜜桃精久三区| 天天综合站| 天天影视亚洲| 中文字幕乱在线伦视频中文字幕乱码在线| 极品尤物在线观看| 4141514逼喷水三级片| 老女人老91妇女老热女| 日韩精品午夜操呦呦不卡影院| 2020中文字幕在线观看| 亚洲最大成人a毛毛片| 免费看一级a性色生活片久久无| 国产超碰人人操| 蜜桃久久久久久| 嗯嗯啊啊好疼| 97超碰欧美中文字幕| 精品国产乱码久久久久久蜜臀| 看全色黄大色大片免费视频| 人人干人人操人人..com| 第四色奇米影视777| 亚洲砖码砖专无区2023| 欧美综合97www| 99RE在线视频精品,这里只有精品| 久久性爱视频免费看| 97碰| 久久精品高清AV| 色色色网站| 免费看污网站| 久久久96精品| 一起草三级AV电影在线观看| 日韩欧美综合激情| 女生自91网站| 啊v在线观看视频| 天堂69亚洲精品中文字| 性做久久久久久免费观看软件| 花野真衣| 亚洲欧洲激情卡通另类文学四射小说网站 | 欧美日韩电影成人在线| 欧美精品自慰系列寂寞少妇 | 久久亚洲日韩国产欧| 亚洲97在线| 一区不卡在线观看av| 久99视频| 蜜桃狠狠色伊人亚洲综合| 黄页| 18精品一区| 国产一| 欧美亚洲第一页| 午夜理论片在线观看免费| 白嫩嫩一区| 秋霞福利网| 最新国内自拍av免费| 亚洲人妻AV| 欧美日日人人天天| 人妻丰满熟妇一区二区三| 大香交伊人网| 激情文学小说一区二区 | 国产成人 综合亚洲 天堂| 91狠狠色丁香婷婷综合久久精品| 操老熟女AV| 日韩中文字幕国产| 久久精9| 毛片一区二区| 亚洲免费精品一区| 精品亚洲天堂| 涩五月婷婷| 久久久无码精品人妻二区 | 蜜桃在线观看一区二区三区| 91岛国动作片| 欧美性天天影视| 就去色综合| 激情综合网五月婷婷五月天| 操淫穴亚洲五月丁香| 蜜臀久久99精品久久久| 99婷婷| 高清无码学生妹高潮| 国模不卡| 中日992视频| 久久综合资源一区二区| 国产精品伦理| 日韩有码一区三区| 婷婷丁香激情| 91色图片| 乱伦图一区| 国产视频大全| 丁香五月激情五月| 中英熟女操女| 超碰久久草| 91强热人妻| 围产精品一区二区三区视频播放| 制服中出中文人人精品| 黄片在线免费在线观看| 日本综合色图| 日韩欧美蜜桃精品久久中文字幕久久| 激情av| 超碰碰97资源站| 精品久久久亚洲AV成人网站| 床戏久久久av一区二区麻豆| 啊啊啊啊啊好大好舒服想要| 99精品视频在线观看免费| 99re免费视频精品全部| 天天香香欲综合| 青青草日韩无码| 久久久久日本视| 九九热午夜欧亚国产视频| 日日骚AV| 99热色精品| 日本高清一本二本免费不卡| 26uuu性物| 9久精品视频在线观看| 欧美狠狠| 中文乱码99| 成人羞羞视频国产| 性爱综合网| 日韩欧美三级| 麻豆天美国美国产AV| 国产九九九九九九| 全球成人中文在线| 久久久久久久9| 91AV入口| 2019亚洲男人天堂| 久9视频| 九九九九九九九九九国产精品 | 自拍偷拍 日韩无码| 你草精品在线视频| 又粗又长又爽在线观看| 亚洲在钱| 啊啊啊操一区| 丁香六月激情| 春色91| m欧洲一级午老| 亚欧韩av| 秋霞网—男女啪啪亚洲免费体验区 | 99激情| 久久久中文版| 欧美91在线| 国产成人欧美一区二区三区的国产| 久久系列| 人妻夜夜爽天天爽三区麻豆AV网站| 人人九九精| 综合激情五月丁香| 日产欧美电影一区二区三区| www鬼畜国产男人的天堂| 看免费的黄片| 亚洲男人的天堂一区二区| 国产自产自拍| 一级性爱视频免费在线| 黑白配性爱AV成| 日本日皮视频逼| 亚洲色图尤物视频| 欧美熟妇色| 精品久久久一本一道| 神马久久久久久久久久久久| 欧美日韩精品一区二区三区高清| 蜜臀99久久精品久久久懂爱| 91制服丝袜| 亚洲极品| 久久久三区二区一区| 97频视在线| 亚洲夜色在线| 日本天天吊| 国语人妻精彩刺激| 日韩欧美中文| 欧美黄片视频在线观看免费| 5278欧美一区二区三区| 3p国产欧美99热| 天天色播亚洲综合网站| 欧美人妻精品一区二区| 國產尤物AV尤物在線觀看| 国产97视频免费观看| 色久桃花影院在线观看| 在线欧美69V免费观看视频| 精品久久久久久中文字幕三区| 亚洲高清无毛一区二区| 无码天天操| 五月天激情四射| 九九九九九九视频免费| 思思热在线| 美国精品国产精品| 精品综合久久久久久五月天| 日韩无码人妻中字久久三区四区| 国产 v乱码一区二| 老司机福利社视频在线观看| AA级电影三区| 婷婷五月天福利| 欧美丰满熟妇XXXX性ppX人交| 亚拍在线| 九九久久久| 67914亚洲精品| 九九九九88| 另类老少妇| 人人搞人人插人人操| 高清无码久操视频| 丁香五月激情五月| 啊啊啊啊啊啊啊网址在线观看| 欧美熟妇色| 欧美午夜一区二区三区| 久久久穴999| 99热线麻豆 | 美女黑人91神马| 亚洲国产天堂| 去干网最新版| 99精品人人爽| 久久久久亚洲av综合波多野制衣| 丁香六月啪啪| 青青草在线视频美女| 国产乱色国产精品免费视| 日本美女性生活久久久久久久| 日韩精品影视| 成人网站 免费观看| 亚洲色香| 欧美极品性爱天天射| 日日骚 av| 91久久免费视频互動交流| 无码99| 青娱乐91| 在线v中文字幕一区二区三区| 97超碰人操| 亚洲无码?第一页| 日韩97精| 视频不卡中文字幕| 超碰亚洲欧美日韩无| 都市久久精品激情亚洲| 人人操AV| 校园春色第一页| 人人 操人人 操人人| 麻豆天美制片厂网站视频| 9久热| 日本女人久久久| 久久久影院| 亚洲AV色图一区| 无码天堂| 国产乱色国产精品免费视| 1人人看人人摸人人操| 26uuu欧美日韩| 久久久久久久久久精| 日韩中文字幕在线视频观看| 啊v在线观看视频| 超碰在线人妻不卡| 五月丁香社区婷婷日韩欧美精品影院| 久久久久女教师免费一区| 屌逼麻豆| 国产一区二区啪啪视频| 九九九精品| 亚洲影视高清第一页| 亚洲中文制服诱惑| 思思热在线视频在线| 91欧美性| 内射日韩大臀美女| 最新国产精品久久精品| 国产人伦a片信息免费片| 三四中文字幕| 热久久无毒不卡| 九九热视频这里只有精品| 久久九九99| 亚洲天堂无码| www.91理论| 老熟女乱伦一区| 国产在线综合福利网站| 农村妇女精品一二区| 久久久久久久久久久久欧美日| 男人的天堂在线有码| 亚欧国产无码精品在线| 久久久久亚洲Aⅴ无码| 在线色导航| 丁香九月 婷婷| 亚洲一区二区三区春色| 91无遮挡| 久久男人天堂| 91精片| 久久69| 国产亚洲色婷婷99精品91| 国产精品无套内谢| 国产婷婷综合在线观看| 九九精品美女高溯喷水| 96超碰网| 无码国产精品午夜不卡(| 夜夜草网站| 丁香五月婷婷基地| 天天搞在线综合网| 久久青青草原免费视频| 亚洲熟女乱色一区二区三区| 视频二区美腿丝袜制服人妻欧美 | 男人天堂黄片| 精品一区二区亚洲国产| 99综合免费视频| 韩国一区二区精品亚洲| 九一精品牛牛一区二区| 中出20p| av中亚| 偷拍自拍在线视频观看| 国产玖玖| 中国的操老妇女| 亚洲色电影在线| 国产亚洲精品A在线观看下载| 高清无码 国产精品| www.夜夜操| 99热日| 看日韩黄片| 久久‘黄片视频| 天天看人人操屄犊摸阴| av天堂加勒比| 久久AV无码网址| 男人的天堂欧美| 日比av无码| 亚洲色图亚洲无码强奸乱伦| 欧美激情亚洲色图| 超碰97丝袜| 噜噜噜狠狠色综合| 亚洲熟女乱色一区二区三区久久久 | V A在线| 婷婷综合五月| 国产一区二区精品在线视频| 亚洲日本激情| 久久久久久久久久久人妻| 人妻91少妇| 人妻-91porn| 三级精品三级在线观看| 夜夜久久久| 欧美日韩美女精品久草一区二区三区| 国产自制av蜜乳| 天天综合91入口| 丰满人妻一区| 91婷婷伊人狠人| 狠狠中文字幕| 97超碰久久| 性欧美91| 999九九精品| 中文字幕一区二区三区50路| 精品一区二区2| 亚州国产精品乱| 免费观看的黄色的网站| 日韩中文字幕人妻视频| 黄视频免费| 亚洲国产精品无石码久久| 午夜操一视频一区| 中文一区二区| 欧美日韩亚洲国产中文永久天天看| 偷拍亚洲高清图片| 狠狠色一区二区中文字幕| 69人妻精品丰满熟女区| 97人人爱人人做人人乐| 精品人妻一区二区三区-国产| 激情开心五月天| 婷婷导航| 96AV精品| 秋霞男人网| 日韩/97| 91 国产丝袜在线放观看| 久久久久久性爱片| 亚洲色图欧美色图制服丝袜| 天天摸天天插天天日| 激情四射婷婷四五月天| 99精品热| 97免费视频在线观看视频| 97er欧美性| 无码人妻精品一区二区三区九九| 国产精品一区二区麻豆| 78久久| 黄骗免费网站| 欧美自拍偷拍综合图片| 免费又黄又裸乳的视频| 黄色av片三级三级三级免费看| 99精品久久久久久久婷婷| 日韩人妻中文视频| 99无码精品| 91老司机在线视频免费观看| 老司机久久| 日本在线15p| 亚洲综合在线第一页| 国产成人久久精品蜜臀| 91午夜无码| 亚洲熟女av日韩熟女| www.久久| 日本97久久| 玖玖资源视频一区二区三区| 夜色91| 亚洲高清无码在线桃色| 久久乐| 日本不卡二三区| 人乳av| 久久久久久网址| 乱伦日本色图AⅤ| 99超碰色| 九九久久国产精品怡红院| 国产精品乱码久久久久| 日韩黄色片子| 夂久色| 99精品伊人| 综合天天。| 搡老女人911熟妇老熟女| 中文一区在线视频| 日韩 人妻 精品| 中日992视频| 免费成人在线观看91| 色999五月色| 99精品伊人| 唯美清纯 妖精视频| 熟女人妇一区二区三区| 国产精品久久久久久久免牛肉蒲团 | 久视频在线观看| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 99啪啪| 欧美色青| 色婷婷激情| 爱妻综合网| 高清国产无码av| julia高潮后不停追击中出| 熟妇国产免费一区| 一本色道综合久久欧美| 久久黄色网址| 色吧91| 伊人五月天| 男人的天堂日韩| 色屁屁影院www国产| 91人妻丝袜无码| 躁躁躁日日躁2020| 九九黄色网| 毛片99-全集电影手机免费观看完整-B029AV| se吧提供国产乱老熟视频胖女人| 男女打扑克高清网站| 久操视频这里只有精品| 欧美视频在线视频免费va| 人妻熟妇久草在线| www.av在线视频| 中文字幕少妇色 | 亚91亚洲网| 97久久久| 97精品久久久久久久| 中日韩免费看男女操逼大全| 欧美人妻二区三区| 国产1024在线播放| 亚洲美女30b| 亚洲一区二区三区播放在线| 色综合99999| 污色区网站| 99热超碰| 三级色综合| 大香蕉综合在线| 日本Xx性爱| 91麻豆天美国产欧美高潮| 国产亚州高清国产拍精| 色www精品视频在线观看| 啪啪免费| 男人天堂毛片| 天天天乱色综合全| 亚洲无码一区二区三区三州| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | av操操不卡| 国产成年精品高清在线观看91| 97久久久精品| 亚洲最大无码中文字幕网站| 中文日韩欧美熟| 凹凸视频特色日本特黄| 97精| 蜜臀99999| 欧美十八禁网站| 久久久涩| 欧美老妇女内射网址| 久久亚洲AV无码专区国产精品 | 亚洲毛片久久| 亚洲妇色| 六月婷婷综合| 日本成人免费一区二区三区| 国产精品3| 伊人亚洲国产一成人久久精品,久久| 蜜臀99久久精品久久久懂爱| 蜜桃色院一区久久| 天天日天天舔| 高潮的A片激情扒开一区| 91美女视频电影| 91肏屄网| 亚洲一区日韩| 少妇一区二区三区精选| 999精品乱码| 天天内射| 九九九九九九九精品视频| 人人操人人摸人人看人人插| 72av视频| 久久 久久国内精品亚洲| 九色97| 欧美顶级黄色大片免费| 毛片一区二区| 91精品国产长腿丝袜美女| 欧美色图私拍91| 99热色精品| 无码天天操| 日本人妻最新在线中| 无码九九| 一区二区三区色综合| 久久婷五月| 国产浮力影院第1页| 精品无码久久久久久久杏吧| 国产9l 大屁股| 超碰久在线天天做| 亚洲色9| 日本人体九九九九九九| 亚洲欧美日韩综合在线尤物| 欧亚成人| 亚洲视频1区| 亚洲人妻中文在线视频| 日韩亚洲欧美中文字幕| 亚洲久久久| www.成人无码| 日本天天干天天日一区| 久久动漫精品视频这里只有精品| 亚洲av总站| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 狠狠入| 好看的久久不射无码影视影院| 六月婷激情福利天堂69| www.91色综合| 91oumei| 一区二区激情国产熟女| 亚洲午夜AV| 无码色| 精品人妻伦一二三区久久| 久久综合激情| 婷婷五月综合激情| 色情综合网| 91 刺激在线| 欧美综合站| 精品无码久久久| 偷拍欧美综合| 亚洲男人的天堂一区二区| 亭亭丁香激情| 麻豆国产第一| 后入式五六区| 激情小说激情视频| 久久αⅴ| 欧美视频一| 亚洲黄色视频在线观看视频| 日韩美女啪啪一区| 日韩黄色一区二区三区| 国产又爽又黄| 久久久久久久人妻| 老熟女熟妇| 亚洲天堂人人妻| 九色 蝌蚪 熟女自| 91精品91久久久中77777| 久久69| 五码视频在线观看| 高清国产无码av| av天堂精品久久| 国产男女无套视频免费观看| 六月色婷婷| 欧美日韩理论一区| 走光一区92下载| 97伊人超碰| 91久久久亚洲| 国产欧美日韩精品中文| 亚洲欧美大香蕉| 天美精品一区二区三区四区在线观看| 超碰是碰在线观看| 97超碰久久| 国产精品久久久久久久毛片1| 人妻av在线| 一区,二区,三区网站| 中文字幕在线2| 久久加勒比| 国产一级137片内射麻豆| 熟女视频久久| 久久综合女优| 俞拍久久国应视频| 成人免费毛片| 屌色在线97视频| 一区二区视频你懂的| 夜夜嗨一区二区三区直播内容| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 精品久久99| 自拍欧美| 欧美色综合| 国产 日韩 另类 视频一区爱| 超碰激情808| 91色射| 亚洲 自拍偷拍 欧美| 青青操综合网| 女人一区| 免费操逼91| 啊视频在线| 亚洲高清少妇| 老熟女乱伦一区| 亚洲色图大香| 亚洲丨在线| 精品人妻免费观看| 亚洲色吧网| 久久久99999久网站| 黄片视频观看| 亚洲s在线观看| 97视频在线观看网站| 伊人热综合| 青娱乐亚洲热| 日韩大香蕉| 一级黄色影片| 97久久久网站| 成视频在线观看免费看| 制服丝袜第二页| 日本成人A片网站| 天天摸天天碰天天添青青| 丰满人妻-区二区三区| 久久‘黄片视频| 十八禁一区二区无码观看| 东北少妇高潮zzzz| 人妻在线中出视频| 亚洲人成网站7777| av操操不卡| 欧美 精品国产制服第一页| 99国产精品人妻人伦| 欧美日韩97| 中文无码一二三区| 欧美一级A一级a爱片久久| 长长久久曰曰夜夜成人网| 97 国产精品| 午夜男人一级A片7777| 国产丰满熟夫69mpp| 一本色道久久天天射天天干| 78久久久| 国产男人又猛又粗又爽| 欧美丰满少妇交换91欧美精品| 国产伦乱91| 色97欧美| 麻豆亚洲Av成人无码一区精品| 男人的天堂 在线一区| 麻豆天美电影一区二区| 亚洲综合第一页| 五月婷在线| 天天影视色香欲综合网小说| 国产99999| 午夜精品一区二区三区三上悠亚| 中英熟女操女| 午夜后入| 天天天天操| 97超碰人人操人人操| 亚洲色图美腿丝袜| 偷窥自拍A片| 成人性交免费视频| 久久久久久91香蕉国产| 婷婷五月天激情网| 怡红院成人视频| sss视频华人在线| 天天躁日日躁xxxxx| 国产二区三区粉嫩在线| 人妻熟女av国产网站| 欧美91变态| 日本蜜桃| 亚洲午夜免费狠狠干| 国产AV久久野战精品| 少妇无码av专区线| 麻豆一区二区三区在线看 | 国产久久男人天堂| 免费观看国产小粉嫩喷水精品午| 67914在线兔费成人视频| 少妇二级| 亚洲欧美在线观看2021| 中文一区二区三区影院| 人妻天天爽| 婷婷色一区| 亚洲日韩美女中文字幕乱| 91日韩国产欧美亚洲另类精盘州至城都| 成人熟女视频一区二区三区| 人妻乱仑一区二区三区| 五十路一区无码| 精品九九九九九九九九九| 狠狠色婷婷| 顶级丝袜熟女一区二区三区| 操逼操逼操| 97在线播放| 诱惑人妻欧美一区在线播放| 亚洲激情综合| 一级久久久久久久久久久| 久操com| 免费av在线播放二区| 97在线播放 | 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 风韵犹存大大大大香蕉| 嗯啊不要啊啊在线观看视频| 国产无马av| 亚洲人妻中文高清| 秋霞一级A片黄色视频| 91美女小视频| 欧美BT 亚洲色图| 久久少妇人妻| 久久国模av| 91jk色拍| 亚洲综合网图| 中文字幕一区二区三区蜜臀| 久久久婷婷婷| 在线看免费无码AV天堂的| 淫荡少妇免费| 在线岛| 无遮挡又黄又刺激的视频| 少妇熟女一区二区三区| 精品国产乱码久久久久久久| 校园春色 亚洲| 超碰 欧美| 97在线观看免费| 色老久久| 九七人妻在线| 亚洲骚男同com| 羞答答AV中文字| 人妻少妇久久| 女人天堂网| 夜夜做夜夜爽精品视频| 伊人在线大香蕉视频久久| 美女丝袜激情小说| 亚洲精品不卡一二三区| 亚洲精品97中文字幕| 欧美999999| 国产精品在线一区二区| 久久中文字幕女同性恋一区| 欧洲一区二区三区四区在线观看| 我想要啊 啊 啊| 欧洲站一级二级三级h| 九九九九九九九| 玖玖综合视频| 九久久九九久视频| 欧美日韩亚洲天堂| 九九久久玖玖| 黑人精品XXX一区一二区| 国产又色又粗又黄又爽| 插穴性爱视频在线观看| 久久肏大逼| 伊人AAA| 热久久91婷婷| 伊人久久久日韩一区| 亚洲黄a三级三级三级看三级| 亚洲综合伊人| 超碰97国产欧美| 人人操人人摸人人骑| 黄色视频60分钟| 国产树林里野战在线看| 开心激情婷婷| 精品十三区| 亚洲情色综合网| 青娱乐啪啪视频| 爱逼综合| 国产日韩在线播放av| 久久AV无码网址| 日本在线一二| 磁力99AV| 天天碰久久入| AVE乱伦| 黄色大香焦1级‘′‘| 亚洲黑丝在线| 午夜欧美神马久久久久| 性欧美999| 黄视频免费| 国产精品视频精品一二| 97超级欧美| 亚洲Av诱惑| 亚洲AV成人无码一二三久久| 国产超碰| 亚洲揄拍网| 外国91| 国产区91柔拿会所技师| 欧亚洲精品有视频| 亭亭在线资源| 无码久久国产| 99色在线| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 巨爆乳肉感一区二区三区竹菊影视 | 夜夜嗨AV蜜臀av| 91男同| 大学生美女口爆| 五月丁香啪| 日日噜噜夜夜久久亚洲一区二区 | 91欧美www| 欧 美 自 拍 偷 拍| 中文字幕一区av| 色综合99999| rion磁力链接| 秋霞蝌科网日本一区| 麻豆黄四叶草网站| 熟妇视频一区二区三区在线| 狠狠中文字幕| 色女99一级片在线观看| 日本色日夜干| 婷婷五月天激情四射| 国产欧洲精品亚洲午夜拍精品| 韩国三级一线观看久| 五月丁香色综合| 亚洲九九视频| 福利在线黄片| 夜夜騷av、一區二區| 欧美黄色手机在线观看| 久久久久久久久久久久久久久性生活视频| 日日噜噜夜夜久久亚洲一区二区 | 在线播放成人高清免费视频| 久久天天性久久伊人| 蜜臀久久久99久久久久 | 欧洲一级性爱视频在线观看| 国产乱码精品久久久久久| 丝袜综合网| 色色操| 欧美高清16| 综合熟女| 99精品无码| 91GD.COM| 九久久精| 加勒比大香蕉视频在线| 尤物视频偷拍免费| 人人妻人人狠人人| 国产AV线| 一区二区三区机械有限公司| 91精品国| 婷婷色在线| 欧美后入式| www.久久99| 蜜桃臀一区二区aV| 天天干人妇| 日韩性色| 欧美黑人性猛交91| 极品综合| 后入福利视频| 亚洲日韩精品在线播放| 天天舔日美女视频| 岛国精品视频在线观看 | 久久美女福利是上海美女| 久久精品人妻一区二区三区| 国产精品电影| 97在线免费看视频| 一区二区三区一亚洲中文字幕、综合区灬 | 乱伦1色页| 久久久久ab| 亚洲美女自拍偷拍视频| 青青草大香蕉视频| 嫩草 人人网精品| 婷婷去俺也去六月色| 国产久9| 日本一二区免费| 在线a v| 日日躁天天躁狠狠躁| 蜜桃精品一区二区三区ww| 黄色激情电影在线观看| 超碰综合97在线| 校园春色之综合网| 中文字幕中文字幕一区二区| 女人香蕉久久毛毛片精品| 亚洲无套久久嗯嗯| 成人a大片在线观看| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 婷婷综合五月| 亚洲91色| 美女让帅哥通她小鸡鸡| 成人资源中文字幕在线观看天天| 午夜视频久久久久一区| 亚91网| 97超碰亚洲| 日韩不卡毛片Av免费高清| 国产农村妇女精品| 猛猛干| 久久久久久久97| 精品成人动漫一区二区| 国产成人精品日本亚洲语言| 精品久久久久黄少妇| 嗯啊不要啊在线 | 99精品免费| aaa亚无码专区| 蜜臀av中文字幕| 在线综合 亚洲 欧美中文字幕| 国产色呦呦| 91肉片| 精品久久久一本一道| av无码精品久久久久| 超碰在线人妻中文字幕| 亚洲欧洲日韩中文字幕一区| 欧美白嫩女HD| 免费观看有码高清视频| 欧美v亚洲v日韩v最新在线二区| 操国产逼| 香蕉大久久久| 手机久操欧美综合色码| 在线啊啊啊啊| 艹少妇网站| 欧美v日韩v亚洲v最新在线| 大香蕉2017| 久久久久ab| 动漫片子网站3黄| 九九内射在线| 99热伊人| 国产吞精a级片激情电影| 久久人人爽爽人人爽人人片αV| 黄片www视频免费| 精品久久久久久久| chaopen97久久| 亚州九九九精品视频| 春色校园综合网| 欧美熟妇视频| 亚洲图片 91| 久久97| 99热99在线| 色色激情五月天| 一区在线国产播放| 中文字幕狠狠玩| 国产高清在线观看欧美| 天天干天天操天天操夜夜操天天操| 亚洲在饯| 老鸭窝成人免费毛片视频| 一本色道人妻久久| 秋霞Av理论一级在线| 精品无码一区二区三区| 无码国产Av| 免费中文在线| 2010男人的天堂| 精产国品一区二三产品| 日韩中文字幕宗合在线| 精品人妻久久久久一区二区三区| 欧美日韩另类激情图片| J?P?NESEHD熟女熟妇伦| 欧美成人A天堂片在线观看| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 伊人午夜福利视频| 欧洲亚洲综合| 亚洲性少妇| 风月影院男女十八禁| 东北老女人的激情视频| 中文字幕超碰CAO| 国产SV一线| 老熟妇一区二区三区啪啪| 97超碰这里只有精品| 无码精品啪啪啪一区二区三区三州| 亚春色色| 日韩成年人性爱视频| 一个色导综合| 三级三久久线久久99久目本WW| 日韩美女久久一区二区三区| 久久视频,这里只有精品| 久久久久少妇| 人妻精品一区二区在线| 国产性感骚丝袜在线| 久久久91福利姬| 欧美不卡五十路| 亚洲熟女av日韩熟女| 久久这里精品国产99丫e6| 欧美色图片欧美色图| 91精品国产91久久福利| 婷婷五月天av| 欧美日韩亚洲五月天婷婷| 天天射夜夜骑| 亚洲最新a在线观看| av在线浏览| 精品玖九九久| 精品亚洲国产成人精品| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 97自拍一区| 亚洲国产精品无石码久久| 欧美日韩在线国产在线| 免費人妻夜夜爽天天爽爽一区| 一本色道久久综合狠狠操| 性爱网站一区二区| 黑操B| 婷婷丁香人妻| 欧美一级黄色18片免费看| 欧美白嫩女HD| 国产午夜在线观看| 色婷婷六月| yazhououmeizongya| 亚洲av综合色| 精久久久91| 人人摸人人入| 少妇一线天久久久久久| 久久成人东京热人妻| 亞洲久久直播| 久久夜夜夜| 极品欧美一区二区三区| 美女人妻色网站| 老熟女综合| 91色情黑丝搞鸡在线观看一区二区三区三州| 人人操人人射人人干| 三级AV入口| 久久超碰免费的| 免费看片黄| 白丝AV网站| 99精品国产户外露出| 亚洲 中文 女同| 国产毛片片精品天天看视频 | 91东北熟女| 中文字暮97| 91精片| 成人影 天天操 亚洲| 天美精品原创av片国产| 青青青国产| 秋霞一集毛片观看| 99综合自拍| 亚洲精品三区在线观看| 动漫av中文| 国产亲戚伦亲在线| 99热线麻豆| 这里只有精品视频| 囯产精品久久久久久久久久二区三区| 91校园春色长篇| 亚洲情欲| 色婷婷综合久久久久中文一区二区| 国模无码人体一区二区三| 极品后入免费视频| 风流老熟女一区二区三区l| 91网站在线播放| 乱老女人一区二区视频| 九九操久久国产免费视频| 日本天天操| 秋霞 色色| 五十路熟女工口| 国产成人bd在线观看| 中文字幕一区二区三区四五区| 99色视频| 亚洲在线网站| 欧美 亚洲 综合 制服 另类| 唐山老熟妇露脸啪啪叫| 色区97| 超碰97玖玖爱| 欧美成人黄网色网站| 91丝袜| www.高清无码诱惑一区.com| 成人免费福利在线观看| 欧美熟妇精品黑人巨大91| 台湾佬中文娱乐自偷自拍| 亚洲欧美自拍偷拍| 精品无码少妇| 91欧美偷拍| 色青青久久影视| 亚洲欧美人妻| 啊啊啊啊啊好舒服视频| 人妻AV在线| 国产精品福利视频播放| 2020天天色综合| 四季AV综合网址| 在线观看国产黄色| 日韩无码极品| 婷婷激情五月综合| 久久久久久久九九九九九九| 国产区性爱在线视频秋霞豆 | 自拍欧美| 人妻少妇色综合| 最新三级网址| 蜜臀99久久| 蜜桃臀一区二区三区久久| 欧美三级一级| 免费黄色片子| 国产成年女人免费视频播放a| 风韵犹存大大大大香蕉| 伊人一区二区三区| 亚洲男人天堂Av| 国产69精品久久久久99尤物| 亚洲精品久久久久毛片A片拉屎 | 少妇淫妇久久久久久久| 国产一区二区久久| 在现视频女上位好爽| 国产成人在线观看综合| 国产传媒午夜理伦精品| 综合久久2017| 大但人体久久久久| 蜜臀久久在线视频| 嗯啊啊啊轻点视频 | 欧美一级二级三级| 欧美青青草视频| 国产男女无套97| 欧美另类色图片| **一级毛片国产| 乱欲一区二区| 中文字幕一区二区日韩网| 另类图片综合| 91精品人妻一区二区三区蜜桃| 欧美日韩亚洲国产中文永久天天看| 亚洲精品欧洲精品| 爆乳免费黄网站| 九九九九久久久| 婷婷色婷婷| 亚洲乱熟女一区二区三区大香蕉| 精品国产丝袜一区二区三区乱码| 欧美一级AAAAAAA| 人人模人人看| 张柏芝国产一区在线观看| 亚洲色电影在线| 婷婷国产精品一区二区| 91狠狠狠| 亚洲欧美校园| 青青草原香蕉日本Ap| 日本高清一本二本免费不卡| 国产精品国产| 久操av在线| 在线电影亚洲色图| 麻豆a'v电影| 欧美日日人人天天| 国产97综合| 欧美性第1页| 久久久极品| 亚洲 在线| 91亚洲网| 日韩性爱一级片| 中国操逼无码| 韩国手机不卡无码三级视频| 免费A V在线播放| 97激情97激情| 欧美精品双插| 乱老熟女一区二区三区| 日韩欧美被操黄免费观看| 久久99精品国产| 久久久精品一区二区| 人妻少妇久久| 97欧美资源| 激情小说亚洲| 亚洲国产91精品一区二区久久| 中文字幕一区二区日韩网| 乳欲人妻办公室奶水|