亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

基于Spark的混合推薦系統(tǒng)實(shí)戰(zhàn):從協(xié)同過(guò)濾到實(shí)時(shí)推薦

基于Spark的混合推薦系統(tǒng)實(shí)戰(zhàn):從協(xié)同過(guò)濾到實(shí)時(shí)推薦 簡(jiǎn)介這是一份基于Spark的電影推薦系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的完整課題資料面向大數(shù)據(jù)、推薦系統(tǒng)方向的畢業(yè)設(shè)計(jì)與課程設(shè)計(jì)人員也可供對(duì)協(xié)同過(guò)濾、內(nèi)容推薦算法感興趣的開發(fā)者參考。文檔以論文形式系統(tǒng)梳理了課題背景、國(guó)內(nèi)外研究現(xiàn)狀、Spark與MongoDB等關(guān)鍵技術(shù)并重點(diǎn)介紹了基于人口統(tǒng)計(jì)學(xué)、基于內(nèi)容、基于協(xié)同過(guò)濾三類推薦算法的原理與設(shè)計(jì)思路。系統(tǒng)分析部分涵蓋可行性與功能需求設(shè)計(jì)部分細(xì)化各推薦算法流程實(shí)現(xiàn)部分展示用戶登錄注冊(cè)、個(gè)性化推薦、電影搜索、用戶評(píng)分等核心功能測(cè)試部分給出功能與性能驗(yàn)證結(jié)果目錄結(jié)構(gòu)從緒論到致謝完整清晰可直接作為相關(guān)課題的參考藍(lán)本。資源包內(nèi)僅含單個(gè)DOCX文檔大小約7.46MB內(nèi)容以論文正文為主共一個(gè)文件便于查閱和編輯。目前已有207人學(xué)習(xí)下載適合需要快速掌握電影推薦系統(tǒng)整體架構(gòu)與研究思路的學(xué)生或開發(fā)者。1. 這個(gè)項(xiàng)目不只是論文一套能從登錄跑到推薦的完整系統(tǒng)電影推薦系統(tǒng)這類課題網(wǎng)上源碼不少但多數(shù)是單機(jī)跑個(gè) Python 腳本調(diào)一下 surprise 庫(kù)就完事談不上“系統(tǒng)”。這份資源不一樣——它是一份帶完整論文的工程實(shí)現(xiàn)后端用 Spark 做分布式計(jì)算MongoDB 存業(yè)務(wù)數(shù)據(jù)Redis 做緩存Elasticsearch 參與搜索前端還有 AngularJS 頁(yè)面。換句話說(shuō)它不是 toy demo而是一條能沿著“用戶登錄 → 評(píng)分 → 離線統(tǒng)計(jì) → 實(shí)時(shí)推薦 → 詳情頁(yè)相似推薦”跑通的完整鏈路。我拆這份項(xiàng)目時(shí)最大的感受是它的核心不在協(xié)同過(guò)濾那幾行 ALS 代碼而在“三種推薦算法怎么分工”。基于人口統(tǒng)計(jì)學(xué)的離線推薦管冷啟動(dòng)和熱門榜基于內(nèi)容的實(shí)時(shí)推薦管用戶當(dāng)下行為協(xié)同過(guò)濾管個(gè)性化。單一算法都有各自的坑混合起來(lái)才是個(gè)能用的推薦系統(tǒng)。這套設(shè)計(jì)思路比代碼本身更值得讀。適合讀這份資源的人有三類做大數(shù)據(jù)課程設(shè)計(jì)或畢業(yè)設(shè)計(jì)的學(xué)生想把 Spark 推薦從“會(huì)調(diào) API”推進(jìn)到“能搭完整服務(wù)”的后端開發(fā)以及想找一個(gè)可復(fù)現(xiàn)的推薦系統(tǒng)基線工程、準(zhǔn)備加功能的算法工程師。下文我會(huì)把技術(shù)選型、模塊結(jié)構(gòu)、核心實(shí)現(xiàn)和運(yùn)行步驟一層層拆開最后給出我的改造建議。2. 整體架構(gòu)拆解Spark 計(jì)算、MongoDB 存儲(chǔ)、三套算法分工2.1 技術(shù)棧全景與數(shù)據(jù)流向這套系統(tǒng)的技術(shù)選型圍繞一個(gè)核心約束單機(jī)環(huán)境下模擬大數(shù)據(jù)處理流程同時(shí)保證每一層都有真實(shí)組件在跑。先看全景計(jì)算引擎Spark負(fù)責(zé)離線批量統(tǒng)計(jì)和實(shí)時(shí)流處理存儲(chǔ)層MongoDB 存用戶、評(píng)分、電影和推薦結(jié)果Redis 緩存熱點(diǎn)數(shù)據(jù)Elasticsearch 做電影搜索后端Spring Maven提供登錄、評(píng)分、推薦結(jié)果的 REST 接口前端AngularJS 2負(fù)責(zé)頁(yè)面渲染和交互集群形態(tài)偽分布式1 個(gè) Master 3 個(gè) Worker 用虛擬機(jī)模擬數(shù)據(jù)流向是這樣的用戶在前端頁(yè)面產(chǎn)生評(píng)分、點(diǎn)擊、搜索行為這些行為寫入 MongoDB 的業(yè)務(wù)表離線推薦任務(wù)用 Spark SQL 周期性從 MongoDB 讀取評(píng)分表跑統(tǒng)計(jì)和模型訓(xùn)練把結(jié)果寫回 MongoDB 的推薦結(jié)果表實(shí)時(shí)推薦則通過(guò) Spark Streaming 消費(fèi)行為流結(jié)合用戶最近的評(píng)分記錄做基于內(nèi)容的相似推薦前端通過(guò) Spring 后端接口讀取 MongoDB 里的推薦結(jié)果展示給用戶。這里有一個(gè)值得注意的設(shè)計(jì)決定MongoDB 同時(shí)承擔(dān)“業(yè)務(wù)數(shù)據(jù)庫(kù)”和“推薦結(jié)果數(shù)據(jù)庫(kù)”兩個(gè)角色。好的一面是技術(shù)棧干凈不用在 HBase 和 MySQL 之間做數(shù)據(jù)同步壞的一面是推薦結(jié)果表要按用戶維度設(shè)計(jì)好索引否則前端高頻讀取時(shí)會(huì)有性能壓力。實(shí)際工程里我會(huì)把推薦結(jié)果再拷一層到 Redis這個(gè)后面改造章節(jié)細(xì)說(shuō)。2.2 離線推薦模塊基于人口統(tǒng)計(jì)學(xué)的四類統(tǒng)計(jì)任務(wù)離線推薦是這套系統(tǒng)的“底座”它解決的核心問(wèn)題是冷啟動(dòng)新用戶沒(méi)有任何行為記錄時(shí)推薦什么答案是給所有人推一樣的榜單——?dú)v史熱門、近期熱門、高分電影、各類型 Top10。四個(gè)統(tǒng)計(jì)任務(wù)分別這樣設(shè)計(jì)歷史熱門影片的統(tǒng)計(jì)直接用 Spark SQL 從 MongoDB 的 ratings 表讀取評(píng)分記錄按電影 ID 分組統(tǒng)計(jì)評(píng)分人數(shù)取數(shù)量最多的前 N 部。這個(gè)邏輯簡(jiǎn)單粗暴但“評(píng)分人數(shù)多 熱門”這個(gè)假設(shè)在大多數(shù)場(chǎng)景下成立。近期熱門影片的統(tǒng)計(jì)在歷史熱門的基礎(chǔ)上加了時(shí)間窗口。實(shí)現(xiàn)方式是定義一個(gè) UDF把評(píng)分時(shí)間戳轉(zhuǎn)換成“是否在近一個(gè)月內(nèi)”的布爾標(biāo)記然后只統(tǒng)計(jì)窗口內(nèi)的評(píng)分。這個(gè) UDF 是理解 Spark SQL 自定義函數(shù)的好例子。電影平均評(píng)分的統(tǒng)計(jì)按電影 ID 聚合所有評(píng)分計(jì)算平均值寫入 AverageMovies 數(shù)據(jù)集。這個(gè)結(jié)果會(huì)用在詳情頁(yè)展示電影得分也會(huì)作為離線推薦的一個(gè)排序因子。各級(jí)別影片 Top10 的統(tǒng)計(jì)這是最復(fù)雜的一個(gè)。電影的 genres 字段是“動(dòng)作|冒險(xiǎn)|科幻”這種按豎線分隔的字符串需要先用 UDF 按|切分成數(shù)組再用explode展開成多行最后按每個(gè)類別分別計(jì)算評(píng)分 Top10。核心代碼見下一章。2.3 實(shí)時(shí)推薦與詳情頁(yè)推薦基于內(nèi)容的相似匹配實(shí)時(shí)推薦模塊用的是 Spark Streaming它接收用戶的行為流比如剛給某部電影打了高分然后做兩件事一是把行為寫入 MongoDB 作為后續(xù)離線訓(xùn)練的輸入二是立刻基于這部電影的內(nèi)容標(biāo)簽找相似電影推給用戶。這里的“相似”不是協(xié)同過(guò)濾算出來(lái)的用戶相似而是電影本身屬性類型、導(dǎo)演、主演的相似度用的是基于內(nèi)容的推薦算法。詳情頁(yè)推薦是實(shí)時(shí)推薦的“懶加載版本”用戶點(diǎn)進(jìn)某部電影詳情頁(yè)時(shí)后端才去計(jì)算這部電影的相似電影并返回。好處是不需要預(yù)先為每個(gè)用戶算好結(jié)果存儲(chǔ)開銷小壞處是首次訪問(wèn)詳情頁(yè)會(huì)有計(jì)算延遲。在 Spark 環(huán)境下這個(gè)計(jì)算可以做成一次性的批處理任務(wù)把每部電影的相似 Top10 預(yù)先算好存起來(lái)而不是實(shí)時(shí)算。2.4 協(xié)同過(guò)濾模塊ALS 模型的定位論文里提到協(xié)同過(guò)濾算法也提到 Spark MLlib 里的 ALS。在這套系統(tǒng)里協(xié)同過(guò)濾不是唯一的推薦來(lái)源而是作為離線個(gè)性化推薦的補(bǔ)充。它的任務(wù)是從歷史的“用戶-電影-評(píng)分”矩陣中學(xué)習(xí)兩個(gè)隱因子矩陣——用戶特征矩陣和電影特征矩陣然后用矩陣乘法預(yù)測(cè)用戶對(duì)未看過(guò)電影的評(píng)分。但 ALS 有兩個(gè)天然痛點(diǎn)論文里也明確說(shuō)了數(shù)據(jù)稀疏和冷啟動(dòng)。冷啟動(dòng)已經(jīng)靠人口統(tǒng)計(jì)學(xué)推薦兜底了數(shù)據(jù)稀疏則依賴我們輸入 ALS 的數(shù)據(jù)質(zhì)量。常見做法是把評(píng)分人數(shù)少于閾值的電影過(guò)濾掉再把評(píng)分矩陣做歸一化讓模型更容易收斂。這塊我在改造章節(jié)會(huì)給出具體參數(shù)建議。3. 核心實(shí)現(xiàn)逐段拆解從 MongoDB 讀取到推薦結(jié)果落地3.1 Spark SQL 讀取 MongoDB連接器與 DataFrame離線推薦的第一步是把 MongoDB 中的數(shù)據(jù)加載成 Spark DataFrame。項(xiàng)目里沒(méi)有用自定義讀取器而是直接用了官方 MongoDB Spark Connector。加載評(píng)分表和電影表的寫法如下import org.apache.spark.sql.SparkSession val spark SparkSession.builder() .appName(OfflineRecommender) .master(local[*]) // 偽分布式環(huán)境下這里也可以是 spark://hadoop102:7077 .config(spark.mongodb.input.uri, mongodb://hadoop102:27017/movie.ratings) .config(spark.mongodb.output.uri, mongodb://hadoop102:27017/movie.result) .getOrCreate() val ratingsDF spark.read.format(mongo) .option(uri, mongodb://hadoop102:27017/movie.ratings) .load() .select(uid, mid, score, timestamp) ratingsDF.show(5)注意select里只取了四個(gè)字段uid用戶 ID、mid電影 ID、score評(píng)分、timestamp評(píng)分時(shí)間戳。之所以要顯式限定字段是因?yàn)?MongoDB 的文檔結(jié)構(gòu)往往比關(guān)系表松散early 篩選能顯著減少 Spark 在 shuffle 階段的數(shù)據(jù)量。偽分布式環(huán)境下資源本來(lái)就緊張這個(gè)習(xí)慣能幫你少踩不少 OOM 的坑。3.2 UDF 實(shí)現(xiàn)電影類別切分與近期熱門統(tǒng)計(jì)基于人口統(tǒng)計(jì)學(xué)的推薦里兩個(gè)核心統(tǒng)計(jì)邏輯都需要自定義 UDF。第一個(gè)是把電影的 genres 字符串切分成數(shù)組第二個(gè)是判斷評(píng)分時(shí)間是否落在近一個(gè)月窗口內(nèi)。這段代碼集中展示 UDF 的注冊(cè)和用法import org.apache.spark.sql.functions._ import org.apache.spark.sql.expressions.UserDefinedFunction // 按 | 切分電影類別如 Action|Adventure|Sci-Fi - [Action, Adventure, Sci-Fi] val splitGenres: UserDefinedFunction udf((genres: String) { if (genres null || genres.trim.isEmpty) Array.empty[String] else genres.split(\\|).map(_.trim) }) // 判斷評(píng)分時(shí)間是否在近30天內(nèi) val isRecent: UserDefinedFunction udf((ts: Long) { val thirtyDaysAgo System.currentTimeMillis() - 30L * 24 * 3600 * 1000 ts thirtyDaysAgo }) // 各類型電影 Top10 統(tǒng)計(jì) val genreTopMovies ratingsDF .join(moviesDF, ratingsDF(mid) moviesDF(mid)) .withColumn(genre, explode(splitGenres(moviesDF(genres)))) .groupBy(genre, mid) .agg(avg(score).as(avg_score), count(mid).as(score_count)) .withColumn(rank, row_number().over(Window.partitionBy(genre).orderBy(desc(avg_score), desc(score_count)))) .filter(col(rank) 10) .drop(rank)genreTopMovies這段邏輯的關(guān)鍵點(diǎn)在explode它把“一部電影屬于三個(gè)類別”這一行數(shù)據(jù)展開成三行每個(gè)類別一行這樣后續(xù) groupBy 才能按類別獨(dú)立排序。窗口函數(shù)row_number() over partitionBy負(fù)責(zé)在每個(gè)類別內(nèi)部取評(píng)分最高的 10 部。如果你的數(shù)據(jù)里有一些只有一兩人評(píng)分的電影建議在agg之后加一個(gè)過(guò)濾條件只保留score_count 10的影片否則“平均分第一名”容易被單條高分評(píng)價(jià)刷上去。近期熱門統(tǒng)計(jì)更簡(jiǎn)單對(duì) ratings 表用 UDF 過(guò)濾近一個(gè)月的評(píng)分然后按 mid 聚合計(jì)數(shù)取 Top N 寫入 RateMoreRecentlyMovies 集合。3.3 ALS 協(xié)同過(guò)濾訓(xùn)練與個(gè)性化推薦ALS 是 Spark MLlib 里最成熟的協(xié)同過(guò)濾實(shí)現(xiàn)。代碼不長(zhǎng)但調(diào)參直接影響推薦質(zhì)量import org.apache.spark.ml.recommendation.ALS import org.apache.spark.ml.evaluation.RegressionEvaluator // 劃分訓(xùn)練集和測(cè)試集測(cè)試集用于評(píng)估模型誤差 val Array(training, test) ratingsDF.randomSplit(Array(0.8, 0.2)) val als new ALS() .setRank(20) // 隱因子數(shù)量越大表達(dá)能力越強(qiáng)但過(guò)擬合風(fēng)險(xiǎn)也越高 .setMaxIter(10) // 迭代次數(shù)日志里會(huì)顯示每次迭代的 loss .setRegParam(0.1) // 正則化參數(shù)控制過(guò)擬合 .setUserCol(uid) .setItemCol(mid) .setRatingCol(score) .setColdStartStrategy(drop) // 預(yù)測(cè)時(shí)遇到未見過(guò)的用戶/電影直接丟棄而非報(bào)錯(cuò) val model als.fit(training) // 為每個(gè)用戶生成 Top20 推薦 val userRecs model.recommendForAllUsers(20) userRecs.write.mode(overwrite).format(mongo) .option(uri, mongodb://hadoop102:27017/movie.UserRecs) .save()setColdStartStrategy(drop)是必須強(qiáng)調(diào)的一個(gè)配置。ALS 模型在預(yù)測(cè)時(shí)如果遇到訓(xùn)練集里沒(méi)出現(xiàn)過(guò)的用戶或電影默認(rèn)會(huì)拋異常。線上系統(tǒng)里每天都有新用戶新電影所以必須設(shè)置成drop或nan丟棄無(wú)法預(yù)測(cè)的條目而不是讓整個(gè)批次失敗。rank 參數(shù)常見取值范圍是 10 到 50regParam 是 0.01 到 0.1調(diào)參時(shí)優(yōu)先觀察測(cè)試集上的 RMSE均方根誤差。3.4 基于內(nèi)容的相似度計(jì)算標(biāo)簽向量與余弦相似度基于內(nèi)容的推薦核心是把電影轉(zhuǎn)成向量然后算向量相似度。這里用的是最簡(jiǎn)單的標(biāo)簽映射法把電影的 genres、主演、導(dǎo)演拼接成文本分詞后映射成 TF-IDF 向量再算兩兩之間的余弦相似度。import org.apache.spark.ml.feature.{HashingTF, IDF, Tokenizer} import org.apache.spark.ml.linalg.SparseVector // 構(gòu)造電影內(nèi)容描述列 val movieContent moviesDF .withColumn(content, concat_ws( , col(genres), col(actors), col(directors))) // 分詞 TF-IDF得到每部電影的特征向量 val tokenizer new Tokenizer().setInputCol(content).setOutputCol(words) val hashingTF new HashingTF().setInputCol(words).setOutputCol(rawFeatures).setNumFeatures(1000) val idf new IDF().setInputCol(rawFeatures).setOutputCol(features) val pipeline new Pipeline().setStages(Array(tokenizer, hashingTF, idf)) val featureModel pipeline.fit(movieContent) val movieFeatures featureModel.transform(movieContent) movieFeatures.select(mid, features).show(5)這里使用了HashingTF而不是CountVectorizer主要考慮是 HashingTF 不需要預(yù)先構(gòu)建詞典適合跑批任務(wù)缺點(diǎn)是哈希碰撞會(huì)引入噪聲setNumFeatures設(shè)得越大碰撞概率越低。算相似度時(shí)對(duì)每個(gè)電影向量和其余所有向量做點(diǎn)積并歸一化就能得到余弦相似度。如果電影數(shù)量很大更聰明的做法是先用 ALS 電影因子向量代替 TF-IDF 向量因?yàn)?ALS 訓(xùn)練出的隱因子已經(jīng)隱含了“同類型電影向量接近”的特性。3.5 后端接口與前端調(diào)用的銜接推薦結(jié)果算完后展示層還需要后端接口。Spring 后端提供了四類核心接口登錄注冊(cè)、獲取首頁(yè)推薦、詳情頁(yè)相似推薦、提交評(píng)分。前端 AngularJS 通過(guò) HTTP 調(diào)用這些接口渲染推薦列表RestController RequestMapping(/api/recommend) public class RecommendController { Autowired private MongoTemplate mongoTemplate; // 首頁(yè)推薦讀取離線推薦表按用戶返回混合結(jié)果 GetMapping(/home/{uid}) public ListRecommendation home(PathVariable String uid) { Query query new Query(Criteria.where(uid).is(uid)); ListUserRecs userRecs mongoTemplate.find(query, UserRecs.class, UserRecs); return userRecs.stream() .flatMap(rec - rec.getRecs().stream()) .sorted((a, b) - b.getScore().compareTo(a.getScore())) .limit(20) .collect(Collectors.toList()); } // 提交評(píng)分寫入 MongoDB同時(shí)作為實(shí)時(shí)推薦的觸發(fā)信號(hào) PostMapping(/rate) public Result rate(RequestBody RatingRequest request) { mongoTemplate.save(request, ratings); return Result.success(); } }前端接到recommendations數(shù)組后按分?jǐn)?shù)從高到低渲染成卡片列表。這個(gè)接口的寫法比較直白但它把分層關(guān)系講清楚了前端只認(rèn) userId不關(guān)心推薦結(jié)果的來(lái)源是離線統(tǒng)計(jì)還是協(xié)同過(guò)濾后端通過(guò)對(duì)UserRecs聚合實(shí)現(xiàn)多路推薦融合。如果你想加一路“熱門兜底”在接口里把GenresTopMovies也讀出來(lái)混進(jìn)去就行。4. 環(huán)境搭建與程序運(yùn)行偽分布式 Spark 集群怎么跑起來(lái)4.1 虛擬機(jī)模擬四節(jié)點(diǎn) Spark 集群論文的實(shí)際運(yùn)行環(huán)境是單機(jī)偽分布式一臺(tái)物理機(jī)上用 VMware 開三臺(tái) CentOS 虛擬機(jī)搭一個(gè)四節(jié)點(diǎn) Spark 集群1 Master 3 Worker三臺(tái)機(jī)器的主機(jī)名分別設(shè)計(jì)為 hadoop102、hadoop103、hadoop104。之所以從 hadoop102 開始編號(hào)是為了給 Namenode 留出 101 的位置如果是生產(chǎn)環(huán)境你還會(huì)加一個(gè) 105 做備用 Master。搭建步驟如下在三臺(tái)虛擬機(jī)上分別安裝 JDK 并配置JAVA_HOME配置 SSH 免密登錄三臺(tái)機(jī)器兩兩互信修改/etc/hosts把三個(gè)主機(jī)名映射到固定 IP在 Spark 的conf/slaves文件里填寫三個(gè) Worker 主機(jī)名修改spark-env.sh指定SPARK_MASTER_HOSThadoop102、SPARK_MASTER_PORT7077完成后在 Master 節(jié)點(diǎn)執(zhí)行start-all.sh瀏覽器訪問(wèn)hadoop102:8080Worker 列表里能看到三個(gè)節(jié)點(diǎn)說(shuō)明集群搭好了。4.2 MongoDB 集合設(shè)計(jì)與啟動(dòng)MongoDB 在 Windows 本機(jī)運(yùn)行負(fù)責(zé)存業(yè)務(wù)表和推薦結(jié)果表。數(shù)據(jù)庫(kù)里設(shè)計(jì)了兩類集合一類是原始數(shù)據(jù)——User用戶、Ratings評(píng)分、Movies電影另一類是推薦結(jié)果——AverageMovies、GenresTopMovies、RateMoreMovies、RateMoreRecentlyMovies、UserRecs。啟動(dòng)方式最簡(jiǎn)單命令行直接跑mongod --dbpath /data/db --port 27017 --bind_ip 0.0.0.0要注意的是--bind_ip 0.0.0.0否則虛擬機(jī)里的 Spark 應(yīng)用連不上 Windows 宿主機(jī)上的 MongoDB。這是偽分布式環(huán)境里的常見坑后面避坑章節(jié)還會(huì)細(xì)說(shuō)。業(yè)務(wù)表創(chuàng)建之后用mongoimport把 ratings.dat 和 movies.dat 導(dǎo)入即可。4.3 Redis 與 Elasticsearch 配置Redis 在 Linux 虛擬機(jī)里運(yùn)行主要給實(shí)時(shí)推薦模塊做緩存緩存用戶最近評(píng)分記錄和熱門推薦結(jié)果。配置項(xiàng)只需要改兩處bind 0.0.0.0允許遠(yuǎn)程訪問(wèn)maxmemory設(shè)一個(gè)合理上限如 2GB避免緩存無(wú)限增長(zhǎng)把內(nèi)存吃光。Elasticsearch 的作用是搜索。電影搜索功能沒(méi)有走 MongoDB 的模糊查詢而是把電影標(biāo)題、類別、主演信息同步到 ES用 ES 的倒排索引做全文檢索。配置上需要注意 ES 的network.host要改成虛擬機(jī)能訪問(wèn)的 IPdiscovery.type設(shè)為single-node否則單機(jī)模式會(huì)因組播發(fā)現(xiàn)失敗而啟動(dòng)異常。4.4 系統(tǒng)啟動(dòng)順序與驗(yàn)證整個(gè)系統(tǒng)啟動(dòng)依賴順序很關(guān)鍵錯(cuò)了會(huì)出現(xiàn)“Spark 任務(wù)提交成功但讀寫數(shù)據(jù)失敗”的怪問(wèn)題# 1. 啟動(dòng) MongoDBWindows 宿主機(jī) mongod --dbpath /data/db --port 27017 --bind_ip 0.0.0.0 # 2. 啟動(dòng) Redishadoop103 redis-server /etc/redis/redis.conf # 3. 啟動(dòng) Elasticsearchhadoop104 elasticsearch -d # 4. 啟動(dòng) Spark 集群hadoop102 Master start-all.sh # 5. 啟動(dòng)后端 Spring 服務(wù)WindowsIDEA 里直接 Run mvn spring-boot:run # 6. 前端 AngularJS 通過(guò) Nginx 或開發(fā)服務(wù)器訪問(wèn) localhost:8088啟動(dòng)完成后驗(yàn)證路徑瀏覽器訪問(wèn)localhost:8088能看到登錄頁(yè)登錄后首頁(yè)能看到“熱門推薦”“近期熱門”“高分電影”三個(gè)榜單點(diǎn)進(jìn)任何一部電影詳情頁(yè)能看到相似電影給任意電影打 5 分后隔幾秒刷新首頁(yè)實(shí)時(shí)推薦區(qū)應(yīng)該出現(xiàn)與剛評(píng)分電影類型相近的影片。這四條驗(yàn)證過(guò)了系統(tǒng)鏈路就算通了。4.5 推薦任務(wù)的手動(dòng)觸發(fā)離線推薦任務(wù)如果用spark-submit提交可以做成 jar 單獨(dú)跑spark-submit \ --class com.movie.recommender.OfflineRecommender \ --master spark://hadoop102:7077 \ --executor-memory 1G \ movie-recommender-1.0.jar--executor-memory在偽分布式環(huán)境下不要超過(guò) 2G。三臺(tái)虛擬機(jī)共享一臺(tái)物理機(jī)的內(nèi)存給多了反而會(huì)因?yàn)槲锢韮?nèi)存不足引起整機(jī) swapSpark 任務(wù)會(huì)越跑越慢最后表現(xiàn)為 Web UI 上任務(wù)卡在 SCHEDULED 狀態(tài)不動(dòng)。5. 常見問(wèn)題避坑偽分布式環(huán)境下的血淚經(jīng)驗(yàn)5.1 Spark 任務(wù)報(bào)錯(cuò)找不到 MongoDB 驅(qū)動(dòng)類現(xiàn)象提交離線推薦任務(wù)后任務(wù)在讀取 MongoDB 階段拋出ClassNotFoundException: com.mongodb.MongoClient或類似驅(qū)動(dòng)類缺失錯(cuò)誤。原因Spark 集群的 Executor 節(jié)點(diǎn)沒(méi)有加載 MongoDB Connector 的依賴 jar。本地 IDEA 運(yùn)行時(shí)依賴在 classpath 里沒(méi)問(wèn)題但spark-submit提交到集群后Executor 的 classpath 是獨(dú)立的。解決打包時(shí)把依賴打進(jìn) fat jar或者提交任務(wù)時(shí)用--packages org.mongodb.spark:mongo-spark-connector_2.11指定依賴。從那以后我每次提交 Spark 任務(wù)都強(qiáng)制檢查一遍--packages列表和代碼里 import 的包一一對(duì)應(yīng)。5.2 Executor 頻繁 OOM任務(wù)卡死在 SCHEDULED 狀態(tài)現(xiàn)象離線統(tǒng)計(jì)任務(wù)在跑大表聚合時(shí)報(bào) Executor OOM日志里有java.lang.OutOfMemoryError, Web UI 里看到多個(gè) Executor 處于 FAILED 狀態(tài)。原因偽分布式集群的內(nèi)存總量有限三臺(tái) Worker 共享物理內(nèi)存。默認(rèn)配置下 Spark 會(huì)為每個(gè) Executor 分配物理內(nèi)存的很大比例多個(gè) Executor 疊加直接吃滿內(nèi)存。另外讀取 MongoDB 時(shí)如果沒(méi)有提前 select 字段DataFrame 會(huì)帶著大量冗余字段參加 shuffle內(nèi)存壓力更大。解決第一spark-env.sh里把SPARK_WORKER_MEMORY降到 2G提交任務(wù)時(shí)--executor-memory 1G第二所有 Spark SQL 讀取后的第一步就是select精簡(jiǎn)字段第三對(duì)特別大的 ratings 表先按 uid 做一次repartition再聚合。這條優(yōu)化在真實(shí)集群同樣適用只是真實(shí)集群閾值可以放寬。5.3 UDF 在集群模式下拋序列化異?,F(xiàn)象本地跑沒(méi)問(wèn)題spark-submit提交到集群后報(bào)Task not serializable或org.apache.spark.SparkException: Task not serializable錯(cuò)誤棧指向代碼里定義的 UDF。原因如果 UDF 內(nèi)部引用了外部對(duì)象比如配置類實(shí)例、SparkSession 以外的全局變量這個(gè)外部對(duì)象必須可序列化否則閉包無(wú)法在 Executor 間傳輸。本地模式下 Driver 和 Executor 在同一 JVM問(wèn)題不會(huì)暴露。解決UDF 內(nèi)部不要引用外部非序列化對(duì)象把所有依賴封裝成Serializable案例類或者在 UDF 內(nèi)部直接創(chuàng)建所需對(duì)象。我的習(xí)慣是任何 UDF 先問(wèn)自己“如果它在另一臺(tái)機(jī)器上執(zhí)行需要帶什么東西”只帶字符串和基本類型就是最安全的。5.4 Elasticsearch 啟動(dòng)后外部無(wú)法訪問(wèn)現(xiàn)象ES 在本機(jī)啟動(dòng)正常curl localhost:9200有響應(yīng)但在另一臺(tái)機(jī)器上訪問(wèn)hadoop104:9200超時(shí)或拒絕連接。原因Elasticsearch 默認(rèn)只綁定127.0.0.1虛擬機(jī)上的 Spark 應(yīng)用當(dāng)然訪問(wèn)不到。解決修改elasticsearch.yml設(shè)置network.host: 0.0.0.0同時(shí)設(shè)置discovery.type: single-node否則單節(jié)點(diǎn)會(huì)因?yàn)?bootstrap checks 拒絕啟動(dòng)。改完重啟 ES 后用curl http://hadoop104:9200驗(yàn)證。5.5 前端頁(yè)面能打開但登錄后一直跳回登錄頁(yè)現(xiàn)象localhost:8088 的頁(yè)面加載正常輸入用戶名密碼后接口也能返回成功但頁(yè)面刷新后又回到登錄頁(yè)。原因AngularJS 前端把登錄狀態(tài)存到了瀏覽器 localStorage但后端接口跨域或 Cookie 配置了Secure屬性導(dǎo)致 Cookie 沒(méi)寫進(jìn)去。Spring 后端返回登錄態(tài)時(shí)如果沒(méi)有正確配置跨域頭瀏覽器會(huì)攔截寫入。解決后端在 WebMvcConfigurer 里配置 CorsRegistry允許前端域名跨域請(qǐng)求帶上 Cookie同時(shí)確認(rèn)登錄接口的響應(yīng)頭包含Access-Control-Allow-Credentials: true。如果用了 Nginx 代理前端還要檢查代理配置是否把 Cookie 頭透?jìng)髁恕?. 二次開發(fā)改造思路把“能跑的推薦”變成“好用的推薦”讀完源碼、跑通鏈路之后真正的價(jià)值在于改造成符合自己場(chǎng)景的系統(tǒng)。我會(huì)從四個(gè)層面動(dòng)刀按投入產(chǎn)出比排序。第一層推薦結(jié)果的加權(quán)融合。當(dāng)前首頁(yè)接口直接合并 UserRecs 排序本質(zhì)上還是單一算法輸出輪流展示。更穩(wěn)的做法是給每路推薦打分ALS 結(jié)果乘 0.5基于內(nèi)容的結(jié)果乘 0.3熱門榜乘 0.2做加權(quán)取 TopN。這幾個(gè)權(quán)重可以先用固定值跑一周看各路的點(diǎn)擊轉(zhuǎn)化率再調(diào)。代碼改動(dòng)只在 RecommendController 里加一個(gè)融合函數(shù)不動(dòng)底層。第二層給 ALS 加一個(gè)數(shù)據(jù)預(yù)處理。當(dāng)前 ratings 表是原始評(píng)分直接進(jìn)模型數(shù)據(jù)稀疏時(shí)會(huì)訓(xùn)練出大量零向量。建議訓(xùn)練前過(guò)濾掉評(píng)分人數(shù)少于 20 的電影對(duì) score 做標(biāo)準(zhǔn)化到 0-1 區(qū)間。能明顯提升收斂速度和推薦精度。第三層實(shí)時(shí)推薦的觸發(fā)源擴(kuò)展。當(dāng)前實(shí)時(shí)推薦只響應(yīng)“評(píng)分”事件。改造方向是把“點(diǎn)擊詳情頁(yè)”“搜索電影”也作為行為流輸入對(duì)點(diǎn)擊行為降權(quán)即可。改動(dòng)工作量集中在行為日志接入和權(quán)重映射。第四層把熱點(diǎn)數(shù)據(jù)推進(jìn) Redis。詳情頁(yè)相似推薦和首頁(yè)熱門榜都可以做成定時(shí)任務(wù)預(yù)熱進(jìn) Redis前端接口只讀緩存降低 MongoDB 讀壓力。改造點(diǎn)是在離線任務(wù)結(jié)束后加一步寫 Redis 的操作。驗(yàn)證改造效果的方法不需要上線 A/B準(zhǔn)備兩組用戶一組走老邏輯一組走新邏輯各推 50 部電影比較兩組用戶的點(diǎn)擊率和評(píng)分?jǐn)?shù)量。這個(gè)比較可以在 MongoDB 里直接用聚合查詢完成不用額外搭數(shù)據(jù)平臺(tái)。這套工程我前前后后拆過(guò)兩次每次都被同一個(gè)問(wèn)題卡住偽分布式環(huán)境下只要集群一重啟MongoDB 里的推薦結(jié)果表和 Redis 緩存就不同步。從那以后我每次改完離線任務(wù)都強(qiáng)制走一遍“清空結(jié)果表 → 重跑離線批 → 刷新 Redis 預(yù)熱”的流程確認(rèn)三份數(shù)據(jù)一致才交給前端驗(yàn)收。做推薦系統(tǒng)數(shù)據(jù)一致性和算法效果一樣影響體驗(yàn)——希望這篇拆解能幫你少走我來(lái)回折騰的那幾步路。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
后入 亚洲 美女 射| 欧美一级做a爰片免费视频| 91中出视频| 亚拍在线| 久久久久久久 九九九九九九九| 激情五月婷婷综合| 亚洲aV性爱| 亚洲密乳AV| 色臀AV| 麻豆 亚洲 97| 青青草伊人久久| 91精品成人www| 91色艳| 国产精品久久久久9999小说| 欧美日日夜夜| 中文字幕人妻资源在线| 色婷婷香蕉| 天天躁日日躁狠狠狠躁| 人人妻人人爽一区二区三区| 欧美97视频| 艳美熟妇先锋一二三区| 精品久久視頻在线| 久久五月视频| 免费久久精品麻豆一区二区av| 久久这里只精品99re66图| 中国一级操逼视频| 国产天天骚| 日本一区视频在线观看| 久久爱超碰网| 呦女网站| 做爱A级亚欧| 久久久久9久久久久| 78m成人视线| 久久啊啊| 可以免费观看的AV| 人妻铁牛TV| 插欧洲美女欧美精品| 精吧天堂| 国内精品伊人久久久久影院会| 久久97资源 网| 中文一区二区三区影院| 久久怡红院| 一区二区三区四区理论片| 色五月激情网| 亚洲天堂在线怕怕视频| 久久久久久裸体| 超碰成人公开| 91久热| 亚洲国产午夜真人一级片中文字幕精品黄网站| 性色高清..……| 国产超碰人人操| 久久中久文96| 唐山老熟妇露脸啪啪叫| 97日韩欧美亚洲| 日本道久久综合色色| 少妇丝袜在线观看AV| 欧美黄片欧美黄片xxx| 激情亚洲天堂| 中国亚洲呦女专区| 97蜜桃综合| 日韩福利综合一区| 成人精品欧洲亚洲| 日韩乱码Av| 三级日本一区二区三区| 98福利在线视频| 99热在线观看| 人人 操人人 操人人| 少妇色综合| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 久啪视频| 天天色综亚洲91污| 1024日韩| 欧美影音在线| 亚洲乱熟女一区二区三区大香蕉| 久久久久久久9999| 麻豆传媒一区二区在线观看| 操操操日本的逼| 欧美性性性| 1区2区3区在线视频| 国产成人一级av88| 亚洲加勒比久久日本道| 国产综合久| 爱射综合| 天天日天天色| 一,爱啪啪,在线免费视频| 黄页大片在线观看| 亚洲自拍天堂| 永久免费观看的毛片的网站| 欧洲精品欧洲精品| 天美麻豆精品视频99| 久久久久婷婷| 丁香五月天激情网站| 亚洲熟妇A V黑人| 在线播放中文字幕| 国产400孕妇孕交群| 超碰偷拍| 日韩少妇丰满亚洲| 精品一区96| 欧美日韩国产色图在线| 亚洲操人| 九九干| 日本色色视频网站| 亚洲国产日韩欧美熟妇在线| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 999精品国产高清一区二区| 无码一区免费在线不卡| 老司机天天操| 女人喷水视频在线观看| 激情综合五月婷婷| 免费9 1久久| 欧美日韩人人早| 欧美一区二区三熟女剧情| 天天天肏屄肏屄肏屄欧美欧美| 草草电影院| 亚洲国产另类在线中文| 伊人丁香五月婷婷| 影音先锋国产精品| 综合色图亚洲欧美| 亚洲天堂加勒比| 日本精品五区| 国产精品久久99日日| 精品无码久久久久久国产浪潮| 久久精品中文字幕无码l| 国产69精品久久久久99尤物| 四虎AV在线观看| 精品国产国产AV| 91青青在线视频| 美女的肌被草喷水视频| 97在线免费公开视频| 国产高清吃奶免费视频网站| 国产一区二区三区视频在线看| 中文字幕在线高清男人的天堂| 欧美大香蕉97| 99999精品视频| 色月天AV导航| 水滴偷拍| 岛国片在线视频网站| 欧美日韩国内不卡| 天天操天天射天天日| 午夜呻吟欧美| 亚洲丝袜少妇在线| 熟女视频久久| 伊人丝袜美腿高跟在线观看高清| 欧美乱伦专区| 一区,二区,三区网站| 蜜臀久久99精品久久久久久酒店| 一起草日韩| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 人妻天天爽夜夜爽精品2| 免费视频观看60秒| 狠狠色噜噜狠狠狠狠狠色综合久久| 久久色激情一区二区三区| 97超碰影音| 思思热久久成人| 精品免费国产二区三区| 92久久| 久久久久久久久久久人妻| 日韩精品第3页| 大香蕉www.超碰| 欧洲乱码视频| 久久久久久日韩| 欧美亚洲se91| 亚码人妻| 1禁看欧美黄片免费看| 色超碰综合| 久久精品欧美一区二区三区不卡| 99re69| 91黑人狂躁丰满熟妇| 免费精品99| 国产综合色精品在线观看| 天天操天天射青青草| 亚洲日韩精品久久久久一区壹牛 | 欧洲乱码一区二区| 免费黄色片。| 久久久性少妇| 五月天婷婷欧美三区| 久久久久久无码人妻中文字幕| 精品久久97| 国产精品久久久鸭无码的功能| 夜精品久无码| 嗯嗯啊操我| 女人精品内射国产99| 九九九九一级| 久插不卡| 国产亚州精品美女久久久免费| 超碰97男女| 青青网三级视频| 明星性猛交ⅹxxx乱大交| 伊人久久大香蕉线AV五月天| 在线国产探花| 免费a v| 福利风月五月天影院| 黄色一级视| 999精品女人| 无码视频黄色网战| 国产三级在线现体验区| 久久久日本电影| 久久精品老司| 日韩久久三区| 欧美极度丰满熟妇hd| 岛国A V在线免费看| 一级毛片电影免费看| 欧美日韩人人精品| 欧美成人9797| 欧美日韩一区二区三区四区蜜桃| 久久伊人亚洲AV无码网站| 伊人宅男大香蕉| 欧美性爱一区二区三区四区| 中文字幕97色| 东北黄色电影| 亚洲色图欧美视频| 欧美日韩 强奸乱伦| 老熟女搡BBBB搡BBBB视频| 久久超碰天天| 操91| 青青草在线成人视频| 大香网伊人久久综合| 操高情无码| 强歼乱伦资源网| 深夜福利黄片| 麻豆久久精品亚洲精品88| 伦理第一页| 精品少妇一区二区| 男同专区一区二区三区在线| 四虎免费在线播放| 中文字幕一区二区视频在线观看| 97综合| rivers-china.com| 亚洲人精品久久久| 欧美综合第一页| 九九AV| 日韩性爱视频在线免费观看| 深夜视频| 一级成人性爱| 天天综合网站| 国产超碰在线一区| 天天性射网| 久久久天堂| 黑人综合网| 操逼天美3区| 亚洲国产欧美中文永久| 中文字幕精品人妻丝袜| 成人AV素股で擦久久| 青青操在线亚洲视频观看欧美在线 | yirendaxiangjiashipin| 亚洲资源网| 九九亚洲色在线观看| 性高潮久久久久久久久久久| 清纯唯美亚洲综合| 国产在线激情视频| 丁香五月综合| 欧美色九九| 色妇综合网| 欧美在线永久天堂| 亚洲蜜乳av| 99久久网站| 草久久久| 1240青青草一区二区三区视频天爱| 午夜男人av| 操91| 久久黄人人爽视频| 91色情黑丝搞鸡在线观看一区二区三区三州 | 国产毛片毛片4p懂色| 99久久久无码国产精品性男| 99婷婷| 啊啊啊男女| 台湾成人无码AV| 国产AV久久久蜜爱影集| 蜜臀AV成人精品蜜臀AV久久| 青草精品视频日本久久久久网站在线| 97在线精品| 青青草国产一区二区三区| 欧美激情专区| 亚洲春色激情小说| 日本人妻中文字幕| 宗合情欲网| 人人操人人摸人人骑| 青娱乐亚洲热| 青草成人免费视频一COm| 五月天激情影院| 白丝在线一区| 欧美精品23| 国产a级精品| 亚州,欧美在线| 凸凹视频在线观看| 国产白丝在线| 一区二区三区免费视频入口| 蜜桃精品一区二区三区ww| 五月婷婷大香蕉| 呻吟 欧美 日本 中出| 亚洲日韩精品在线播放| 日韩三级av片| 亚洲欧洲美腿丝袜| 青娱乐淫乱1314| 麻豆天美传媒在线视频天堂| 岛国视频免费在线观看| 欧美同性恋 的搜索结果 - 91n| 一级免费啪啪片| 天天日天天射天天干| 日本道不卡| 青青网三级视频| 中文字幕黄片在线| 97超碰欧美中文字幕| 97一区二区三区视频| 国产精品一区午夜福利| 亚洲加勒比| 欧美一区二区三区成人性生活| 久热免费视频| 女人午夜视频777| 搡老女人老妇女老妇老熟女怎么读| 蜜臀AV一区二区三区| 九九99久久| 啪啪啪东京| 日韩射图| 欧美黑人91| 啊啊啊好舒服好爽啊啊啊视频| 97精品综合久久| 国产精品久久久久久久久久梁医生| 91nbbbbbb| 国模限制级电影| se吧提供91精品国产91久久久久久| 一二三区精品视频| 日本五区不卡| 国产女人9999| 欧美aⅴ99久久黑人专区| 长长久久免费视频| 五月香婷婷| av东京热男人的天堂| 99这里只有精品| 91免费看中出视频| 色 婷97| 久久av一级av少妇av高潮| 亚春色色| 麻豆国产原创AV色哟哟| 五月丁香黄色网| 久久有码| 粉嫩av在线一区二区| 国产97色在线 | 亚洲| 伊人久久综合精品欧美| 欧美性爱一区二区三区| 有码人妻系列| 亚洲天堂男人在线| 首页中文字幕中文字幕免费| 好湿好紧视频| 蜜桃臀一区二区aV| 黄色十八禁网站| 五月天激情婷婷| 熟女人妻精品一区二区视频| 久热伊人99re| 男人天堂2012| 色色丁香| 亚洲AV无码久久久国产精品| 亚洲国产精品有声| 1区2区3区中文字幕日韩| 91天堂色男人的天堂| 日韩一级二级三级免费看完整版| 97超级色碰碰| 婷婷五月天av| 一区二区三区探花在线观看| 四虎精品永久在线播放| 国产精品毛片| 一区久久久二区| 可以免费观看的AV| 欧美午夜一区二区三区| 免费一级精品啪啪视频| 免费黄色A片| 思思热免费在线视频| 亚洲伊人成综合成人网| 91精品国产91综合久久蜜臀| JIZZJIZZ亚洲女人被躁| 午夜福利1区2区3区| 欧美色宗合| 欧美宗合色| AV有码在线| 97精品国产手机| 91久精品| 九九人妻| 日韩大香蕉| 色波多| 亚洲精品性爱片| 奇米狠999| 六月激情婷婷| 蜜桃不卡一区二区| 精品综合久久久久久97| 久久久性爱视频| 精品熟妇视频一区二区| 亚洲乱色熟女一区| 亚洲婷婷综合网| 国模无码一区二区三区在线| av天堂5| 国产精品青草综合久久| 污到发麻的视频 国产| 呻吟 欧美 日本 中出| 可乐操亚洲蜜911| 日韩中文字幕精品一二三事国产精品| 国产风韵犹存熟妇三区| 久久专区| 免费久久一级毛片大黄| 国产福利精品最新在线| 久久久98网站免费视频| 国产午夜精品理论片一二三区区 | 亚洲。日韩。欧美| 亚91网| 国产黄色小视频网站| 91精品人妻电影| 九九九九九九九九九九九免费国产| 男人的天堂日本东京热| 免费观看网黄| 女同亚洲欧美一二三区久久电影| 国产乱弄免费在线视频。| 丰满欧美放荡少妇在线| 久久五十路熟女人妻| 丝袜制服字幕在线| 手机午夜电影神马久久| 九九九综合精品| 蜜臀一区二区三区在线 | 日本一区99| 色网在线视频观看免费| 免费看污网址| 麻豆三极片| 玖玖97综合| 在线洲亚线| 后X久久| WWW美腿丝袜香蕉中文| 日韩国产不卡在线视频| 亚洲欧美综合色| 深夜国产一区二区三区在线看 | 99久久婷婷国产综合| 欧美色图欧美| 少妇一区二区三区在线观看| 亚洲一区中文精品| 射欧美综合| www成人啪啪18秘 免费| 日本在线观看网址| 香蕉久久精品| 最新啪啪视频| 日韩啪啪视频| 碰人碰碰人人开房人肉| 丝袜喷水在线| 91成人久久| 久久97超碰| 黄色二级片网站| 久久久精品中文字幕爱豆| 小电影欧美91| 78m啪啪啪| 久操视频在线观看| 2017天天插| 色婷婷六月丁香七月婷婷| 色婷婷视频| 99999久久久久9国产精品| 丝袜美腿操av| 亚洲自拍一区夜夜操 | 久久国产成人精品国产成人亚洲| 97超碰超| 啊啊啊好大好深| 日韩精品电影| 丰满精品人妻少妇久久字幕| 内射日韩大臀美女| 日韩黄色成人性爱| 欧美十八禁网站| 亚洲国产精品成人无码久久久| 久久鲁干| av天堂影视中文在字幕在线中文| 天天懆天天日| 国产美女口爆吞精视频| 96麻豆精品一区二区三区| 九九九九九九免费视频| 人人操人人射人人干| 色人久久| 久久视网78| 成年人黄色| 97干色天堂| 一牛一区二区三区久久| 狠狠爱夜夜干| 久久99国产精品| 亚洲国产精品无码AV久久久| se吧提供国产乱老熟视频胖女人| 国产日逼视频| 午夜丁香婷婷| 国产精品交换一区二区| 久久九九一区二区三区成人| 亚洲欧美变态| 日韩综合无码色欲vv| 久久久免费一级黄片| 天天综合精品| 91色综合色| 久久中文字幕一区不卡| 国产日韩欧美中文在线播放| 人人色人人操在线| 精品免费国产二区三区| 日本一线产区和二线产区伦理片| 性爱网站一区二区| 3571色综合一区二区二区| 国外91| 欧美人与动性人交a| 中文字幕在线观看丝袜| 99福利社| 国产三级中文有码在线视频| 老熟女熟妇| 亚洲精品久久久久毛片A片拉屎| 欧美色性爱| 三级片大波波| 国产精品福利资源在线尤物| 日韩丝袜人妻AV| 久9精品| 精品国产乱码久久久久久久久1| 欧美爱国产综合、| 人妻久久久久久| 亚洲性刺激| 日产狠狠干| 资源新线在线天堂| 亚洲天堂中文字幕无码男同| 亚洲熟女av中文字幕| 婷婷久久久| 日日操夜夜操天天操免费观看麻豆| 日本操逼视频不卡直接放| 天天碰操中国年青熟妇| 亚洲一级性爱视频免费看| 97国产色图 | 日韩卡一卡二卡三在线| 大香蕉色欲AV| 色五月婷婷在线| 免费人成毛片乱码| 中文字幕一区 二区三四五 区日 日骚| 九九九成人| 成人老鸭窝人人在线视频| 日韩在线欧美精品一区二区| 亚洲十八禁止| 一牛影视久久久一区二区三区| 99亚洲国产精品色一区二区三区| 蜜桃臀一区二区三区久久| 玖玖综合.com| 无码av永久免费专区网站| 亚洲高清色综合| 伊人精品视频| 蜜色网色哟哟| 成人短视频在线观看| 黄片视频观看| 黄色工厂这里只有精品| 欧洲亚洲人妻无码中字久久三区四区 | 麻豆黄色五月天| 在线免费观看高清无码视频| 欧美偷| 超碰97首页| 欧美熟妇乱码在线一区| 色久综合| 最新啪啪视频| 久久久麻豆精品| 国产在线激情视频| 午夜福利一区二区影院| 欧美亚洲综合高清在线| 91无码人妻精品一区二区三区蜜桃| 一区二区三区四区五区高清无码永久视频| 国内毛片无遮挡国产| 久久精品28| 2017,超碰| 另类成人首页一区| 91男同| 蜜臀th| 97操在线| 国产在线激情| 五月天伊人网| 偷拍综合网| 99色网| 国产在线视频午夜精华在| 啊啊啊啊啊好多水| 日本熟妇浓毛hdsex| 久久超碰天天| 九九九九热| 日韩欧美大力操| 日韩免费在线观看不卡| 安微少妇操BBB| 亚欧色图在线激情| 囯产乱伦一区二区三女| 人人操我人人干| 尤物视频偷拍免费| 激情久久日韩精品中文字幕麻豆| 欧美亚洲自拍另类人妻| 亚洲综合网电影91| 大香蕉78| 欧美 青青草| www.伪伪| 啊啊啊用力在线观看| 97久久精品| 亚洲色性情三级| 日韩 国产 欧美自拍| 天天α片| 四虎 精品 WWW| 国产乱不卡| 欧美大战久久久伊人| 插穴性爱视频在线观看| 日韩女优中文字幕| 久久精品欧美一区二区三区不卡| 蜜臀久久久99久久久久 | 男人网站婷婷| 丁香六月婷婷久久综合| 婷婷精品视频| 116美女午夜| 久久春色| 久久9久9久99久9久9| 乱伦熟女区| 国内精品999| 中文字幕在线免费观看2| 久久αⅴ| 一二三卡欧美日韩人妻免费精品| 欧美高潮| 性爱精品一区| 嫩草 我啊~嗯~在线| 无码WWW免费视频网站| 狠狠夜色午夜久久综合在线| 色视频蜜乳| 亚洲欧洲另类| 欧美色偷偷| 厕所偷拍在线| 国产女同视频在线播放| 日韩图区| 静品嫩模一区二区| 久久一区二区蜜桃| 亚洲熟女综合| 日本不卡高清视频| 黑人粗大V S日韩女优视频| 欧美十八禁导航成人| 自拍亚洲综合| 亚洲日产专区| 亚州免费啪啪视频| 96国产精品| 五月激情天| 欧美人人操人人插| 精品人妻一区二区三区蜜桃视频| 亚洲欧洲综合视频在线| 日韩九九九| 亚洲 欧美 另类 日韩 人妻一区 | 色一色综合网| 欧美成人性爱视频在线播放| nuu12国产麻豆精品| 91天天日| 婷婷伊人| 午夜一区二区三区国产| 亚州综合在线| 精品二区三四区五电影| 欧洲一区二区三区免费| 性爱综合网| 日本三级R| 精品国产乱码| 肏逼视频日本| 久久久久9999精品九九九| 欧美午夜精品久久久久久3D| 97国产精品| 狼人狠干| 亚洲日韩狠狠撸视频| 久久久九九九九| 国产精品欧美激在线| 亚殴在线| 狼人综合婷婷激情四射| 婷婷综合五月天| 91精品丝袜在线观看| 自拍偷拍 高清无码| 岛国片在线播放| 家庭乱伦国产精品| 高清在线不卡一区二区 视频| 91色狼| 日韩欧美大片免费高清啪啪| 黑人综合网| av毛片aaaaa免费看| 国产精品视频自拍在线| 日熟女| 亚洲一区二区三区播放在线| 久草国产在线视频| 日韩av不卡在线观看| 国内毛片免费h片在线| 久久婷婷五月综合| 欧美精品人妻视频| 试看福利| 欧美BT 亚洲色图| 啊啊啊爽爽| 在线综合 亚洲 欧美中文字幕| 国产精品 久久久精品一牛| 国产操操日韩三级黄| 国产 码在线成人网站| 精品一啪| 亚熟在线| 熟女久久| 五月天婷婷在线看| 熟女乱伦二区| 丝袜美腿校园春色| 超碰在线1234区| 蜜臀一区二区三区在线| 精品欧美А∨无码黑人大荫蒂| 黄网色一区二区三区四区精品| www.yw尤物| 欧美日韩美女精品久草一区二区三区| 亚洲男人天堂手机版| 国产av强奸美女| 人人看人人摸人人色| 亚洲瓯美色图| 日本色日夜干| 激情婷婷丁香| 四虎精品一区| 人人爱人人乐人人操| 综合一区中亚洲国产成人综合精品 | 女人喷水视频在线观看| 亚洲aw毛茸茸在线 | 91在线视频免费中出| 91热热色| 欧美性爱在线无码| 中文字幕在线第二页| 九九干| 91无摭挡| 亚洲日本激情| 无码视频一区二区| 91人妻最真实刺激绿帽| 丁香婷婷啪啪| 亚洲在线a| 久久超碰爱| 好涩综合| 五月香婷婷| 91 偷| 中文字幕日韩综合| 国产精品第一区第一页| 久久综合中文国产| 中文字幕日韩人妻视频一区二区三区| 91欧美美女日韩国产婷婷| 影音先锋乱伦资源| ai欧美亚洲小说| 五月婷婷久久综合| 福利视频香蕉免费一区二区在线| 高树玛利亚无码流出| 搡老女人老91妇女熟女| 97精品综合久久网| 欧美久久草熟女| 免费强奸av| 亚洲av无码国产精品字幕| 一级AAA片一区二区三区| 麻豆天美在线| 麻豆尤物视频网| 蜜桃久久综合视频| 日产成人久久| 亚洲少妇激情一区二区三区| 色综合久久夜色精品国产天堂| 97久久久精品| 一区二区不卡免费| 天堂av最新电影网| 日本精品加勒比海一区| 超碰97亚洲区| 久草毛片| 懂色aV一区二区天美传媒| 一级性爱视频免费观看| 操逼A∨| 蜜臀久久99精品久久久久久酒店| 熟妇熟女一区二区三区| 天天爽天天干| 91久热这里只有精品| 欧州激情视频在线一区二区| 日韩不卡一二三四| 人妻夜爽夜夜爽| 国产成人久久精品蜜臀| 啪啪视频亚洲第一| 亚洲色综合| 久久综合精品一区二区三区| 婷婷亚洲天堂| 超碰天天操| 日躁天天爽爽| 日韩不卡a级视频专区| 小草三级久久观看| 亚洲凸凹超碰成人| 天天综合网91| 国产男人又猛又粗又爽| 精品性爱一二三区| 一本一道人妻久久一区二区三区 | 亚拍在线| 日日夜夜精品视频| 天天干天天狼在线视频| 欧美三级免费伊人| 99热在线观看| 亚洲图片欧美偷拍| 亚洲黄色影视| 亚洲美女精品九九视频| 99ri精品| 欧美亚洲小说| 啊啊啊啊啊在线观看网址 | 99久久国产精品免费高潮| 国产夫妻一区二区| 免费精品人妻一区二区三| 日本高清_区二区三区| 国产中文福利| 中文字幕黄色一起草| 日产操逼| 九九九九88| 欧美999| 欧美嗯啊……在线观看视频免费| 操熟女91| 大鸡吧尹人在线| 精品午夜福利导航| 国产久久视频| 翔田千里无码中出中文字幕| 久久久久久九九九九-美女久久久久久久-成人AV | 欧美|91色综合| 性色中出| 九九RE视频在线精品| 日本人妻中文字幕精品| 91快色色色色色| 日本黄 R色 成 人网站| 婷婷伊人綜合中文字幕小说| 国产蜜臀在线| 留下AⅤ黄色片| 男女啊啊啊啊啊| 日韩熟妇二区| 少妇被c 黄 免费观看| 嗯啊免费视频| 黄色电影在线播放综合网站| 久久久久久久九九九九九九| 九九九九9999| 中文字幕在在线观看网站| 国产情侣自拍在线播放| 国产91 丝袜在线播放| 中日亚韩免费视频| 人妻爽爽啪视频| 五十路熟女人妻一区二区在线观看 | 国产99 中文字幕日韩小视频| 亚洲91色在线| 欧美一级A一级a爱片久久| 国模精品娜娜一二三区| 国产1727欧美| 久操com| 色五月天AV| 精品国产三级av韩国在线| 丰满人妻一区二区三区免费,| 天堂亚洲精品| 国产又粗又长又爽又色| 久久人妻少妇| h无码动漫在线观看| 美女干逼2| 思思热免费在线视频| 91久久伊人婷婷青青草| 国产亚洲福利第一页丝袜| 欧美色偷拍 | 精品久久久久久AV无码| 99热97| 视频国产成人精品日本亚洲18| 精品女人999| 啊啊啊啊网站| 蜜臀av中字字幕网站| 日韩电影在线观看网址| 观看视频图片一区二区三区| 久久国产在线一区二区| 99re9这里只有精品| 韩三级a视频在线观看| 超碰 av 女人天堂| www.久久最新地址| 91热色| 一二三区在线| 亚洲天堂人妻一区二区| 夜夜骑夜夜操| 嗯嗯,好大,好爽,好骚 | 精久久久| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 91社操逼| 91日韩网站| 天美麻豆精品视频99| 色视频蜜乳| 风月影院男女十八禁| 亚洲操人| 国产无码精品无码| 亚洲综合九| 五月天啪啪| 三级日本一区二区三区| 男人的天堂在线| AA丁香综合激情| 国产又黄又爽| 亚州欧美总和| 国产一区二区三区中文字幕| 成人26uuu| 99热线麻豆| 爆乳免费黄网站| 久久久久国产精品喷潮免费观看臀| 中文字幕一区二区三区人妻不卡| 青青草视频久久久久| 日韩中文字幕视频在线观看| 在线视频97| 精品二区三四区五电影| 99青草| 国产 v乱码一区二| 思思久热在线精品66| 亚洲性感丝袜诱惑在线观看| 天天爱天天韩国日本牛牛牛牛 | 中文字幕在在线观看网站| 极品尤物女神在线观看| 97在线视频免费观看| 欧美色图在线视频少妇| 欧洲无码一区二区| 日韩性爱小视频在线观看| 亚洲色图欧美一区二区不卡| 欧美丝袜美女电影一二三四区| 殴美,日韩国产伦精品| 无色无码| 伊人991| 大香蕉碰碰| 中文字幕123| 日本三级A片网站com| 夜夜嗨一区二区三区直播内容| 1204av韩国| 欧美少妇大量自拍视频在线观看| 国产综合操逼高清| 岛国毛片在线观看免费| 97综合久久| 网友自拍第1页| 啊啊啊不要嗯嗯在线观看| 蜜桃中文字日产乱幕4区| 亚洲激情AV| 久久99午夜精品一区人妻| 91露脸熟女专区| 2021国产成人精品久久| 婷婷激情丁香| 熟女91网| 60秒免费视频| 日韩无码AB| 青青草色插素人| 99国产在线绯色一区| 调教熟妇 久久久久久| 国产一区二区三区影片| 亚洲欧美中文一区二区三| 久久透逼视频| 1000部熟女视频在线观看| 亚洲精品欧洲色| 超碰导航97| 亚洲中文丝袜美腿诱惑字幕| 人妻无码一区二区三区久久99| 国产精品久久久久久久免牛肉蒲团 | 国产吹潮女在线观看| 色大香蕉97N| 超碰地址97| 殴洲老熟女| 人人搡人人肉久久精品| av72网| 中文字幕文字幕无码一区二区三区电影99| 中文有码第五页| 射丝袜高跟鞋99| 天天综和| 久久国模av| 加勒比人妻综合| 亚洲九九视频在线观看| 国产中文字幕在线观看| 国产怡红院在线| 精品一级| 久久精品国产亚洲5555| 插入逼91| 国产一区二区三区久久久精品| 国产精品嫩草久久久久| 亚洲成人无码影院| 亚洲精品中文字幕一区在线视频 | aV中文麻| 亚洲?V高清一区二区三区尤物| 久久伊人最新网址视频| 51国产午夜精品视频| 午夜福利激情在线视频| 综合欧美日韩在线观看| 五月丁香婷婷色| 久久超碰爱| 国产精品suv一区| 啊啊啊啊啊好舒服视频| 亚洲图片 欧美电影| www.夜夜| 韩日男人的天堂| 熟女网站最新| 久久久久久人体| A级在线视频| 国产AV毛片| 99热婷婷| 97爱亚洲综合色| 欧美人妻另类在线| 97爱爱爱| 极品尤物自安慰| 亚洲成人综合在线| 歐美一級亂黃99在綫精品| 欧美综合 站| 天天综合色图| 人妻中文字幕精品无码 | 日本精品一区二区三| 久久久久久九九九九九| 一级人妻性爱视频| 一起草精品人妻| xxx亚洲午夜天堂| 欧美日韩97在线| 国产精品免费久久久久久久久久| 啪啪AV导航| 射 色综合| 东京热大香焦| 天美精品原创av片国产| 国语精品内射在线观看| 精品大久久| 色综合1991| 日韩中文字幕国产| 亚洲黑丝在线| 超碰97在线色男人??| 黄片www视频免费| 欧美性爱十八禁| 天天日天天射天天干| 丝袜美腿丝袜| 金莲网址| 午夜天堂精品久久| 欧洲亚洲少妇| 91呆哥人妻| 久久国产对白激情浪潮| 欧美姓爱综合网| 岛园激情| 伊人操操| 日本熟女不卡视频| 婷婷中文字幕| 91精品国产长腿丝袜美女| 操逼视频色| WWW4虎| 国产三级片在线观看| 日韩,欧美,中文在线| 吉川爱美亚洲二区在线 | 麻豆 亚洲 97| 69国产对白刺激| 欧美图片偷拍| 亚洲欧洲日韩中文字幕一区| 日本一级二级三级网站| 精品久久大胆人体| 国产亚洲99久久精品熟| 91亚·色| 特色a在线上| 丝袜美腿诱惑亚洲欧美视频在线观看| 四虎免费视频| 精品中文字幕一区二区l - 百度| 试看福利| 少妇一级婬片免费放一级a性色.| 熟女色图在线| 亚洲国产一级黄色视频| 四月丁香婷婷| 永久免费观看的毛片的网站| 96精品在线| 玖草在线视频| 国产伊人自拍| 亚洲中文字幕在线视频一区二区| 骚逼高潮久久精品| 亚欧成人一级片在线播放| 婷婷亚洲综合| 吻戏激情性巴克| 69天堂| 久久久久久久久久久久久久9999| 三上悠亚在线毛片91| 中文字暮97| 天天夜躁日日躁狠狠2002| 一区二区三区四区五区高清无码永久视频| 97干在线| 91jk色拍| 强奸乱伦Av网| 亚洲男人天堂视频| 婷婷色中文字幕| 美女啊啊啊啊啊啊| 国产不卡精品91| 精品人妻1区| 学生妹天天看| 伊人久久婷婷| 国产白丝av| xxx亚洲午夜天堂| 欧美日韩免费专区在线| 婷婷五月av| 蜜臀AV成人精品蜜臀| 欧美日韩国产另类综合| 蜜臀一二三区| 男人天堂2012| 国产亚洲福利第一页丝袜| 天堂伊人久久| 国产激情视频在线观看| 伊人操| 最新av在线| 九九人人操| 久久精品国产亚洲妲己影视| 久久久久久久久久精| 欧美色五月| 在线中文字幕| 国产精品第一页国产大屁股视频免费区i | 性爱视频久久| 天天干天天操天天操夜夜操天天操| 性性欧美| 婷婷五月天福利| 女欧美一区二三区| 欧美淫乱视频| 蜜奶av| 你懂得91| 99亚洲精品| 久久精品国产亚洲粉嫩| 熟妇艹鸡八| 婷婷综合视频| 久久精品中文字幕观看| 欧美综合色图片| 亚洲一区二区 麻豆传媒| 久久精彩免费视频| 日韩国产欧美伦理在线| 青青草好吊色| 亚洲丝袜99| 韩日男人的天堂| 精品国产精品一区二区| 日韩综合成人免费视频| 91熟女网| 裸体美女久久久| 中文啪啪视频| 亚洲欧美精品福利在线| 久久久久久电影| 欧美激情专区| 日本道人妻久久久在线不卡色视频| 亚州久久9| 欧美日韩情色一区二区| 人妻精品视频一区二区| 91精品久久久| 久久久精品| 91熟女丨91老女人| 99热国产精品| 91天天c| 99爱久久视频频| 五月天婷婷基地| 成视频在线观看免费看| 国产精品爽爽v| 欧美夜夜草视频| 亚洲天堂男人网| 九九热av| 中日韩久久久免费看| 国产一区二区三区,在线观看观看| 丝袜狠狠草尤物人妻av91| 激情五月婷| 中文字幕在线高清男人的天堂| 国产精品久久久久亚洲av| 看免费一级在线播放毛片| 欧成人精品H无码| 国产 亚洲 丝袜 制服| 无码高清专| 精品国产91av一区二区三区| 亚洲成人激情小说视频| 亚洲欧美日韩不卡人妻| 激情小说激情视频| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 久久国色天香香蕉| 亚洲国产第一页综合视频| 六月激情网| 男人的天堂不卡一区二区| 色婷婷丁香| 91狠狠色丁香婷婷综合久久| 色情五月综合婷婷| 色综合九九| 久热久| 三级三级三级日本99| 99这里都是精品| 麻豆久久久一区二区| 亚洲另类综合欧美| 久久熟女人| 毛片17S| 9超碰免费| 国产精品久久久九九九| 久久超碰av在线| 后入福利| 2017天天插| 99婷婷一区二区| 国产宅男宅女在线观看| 亚洲色 国产 欧美 日韩| 91狼人| 国产欧美伊人|