日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(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)容推薦算法感興趣的開(kāi)發(fā)者參考。文檔以論文形式系統(tǒng)梳理了課題背景、國(guó)內(nèi)外研究現(xiàn)狀、Spark與MongoDB等關(guān)鍵技術(shù)并重點(diǎn)介紹了基于人口統(tǒng)計(jì)學(xué)、基于內(nèi)容、基于協(xié)同過(guò)濾三類(lèi)推薦算法的原理與設(shè)計(jì)思路。系統(tǒng)分析部分涵蓋可行性與功能需求設(shè)計(jì)部分細(xì)化各推薦算法流程實(shí)現(xiàn)部分展示用戶(hù)登錄注冊(cè)、個(gè)性化推薦、電影搜索、用戶(hù)評(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é)生或開(kāi)發(fā)者。1. 這個(gè)項(xiàng)目不只是論文一套能從登錄跑到推薦的完整系統(tǒng)電影推薦系統(tǒng)這類(lèi)課題網(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è)面。換句話(huà)說(shuō)它不是 toy demo而是一條能沿著“用戶(hù)登錄 → 評(píng)分 → 離線(xiàn)統(tǒng)計(jì) → 實(shí)時(shí)推薦 → 詳情頁(yè)相似推薦”跑通的完整鏈路。我拆這份項(xiàng)目時(shí)最大的感受是它的核心不在協(xié)同過(guò)濾那幾行 ALS 代碼而在“三種推薦算法怎么分工”?;谌丝诮y(tǒng)計(jì)學(xué)的離線(xiàn)推薦管冷啟動(dòng)和熱門(mén)榜基于內(nèi)容的實(shí)時(shí)推薦管用戶(hù)當(dāng)下行為協(xié)同過(guò)濾管個(gè)性化。單一算法都有各自的坑混合起來(lái)才是個(gè)能用的推薦系統(tǒng)。這套設(shè)計(jì)思路比代碼本身更值得讀。適合讀這份資源的人有三類(lèi)做大數(shù)據(jù)課程設(shè)計(jì)或畢業(yè)設(shè)計(jì)的學(xué)生想把 Spark 推薦從“會(huì)調(diào) API”推進(jìn)到“能搭完整服務(wù)”的后端開(kāi)發(fā)以及想找一個(gè)可復(fù)現(xiàn)的推薦系統(tǒng)基線(xiàn)工程、準(zhǔn)備加功能的算法工程師。下文我會(huì)把技術(shù)選型、模塊結(jié)構(gòu)、核心實(shí)現(xiàn)和運(yùn)行步驟一層層拆開(kāi)最后給出我的改造建議。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é)離線(xiàn)批量統(tǒng)計(jì)和實(shí)時(shí)流處理存儲(chǔ)層MongoDB 存用戶(hù)、評(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ù)流向是這樣的用戶(hù)在前端頁(yè)面產(chǎn)生評(píng)分、點(diǎn)擊、搜索行為這些行為寫(xiě)入 MongoDB 的業(yè)務(wù)表離線(xiàn)推薦任務(wù)用 Spark SQL 周期性從 MongoDB 讀取評(píng)分表跑統(tǒng)計(jì)和模型訓(xùn)練把結(jié)果寫(xiě)回 MongoDB 的推薦結(jié)果表實(shí)時(shí)推薦則通過(guò) Spark Streaming 消費(fèi)行為流結(jié)合用戶(hù)最近的評(píng)分記錄做基于內(nèi)容的相似推薦前端通過(guò) Spring 后端接口讀取 MongoDB 里的推薦結(jié)果展示給用戶(hù)。這里有一個(gè)值得注意的設(shè)計(jì)決定MongoDB 同時(shí)承擔(dān)“業(yè)務(wù)數(shù)據(jù)庫(kù)”和“推薦結(jié)果數(shù)據(jù)庫(kù)”兩個(gè)角色。好的一面是技術(shù)棧干凈不用在 HBase 和 MySQL 之間做數(shù)據(jù)同步壞的一面是推薦結(jié)果表要按用戶(hù)維度設(shè)計(jì)好索引否則前端高頻讀取時(shí)會(huì)有性能壓力。實(shí)際工程里我會(huì)把推薦結(jié)果再拷一層到 Redis這個(gè)后面改造章節(jié)細(xì)說(shuō)。2.2 離線(xiàn)推薦模塊基于人口統(tǒng)計(jì)學(xué)的四類(lèi)統(tǒng)計(jì)任務(wù)離線(xiàn)推薦是這套系統(tǒng)的“底座”它解決的核心問(wèn)題是冷啟動(dòng)新用戶(hù)沒(méi)有任何行為記錄時(shí)推薦什么答案是給所有人推一樣的榜單——?dú)v史熱門(mén)、近期熱門(mén)、高分電影、各類(lèi)型 Top10。四個(gè)統(tǒng)計(jì)任務(wù)分別這樣設(shè)計(jì)歷史熱門(mén)影片的統(tǒng)計(jì)直接用 Spark SQL 從 MongoDB 的 ratings 表讀取評(píng)分記錄按電影 ID 分組統(tǒng)計(jì)評(píng)分人數(shù)取數(shù)量最多的前 N 部。這個(gè)邏輯簡(jiǎn)單粗暴但“評(píng)分人數(shù)多 熱門(mén)”這個(gè)假設(shè)在大多數(shù)場(chǎng)景下成立。近期熱門(mén)影片的統(tǒng)計(jì)在歷史熱門(mén)的基礎(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ì)算平均值寫(xiě)入 AverageMovies 數(shù)據(jù)集。這個(gè)結(jié)果會(huì)用在詳情頁(yè)展示電影得分也會(huì)作為離線(xiàn)推薦的一個(gè)排序因子。各級(jí)別影片 Top10 的統(tǒng)計(jì)這是最復(fù)雜的一個(gè)。電影的 genres 字段是“動(dòng)作|冒險(xiǎn)|科幻”這種按豎線(xiàn)分隔的字符串需要先用 UDF 按|切分成數(shù)組再用explode展開(kāi)成多行最后按每個(gè)類(lèi)別分別計(jì)算評(píng)分 Top10。核心代碼見(jiàn)下一章。2.3 實(shí)時(shí)推薦與詳情頁(yè)推薦基于內(nèi)容的相似匹配實(shí)時(shí)推薦模塊用的是 Spark Streaming它接收用戶(hù)的行為流比如剛給某部電影打了高分然后做兩件事一是把行為寫(xiě)入 MongoDB 作為后續(xù)離線(xiàn)訓(xùn)練的輸入二是立刻基于這部電影的內(nèi)容標(biāo)簽找相似電影推給用戶(hù)。這里的“相似”不是協(xié)同過(guò)濾算出來(lái)的用戶(hù)相似而是電影本身屬性類(lèi)型、導(dǎo)演、主演的相似度用的是基于內(nèi)容的推薦算法。詳情頁(yè)推薦是實(shí)時(shí)推薦的“懶加載版本”用戶(hù)點(diǎn)進(jìn)某部電影詳情頁(yè)時(shí)后端才去計(jì)算這部電影的相似電影并返回。好處是不需要預(yù)先為每個(gè)用戶(hù)算好結(jié)果存儲(chǔ)開(kāi)銷(xiāo)小壞處是首次訪(fǎng)問(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)源而是作為離線(xiàn)個(gè)性化推薦的補(bǔ)充。它的任務(wù)是從歷史的“用戶(hù)-電影-評(píng)分”矩陣中學(xué)習(xí)兩個(gè)隱因子矩陣——用戶(hù)特征矩陣和電影特征矩陣然后用矩陣乘法預(yù)測(cè)用戶(hù)對(duì)未看過(guò)電影的評(píng)分。但 ALS 有兩個(gè)天然痛點(diǎn)論文里也明確說(shuō)了數(shù)據(jù)稀疏和冷啟動(dòng)。冷啟動(dòng)已經(jīng)靠人口統(tǒng)計(jì)學(xué)推薦兜底了數(shù)據(jù)稀疏則依賴(lài)我們輸入 ALS 的數(shù)據(jù)質(zhì)量。常見(jiàn)做法是把評(píng)分人數(shù)少于閾值的電影過(guò)濾掉再把評(píng)分矩陣做歸一化讓模型更容易收斂。這塊我在改造章節(jié)會(huì)給出具體參數(shù)建議。3. 核心實(shí)現(xiàn)逐段拆解從 MongoDB 讀取到推薦結(jié)果落地3.1 Spark SQL 讀取 MongoDB連接器與 DataFrame離線(xiàn)推薦的第一步是把 MongoDB 中的數(shù)據(jù)加載成 Spark DataFrame。項(xiàng)目里沒(méi)有用自定義讀取器而是直接用了官方 MongoDB Spark Connector。加載評(píng)分表和電影表的寫(xiě)法如下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用戶(hù) 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)電影類(lèi)別切分與近期熱門(mé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 // 按 | 切分電影類(lèi)別如 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 }) // 各類(lèi)型電影 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è)類(lèi)別”這一行數(shù)據(jù)展開(kāi)成三行每個(gè)類(lèi)別一行這樣后續(xù) groupBy 才能按類(lèi)別獨(dú)立排序。窗口函數(shù)row_number() over partitionBy負(fù)責(zé)在每個(gè)類(lèi)別內(nèi)部取評(píng)分最高的 10 部。如果你的數(shù)據(jù)里有一些只有一兩人評(píng)分的電影建議在agg之后加一個(gè)過(guò)濾條件只保留score_count 10的影片否則“平均分第一名”容易被單條高分評(píng)價(jià)刷上去。近期熱門(mén)統(tǒng)計(jì)更簡(jiǎn)單對(duì) ratings 表用 UDF 過(guò)濾近一個(gè)月的評(píng)分然后按 mid 聚合計(jì)數(shù)取 Top N 寫(xiě)入 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í)遇到未見(jiàn)過(guò)的用戶(hù)/電影直接丟棄而非報(bào)錯(cuò) val model als.fit(training) // 為每個(gè)用戶(hù)生成 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ò)的用戶(hù)或電影默認(rèn)會(huì)拋異常。線(xiàn)上系統(tǒng)里每天都有新用戶(hù)新電影所以必須設(shè)置成drop或nan丟棄無(wú)法預(yù)測(cè)的條目而不是讓整個(gè)批次失敗。rank 參數(shù)常見(jiàn)取值范圍是 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)隱含了“同類(lèi)型電影向量接近”的特性。3.5 后端接口與前端調(diào)用的銜接推薦結(jié)果算完后展示層還需要后端接口。Spring 后端提供了四類(lèi)核心接口登錄注冊(cè)、獲取首頁(yè)推薦、詳情頁(yè)相似推薦、提交評(píng)分。前端 AngularJS 通過(guò) HTTP 調(diào)用這些接口渲染推薦列表RestController RequestMapping(/api/recommend) public class RecommendController { Autowired private MongoTemplate mongoTemplate; // 首頁(yè)推薦讀取離線(xiàn)推薦表按用戶(hù)返回混合結(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)分寫(xiě)入 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è)接口的寫(xiě)法比較直白但它把分層關(guān)系講清楚了前端只認(rèn) userId不關(guān)心推薦結(jié)果的來(lái)源是離線(xiàn)統(tǒng)計(jì)還是協(xié)同過(guò)濾后端通過(guò)對(duì)UserRecs聚合實(shí)現(xiàn)多路推薦融合。如果你想加一路“熱門(mé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 開(kāi)三臺(tái) CentOS 虛擬機(jī)搭一個(gè)四節(jié)點(diǎn) Spark 集群1 Master 3 Worker三臺(tái)機(jī)器的主機(jī)名分別設(shè)計(jì)為 hadoop102、hadoop103、hadoop104。之所以從 hadoop102 開(kāi)始編號(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文件里填寫(xiě)三個(gè) Worker 主機(jī)名修改spark-env.sh指定SPARK_MASTER_HOSThadoop102、SPARK_MASTER_PORT7077完成后在 Master 節(jié)點(diǎn)執(zhí)行start-all.sh瀏覽器訪(fǎng)問(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ì)了兩類(lèi)集合一類(lèi)是原始數(shù)據(jù)——User用戶(hù)、Ratings評(píng)分、Movies電影另一類(lèi)是推薦結(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à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í)推薦模塊做緩存緩存用戶(hù)最近評(píng)分記錄和熱門(mén)推薦結(jié)果。配置項(xiàng)只需要改兩處bind 0.0.0.0允許遠(yuǎn)程訪(fǎng)問(wèn)maxmemory設(shè)一個(gè)合理上限如 2GB避免緩存無(wú)限增長(zhǎng)把內(nèi)存吃光。Elasticsearch 的作用是搜索。電影搜索功能沒(méi)有走 MongoDB 的模糊查詢(xún)而是把電影標(biāo)題、類(lèi)別、主演信息同步到 ES用 ES 的倒排索引做全文檢索。配置上需要注意 ES 的network.host要改成虛擬機(jī)能訪(fǎng)問(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)依賴(lài)順序很關(guān)鍵錯(cuò)了會(huì)出現(xiàn)“Spark 任務(wù)提交成功但讀寫(xiě)數(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 或開(kāi)發(fā)服務(wù)器訪(fǎng)問(wèn) localhost:8088啟動(dòng)完成后驗(yàn)證路徑瀏覽器訪(fǎng)問(wèn)localhost:8088能看到登錄頁(yè)登錄后首頁(yè)能看到“熱門(mén)推薦”“近期熱門(mén)”“高分電影”三個(gè)榜單點(diǎn)進(jìn)任何一部電影詳情頁(yè)能看到相似電影給任意電影打 5 分后隔幾秒刷新首頁(yè)實(shí)時(shí)推薦區(qū)應(yīng)該出現(xiàn)與剛評(píng)分電影類(lèi)型相近的影片。這四條驗(yàn)證過(guò)了系統(tǒng)鏈路就算通了。4.5 推薦任務(wù)的手動(dòng)觸發(fā)離線(xiàn)推薦任務(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. 常見(jiàn)問(wèn)題避坑偽分布式環(huán)境下的血淚經(jīng)驗(yàn)5.1 Spark 任務(wù)報(bào)錯(cuò)找不到 MongoDB 驅(qū)動(dòng)類(lèi)現(xiàn)象提交離線(xiàn)推薦任務(wù)后任務(wù)在讀取 MongoDB 階段拋出ClassNotFoundException: com.mongodb.MongoClient或類(lèi)似驅(qū)動(dòng)類(lèi)缺失錯(cuò)誤。原因Spark 集群的 Executor 節(jié)點(diǎn)沒(méi)有加載 MongoDB Connector 的依賴(lài) jar。本地 IDEA 運(yùn)行時(shí)依賴(lài)在 classpath 里沒(méi)問(wèn)題但spark-submit提交到集群后Executor 的 classpath 是獨(dú)立的。解決打包時(shí)把依賴(lài)打進(jìn) fat jar或者提交任務(wù)時(shí)用--packages org.mongodb.spark:mongo-spark-connector_2.11指定依賴(lài)。從那以后我每次提交 Spark 任務(wù)都強(qiáng)制檢查一遍--packages列表和代碼里 import 的包一一對(duì)應(yīng)。5.2 Executor 頻繁 OOM任務(wù)卡死在 SCHEDULED 狀態(tài)現(xiàn)象離線(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 疊加直接吃滿(mǎn)內(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ì)象比如配置類(lèi)實(shí)例、SparkSession 以外的全局變量這個(gè)外部對(duì)象必須可序列化否則閉包無(wú)法在 Executor 間傳輸。本地模式下 Driver 和 Executor 在同一 JVM問(wèn)題不會(huì)暴露。解決UDF 內(nèi)部不要引用外部非序列化對(duì)象把所有依賴(lài)封裝成Serializable案例類(lèi)或者在 UDF 內(nèi)部直接創(chuàng)建所需對(duì)象。我的習(xí)慣是任何 UDF 先問(wèn)自己“如果它在另一臺(tái)機(jī)器上執(zhí)行需要帶什么東西”只帶字符串和基本類(lèi)型就是最安全的。5.4 Elasticsearch 啟動(dòng)后外部無(wú)法訪(fǎng)問(wèn)現(xiàn)象ES 在本機(jī)啟動(dòng)正常curl localhost:9200有響應(yīng)但在另一臺(tái)機(jī)器上訪(fǎng)問(wèn)hadoop104:9200超時(shí)或拒絕連接。原因Elasticsearch 默認(rèn)只綁定127.0.0.1虛擬機(jī)上的 Spark 應(yīng)用當(dāng)然訪(fǎ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è)面能打開(kāi)但登錄后一直跳回登錄頁(yè)現(xiàn)象localhost:8088 的頁(yè)面加載正常輸入用戶(hù)名密碼后接口也能返回成功但頁(yè)面刷新后又回到登錄頁(yè)。原因AngularJS 前端把登錄狀態(tài)存到了瀏覽器 localStorage但后端接口跨域或 Cookie 配置了Secure屬性導(dǎo)致 Cookie 沒(méi)寫(xiě)進(jìn)去。Spring 后端返回登錄態(tài)時(shí)如果沒(méi)有正確配置跨域頭瀏覽器會(huì)攔截寫(xiě)入。解決后端在 WebMvcConfigurer 里配置 CorsRegistry允許前端域名跨域請(qǐng)求帶上 Cookie同時(shí)確認(rèn)登錄接口的響應(yīng)頭包含Access-Control-Allow-Credentials: true。如果用了 Nginx 代理前端還要檢查代理配置是否把 Cookie 頭透?jìng)髁恕?. 二次開(kāi)發(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熱門(mén)榜乘 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è)熱門(mén)榜都可以做成定時(shí)任務(wù)預(yù)熱進(jìn) Redis前端接口只讀緩存降低 MongoDB 讀壓力。改造點(diǎn)是在離線(xiàn)任務(wù)結(jié)束后加一步寫(xiě) Redis 的操作。驗(yàn)證改造效果的方法不需要上線(xiàn) A/B準(zhǔn)備兩組用戶(hù)一組走老邏輯一組走新邏輯各推 50 部電影比較兩組用戶(hù)的點(diǎn)擊率和評(píng)分?jǐn)?shù)量。這個(gè)比較可以在 MongoDB 里直接用聚合查詢(xún)完成不用額外搭數(shù)據(jù)平臺(tái)。這套工程我前前后后拆過(guò)兩次每次都被同一個(gè)問(wèn)題卡住偽分布式環(huán)境下只要集群一重啟MongoDB 里的推薦結(jié)果表和 Redis 緩存就不同步。從那以后我每次改完離線(xiàn)任務(wù)都強(qiáng)制走一遍“清空結(jié)果表 → 重跑離線(xiàn)批 → 刷新 Redis 預(yù)熱”的流程確認(rèn)三份數(shù)據(jù)一致才交給前端驗(yàn)收。做推薦系統(tǒng)數(shù)據(jù)一致性和算法效果一樣影響體驗(yàn)——希望這篇拆解能幫你少走我來(lái)回折騰的那幾步路。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日韩不卡网操逼中文字幕日韩| 肏逼视频日本| 一色网男人的天堂| 激情综合网五月婷婷五月天| 99热在线播放| 嗯嗯啊好爽| 一区| 伊人久久大香线综合无码| 精品一二三区久久AAA片| 无码区蜜乳| 欧美色网络| 舔舔啊| 久久、1234| 国产欧美日韩在线观看麻豆传媒公司| 91c色| 99热| 国产拍偷精品网站| 精品人妻一区二区三区四区石在线| av草草在线电影| 久啪| 欧洲精品人妻| 久久做97| 色狠狠综合噜一二三区| 成人情色一区二区| 91精品成人www| 操逼网站地址| 黄页大片在线观看| 国模一区二区三区| 四虎AV在线观看| 四色永久成人网站| 91五月天| 久久久久久大| 久久綜合很很很| 久久久影院| 97高清啪啪| 岛国AV一区二区电影| 久久五月份| 天天肏夜夜肏| 久久怡红院| 天天日天天舔天天喷天天射| AV天堂丝袜| 97青青操视频| 久久影视二区三区行押| 亚春色色| 国产一线二线三线av| 骚鸭AV| 白丝一区| 午夜激情成人在线观看| 亚洲精品亚洲人成在线麻豆| 韩日精品四区| 九九久久首页| 好舒服视频| 巨乳特殊服务按摩| 熟女人妻一区二区三区免费看| 久久系列| 91久久九九精品国产综合| 影音先锋新男人| 日本一区二区三区四区免费观看| 亚洲宅男天堂| 9超碰免费| 干B| 国产精品伦理| 国产精品爆乳懂色蜜乳| 日韩午夜精品一区二区三区电影| 99视频精品| 亚洲中文人妻色| 日韩美女高潮喷水视频| 91日韩网站| 搡老女人老91妇女老熟女| 国产 日韩,欧美 自拍| 国产大陆天天艹| 青青操狠狠撩| 老熟女91av| 美女主播色欲91抠b在线播放| 人人操超碰在线| 亚洲天堂久久久久久粉红视频| 欧美午夜视频免费观看| 大香交伊人网| 人人妻人人爽一区二区三区| 中国AV美女| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 91操人视频| 一区久久久二区| 久久人妻无码毛片A片麻豆| 91免费看中出视频| 逼逼逼逼操操操操操操操操操午夜剧场| 国产三级日产三级韩国三级| 蜜臀久久99精品久久久久免费观| JuliaAnn丝袜熟女系列| 日本一区二区不卡精品| 九九九九九用不成了| 91无码精品| 又大又长又粗又爽又黄| 精品久久久久9999| 亚洲色电影在线| 欧美综合娱乐久久| 亚熟在线| a片在线播放| 五月丁香啪啪| 91观看 国产白丝| yellow网站免费观看日韩高清无码| 男人的天堂网免费| 欧美AB在线| www.99视频| 色哟哟av| 亚洲另类久操网| 美女诱惑久久| 欧美日不卡| 日天天九九天堂666| 手机在线播放国产福利| 中文字幕十五区| 女人天堂av在线播放| 激情五月天视频| 久久婷婷亚洲欧| 亚洲 小说 欧美 激情 另类| 欧美 亚洲 另类 综合| 亚川综合视频| 欧美色图 人妻| 韩国一级婬片A片无码天美 | 欧美日韩操逼动图| a片亚洲一本通视频| 亚洲欧美综合区自拍另类| 97干天天| 岛国视频一二三区| 欧美第二页午夜| 艹比视频国产精品| 亚洲欧美综合图片| 狂操嫩妻视频一区二区三区| 又粗又长又大国产不卡| 怡春苑东京热| 亚洲综合精品国产一区| 精品97久久| 丁香五月婷婷基地| 激情综合网亚洲| 欧美色图中文字幕| 欧美日韩一区二区三区四区蜜桃| 九一性生活免费视频| 日本成人电影资源网| 青操影院| caopeng97| AⅤ片水多多| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 婷婷丁香五月天亚洲天堂网| 蜜桃视频啊啊啊啊| 五月天婷婷影院| 91精品国产91久久福利| 嫩草影院永久在线制服丝袜| 操逼网免费无码视频| 操熟女91| 亚洲狼狼干综合1| 思思热在线cao| 色偷偷综合91久久噜噜| 中文字幕高清20页视频| 激情九月婷婷| 欧美呦呦性爱| 少妇天堂| 美女诱惑在线一区| 在线观看一卡二卡| 91精品国产麻豆国产自产在| yiqicaoav| 亚洲欧美国产va在线| 日本肉体xxxx裸交| 精品v日韩欧美国产| 婷婷20月天青娱乐| 蜜桃臀AV在线| 人妻内射一区二区在线视频| 久操大香蕉手机视频在线看| av无码精品久久久久| 这里只有精品97| 日韩99神马视频片| 69精品少妇一区二区三区蜜桃| 思思热免费在线视频| 久久久久久999| 欧美传媒一区| 日日干日日操五月天伦理视频| 亚洲蜜桃V妇女| 欧美亚洲中文| 91制服丝袜| 黑人精品久久97| 日韩三级久久久| 激情五月婷婷综合| 久久夜黄色无码A级大片| 男人天堂2017| 亚洲中文sv| 亚洲综合情色| 欧美亚洲成人在线一区二区三区| 综合网,亚洲,欧美| 少妇免费视频| 日韩草久视频| 亚洲欧洲偷拍一区| 天天日天天插| 五月激情在线| 夜夜嗨AV一区天天| 九九色图| 丁香五月婷婷啪啪| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 欧美aa一级片| 女欧美一区二三区| 国产精品第一区第一页| 九九九九热| 婷婷超| 另类av综合久久| 天美国产精品| 久久精品视频28| 性色乱AV一区二区| 精品射1999| 欧美三级不卡| 欧美在线官网| 天天日日本| 日本裸体久久色噜噜| 日本 成 人 小说 电影 一区二区| 成人性爱全视频观看| 激情五月天插| 国产精品一区二区三区,亚洲综合| 免费看片黄| 男人女人18禁片免费看网站| a亚洲欧美色欲| 欧美中文字幕日韩在线| 性爱视频啪啪啪啪| 美中日韩无码| 色婷婷色99国产综合精品| 天天干天天狼在线视频| 亚洲精品男人的天堂| 欧美色图天堂在线| 黄色不卡视频| 亚欧操逼片在线观看 | 国产精品剧情| 亚洲AV麻豆Aⅴ无码电影一| 国产强奸乱伦无码视频| 亚洲AV无码AV吞精久久久久| 长长久久88视频| 色妺妺在线视频| 91人妻视频| 欧洲亚洲天堂精品| 啪啪啪亚欧美视频| 激情无码日韩| 久妇网| 玖玖资源中文字幕制服丝袜| 国产三级中文字幕粉嫩| 欧美天天综合| 午夜福利免费福利视频| 丁香激情五月| 美日韩在线不卡人妻| 日韩av电影网站| 久久久一区二区三区四区五区| 亚洲精品一二牛牛| 日本女人操逼| 欧美日韩国产电影| 91模特在线观看| 天天色图| aaa一级黄片| 久久啊哟| 亚洲丝袜综合| a天堂视频| 亚洲精品一二三四区| 天天插天天操天天摸天天射天天看| 综合亚洲网| 黑人精品一区二区在线播放| 亚洲av强奸乱伦| 日韩二级| 99久草| 97人人操人人摸人人爱| 啊啊啊啊啊啊啊国| 91丝袜人妻| 国产精品熟女九色九色蜜臀| 日韩丝袜人妻AV| 色偷偷2020免费视频播放| 视频一区二区三区精品| 午夜免费视频1000| 这里都是精品| 超碰人人超在线观看| 九九九久千久久激情蜜桃在线看| 天堂性色| 人妻少妇色综合| 天天操天天日天天干| 亚洲本色精品一区二区久久| 污啪啪啪视频| 久久国产精品一区二区| 国产成人无码高清| 欧美在线视频观看一二三四区高清| 午夜精品久久一区二区| 青青操青娱乐| 精品一区二区三区麻豆| 日本99久久| 亚洲天天精品| 日韩人妻免费精品| 久久精品区| 亚洲国产成人高清在线| 九九九不卡| 久久久久成人亚洲国产| 偷拍亚洲视频一区二区三区四区| 91爆操视频| 欧美天堂亚洲电影院一区在线播放| 久久性生大片免费观看性| 五月婷婷丁香| 中文字幕欧美丝袜07资源| 久久久久免费少妇| 搡老女人911熟妇老熟女| 超碰97爽| 91东京热男人的天堂| 97视频在线观看高清资源| 免费av高清无码| 综合天天网| 免费一级精品啪啪视频| 亚洲精品人伦一区二区| 欧美超碰9798| 久干9操| 九九九九一级| 久久亚洲婷婷| 97超碰精品| 日韩av熟女一区二区三区成人| 中文字幕人妻资源在线| 国产精品不卡一区二区三区| 中国探花熟女| 中文字幕一区二区视频在线观看| 中文字幕免费观看| 尤物一级在线免费观看| 四虎免费在线观看| 青青草大香蕉在线视频| 强免费黄色网址| 999久久久九九九九| 日日日啊啊啊| 人人干人人搞人人摸| 国内精品99999| 91亚·色| 午夜福利成人免费视频| www.99色| 亚洲精品97p| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 青青青国产手线观看视频2| 九九九久久久久| 日韩女模中文造逼| 高清无码久操视频| 亚洲激情在线| 99久在线精品99re8a| 亚洲成人免费电影| 日韩美女操b| 成人九九| 人人妻人人色一区二区三区| 国产精品久久久久久夜夜夜| 久久性爱大全| 天天做日日做| 99热这里只有精品18| 91热情品| 精品99999久久久久久| 3028国产精品| 97超碰站| 欧亚日韩中文在线| 人人妻天天做天天爽| 天天影视网综合少妇| 久久性爱网站| 翔田千里一区二区三区奶水| 翔田千里A片一区二区| 亚洲脚交| 黑人精品久久97| 久久a久久| 99热9| 亞洲久久直播| 欧美黄色大片在线观看| 男人天堂网站| 欧美超碰97| 超碰欧美97资源| 欧美页片| 宗合情欲网| 丝袜 亚洲 偷拍| 国产成人精品亚洲日本| 色婷网| 国产第25页在线观看| 色综合一本| 综合 亚洲 欧美| 曰本道人妻久久久在线不卡色视频| 好爽,再快点啊哈嗯嗯嗯嗯| 六月丁丁香| 丁香六月啪| 天天躁日日躁XXXXYY| 国产一区二区a毛片| 在线有码中文字幕| a一区二区三区乱码在线| 国产美女口爆吞精视频| 99久久精品无码一区二区毛片免费| 国产精品999aaa| 啊v在线观看视频| 欧美热图99| 国产精品另类一区大香蕉| 色阁阁AV综合网| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 18禁免费视频| 日韩在线观看字幕精品| 五月婷婷激情网| 国产激情久久久| 色色丁香| 天天肏美女| 天天香香欲综合| 国精综合一二三区影视| 日韩熟女视频二区| 日夜伊人网| 久久久久97| 日韩有码 一区二区三区| 日韩欧美亚洲自拍偷拍| 久久性生大片免费观看性| 麻豆国产97在线| 亚洲欧洲综合成人av一区| 欧美激情性久久久久久| 国内自拍 日韩激情 99| 天天插天天插| 9久精品视频在线观看| 丝袜狠狠草尤物 91| 香蕉国产97| 97天天操| 日韩人妻制服丝袜av| 日韩性爱小视频在线观看| 亚洲超碰在线| 亚洲欧洲日产国产综合网| 激情婷婷丁香| 日韩欧美性爱电影在线观看| 秋霞成人一级在线观看| 久久精品人体AV| 97精品久久久久久久| 久男人久久| 97天堂| www.伪伪| 91欧美高清| 日本最新1区2区3区| 国产精品农村妇女| 一起草日韩| 亚洲日韩AV视色| 999九九精品| 亚洲丝袜诱惑| 综合色图区| 伊人网在线观看| 9久久久久久| 国产美女裸体秘 永久无遮挡| 亚洲天堂 视频你懂的| 91女人的网站| 亚洲一区二区av| 欧美日韩国产三级黄色| 麻豆天美国美国产| 骚鸭AV| 狼狼色丁香久久婷婷综合五月| 久热婷婷| 亚洲欧美综合网站| 青草草免费网站av| 国产suv精品一区二区四| 成人日本片久久久蜜桃| 色色福利| 91黑丝美女| 亚洲欧美不卡线| 午夜男女爽爽爽在线视频| 大香蕉欧美国产日韩高潮| 试看60秒 爽| 综合久| 精品制服美女中文一区二区三区| 久久精品人人做人人看| 欧洲Au麻豆| 久久青青草在线视频| 国产乱伦一二三区| 欧美综合网站999| 激情无码日韩| 色www精品视频在线观看| 亚洲av综合伊人久久| 加勒比无码一区二区三区| 欧美视频一区二区三区| 亚洲经典啪啪| 久久日韩肥臀| 天天插天天射| 亚洲熟女综合网| 狂操嫩妻视频一区二区三区| 欧美天天干| 久操大香蕉手机视频在线看| 97日亚洲欧美| 北京专精特新企业招聘信息| 欧美片第一页| 人人噜夜夜操| 户外裸露刺激视频第一区| 天堂亚洲精品久久老牛| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 96免费视频在线| 欧美性生活男人的天堂| 99精品丰满人妻| 天堂俺去俺来也www久久婷婷| 91欧美美女日韩国产婷婷| 人人玩人人添人人澡免费| 欧美aⅴ99久久黑人专区| 黄片视频,下载| 97在线青| 亚洲欧美日韩夜夜| 99re超碰| 小明看看网址| 丁香五月激情综合国产| suv精产一二三区| 99久久com免费视频′| 日韩极品无码B| 国产精品不卡一区二区三区| 乱伦熟女区| 久久久96| 欧美第二页午夜| 婷婷五月天成人| 久久国产AⅤ| 男人的天堂日韩| 久操操| 欧美偷拍区| 激情婷婷丁香网| 日本久久久久久久久| 蜜乳av一区二区| 99在线观看视频在线高清| 九九视品黄色| 日本三级R| 亚洲美女av无码| 欧美一级专区免费大片| 97超碰jingpin| 日韩久久.一级黄色片| 亚洲色图A| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 偷拍导航视频网站| 久久人人爽爽爽人久久久| 自拍大香蕉乱插| 日韩成人私密一级精品av| 亚洲国产中文字幕| 久久成年精品| 天天添天天干电影| 久久99午夜精品一区人妻| 欧差乱伦二三| 97超级久久| 亚洲综合贴图91| 十八禁网站在线| 秋霞欧美性爰视频| 口爆吞精在线观看| 51久久夜色精品国产麻豆| 偷拍导航视频网站| 九九九九九九九| 欧美性爱一区二区三区四区| 97久久久久久久精| 丁香五月偷拍| 国产成人久久久精品免费AV| 国产精品一区二区三区,亚洲综合| 白嫩少妇| 精品78| 超碰97伊人| 欧美日韩精品青青| 亚洲drav色图| 91日产欧美| 久久、1234| 国产怡红院| 人妻丝袜无 码视频专区| 粉嫩av在线一区二区| 国产一级内射无挡观看| 欧美区亚洲区偷拍区 | 一区二区三区国产精产| 亚洲91少妇| 屌逼麻豆| 伊人影院中文字幕| 天天综合网国产| 国产精品天美传媒| 97AV爱| 狠狠躁AV| 99re这里只有精品3| 神马精品视频| 精品国产自在在线99| 日本免费中文一区二区三区四区| 欧美激情综合| av天天在线观看| 日韩人妻操B| 91青视频| 东北老女人的激情视频| 二三四区精品| 激情内射| 91 丝袜在线播放| 亚洲无码视频免费在线观看网址!| 久久春色| 国产久久成人| 日韩黄色电影网站| 色蜜AV| 超碰97在线 欧美 国产| 男人把坤坤插入女人的下体| 蜜臀久久99'精品久久久| 51一区二区三区| 中文字幕成人乱码熟女精品国50 | 五月天丁香| 欧美日韩m| 青青国产在线拍揄自揄拍| 男人把坤坤插入女人的下体| 狠狠躁久久躁| 狠狠久久手机视频精品| 伊人久久大香线蕉无码| 国产一级片| 色女网日韩| 超碰天天操你比| 青草伊人久久| 2024年最新色情网站在线观看| 国产a片操逼| 自拍大香蕉乱插| 色噜噜综合在线| 日韩少妇无吗| 91爱网| 国产精品激情久久久久久久| 中文字幕啊啊啊在线观看视频| 动漫片子网站3黄| 九九人妻| 97无码视频在线播放| 久久激情亚洲精品无码?V| 日韩精品一二三四| 国产精品天干天干综合网麻豆| 91天美免费| 一起草欧美| 日韩成人精品中文字幕| 青青草白白色| 日韩精品人妻| 欧美黄色片AAAAA| 麻豆性爱视频在线播放| 欧洲视频在线| 最新中文字幕在线亚洲| 亚洲狼狼干综合1| 另类欧美综合| 免费簧片在线观看| 少妇人妻无码| 日韩欧美日韩| 无码色| 精品人妻伦一区二区三区久久| 91久久青青草原精品| 久草视频分类在线| 亚洲欧洲无码一区夜| 秋霞 色色| 婷婷色在线| 欧美九一精品久久久熟妇| 伊人丁香五月婷婷| 日本天堂网| 天天噜| 亚洲精品色| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 影音资源男人日韩| 国产欧美岛国精品一区| 另类av天堂| 日韩三级伦理中文字幕| 久久久草成人网站久久久草成人久久久草久久久 | 香蕉精品二区二区| 凹凸视频特色日本特黄| 北野未奈加勒比av| 约操熟妇| 欧美日韩美女精品久草一区二区三区| 国产强奸乱伦xd| 极品内射| 欧美一级国产一级| 狠狠做深爱婷婷久久二区| 自拍偷拍亚洲熟女妇人精品| 无码动漫av中文字幕| 91欧美经典| 97国产中文| 99夜夜操| 日韩婷婷| 欧美日韩人妻精品一区二区三区 | 91精品综合久久久久久五月丁香| 嗯嗯啊好大| 爽极品影院| 小草精彩毛片| 四方色播| 看看小穴| 亚洲欧美97√| 中文字幕 码 自拍 视频 区| 欧美亚洲高清晰 | 天天综合~91入口| 78m啪啪啪| 99综合网| 亚洲欧美999| 夜夜操夜夜爽夜夜高潮| 偷拍精品一区二区三区| 91一区二区| 中文一区二区三区影院| 污啪啪啪视频| 亚洲精品久久久久久久蜜桃臀| 中文高清一区二区的| 综合久久9| 麻豆性爱视频在线播放| 日韩欧美成人午夜福利| 97超碰久久色| 少妇干B| 加勒比色99999| 亚洲高潮少妇| 青草草免费网站av| 日日干夜夜欢| 五月天婷婷久久| 韩国三级一线观看久| 天天日日日射| 综合五月婷婷| 波多野结衣AV无码一区| 色偷综合| 欧美在线伊人色| 东北丰满熟女国产一区| 嗯嗯啊啊啊好爽| 极品内射| 91粉嫩萝控精品福利网站_精品影音先锋国 | 精品亚洲黄色片 国产精品导航一区二区| 操淫穴亚洲五月丁香| 超碰久热| 二男一女成人A片| 91色夜| 超碰天天操| 婷婷综合五月| caoni国产亚洲av| 99这里有精品视频| 人人妻人人爽 97人人看碰人免费公开视频| 96久久久精品| 热久日综合| 国产精品视频电影| 国产精品老熟女一区二区| 狼人久草| 伦伦成年午夜免费视频| 久久亚洲中文字幕视频| 日日操夜夜操天天操免费观看麻豆| 91亚洲影院综合| 精品女人999| 亚洲天堂综合AV| 国产做?爰片久久毛片?片美国| 亚洲国产一区二区入口| 日本视频在线观看污污污| 乱伦色图网址是多少| 人人人干干人人干| 久久久久久久强迫| 国产极品馒头逼| 亚洲欧美不卡线| 久久九色| 国产精品亚洲天堂网址| 久久天天艹| 伊人久久综合精品欧美| 欧美劲爆视频一区二区| 日本在线播放不卡一区| 亚洲色图日韩精品| 亚洲综合中文字幕有码| 中字乱伦AV| 五月丁香六月激情综合| 丁香久久| 日欧毛片久久| 久久久久九九九九九| 日韩91网| 国产av激情无码久久天堂| 国产丝袜美女在线一区| 欧美黑人精品在线播放| 熟女乱伦二区| 五月天伊人| 97超色| 中文操逼字幕| 91在线超高颜值国产| 国产精品久久久三级无码| 91n美女视频| 久久精品老司| 老熟女综合网| 嗯啊视频免费在线观看| 激情五月天丁香社区| 69AV女优男人的天堂| 人妻熟女一区二区在线视频| 伊人网免费视频| 久久秀这里有精品| 亚洲色香| 亚洲图片视频小说| 久久草视频污视频| 日韩激情视频| 中文一区二区| 亚洲 中文字幕 精品| 日韩av在线精品观看| 亚洲国产精品久久久久婷婷老年| 欧美九九爱| 亚洲青青草| 74成人在线| 蜜桃久久久久久| 青青草这里只有精品| 蜜乳Av成人片网站| 久久国产精品91| 欧美999| 婷婷视频网| 玖玖爱视频网站| 激情五月天丁香社区| 嗯嗯,好大,好爽,好骚| 美女天天干| 亚洲不卡av在线| 在线播放成人高清免费视频 | 亚洲国产麻豆一区二区三区| 国厂麻豆77q4| 日韩欧美综合激情| 久久久久幕乱码| www狠狠| 草草草视频在线免费看| 极品五月天噜噜| 人人爱人人乐人人操| 国产精品久久发布| 中国熟女老妇仑乱一区二区三区| 少妇免费视频| 9丨亚洲一区二区在线| 日韩精品9区| 亚洲超碰在线| 亚洲色婷婷久久91| 91欧美性| 色五月综合| 波多野结衣之双飞调教在线播放| 日日黄色三级网站| 日韩成人精品视频自拍| 欧美色图片色哟哟| 嗯嗯啊好大| 国产精品熟女乱伦| 精品人妻一区二区三区日产乱码| 国产人妻一区二区三区欧美毛片| A片三级无码| 囯产精品久久久久久久久久梁医生| 蜜臀久久久国产| 日本狠狠干| 欧美日韩色综合网| 久久人妻熟女一区二区| 有码色中文字幕在线观看| 日韩乱码av| 国产福利影视| 欧美大香蕉同搞| 日本久久女同性恋视频| 丰满熟女人妻一区二区三五十一路| 欧美成人9797| 玖玖综合.com| www…国产操逼| 欧美性爱无码一区二区三区| 久久精品一区二区一8| 老色鬼成人精品视频下载大在线观看| 欧美性爱一内片一区二区三区| 激情综合五| 色牛牛AV| 久久精品中文字幕无码l| 手机看片日韩人妻| 97超碰美女| 亚州综合色| 97色欧洲| 密臀国产在线| 青青操在线视频| 亚洲午夜蜜臀| 久久风骚城市人| 清纯唯美综合| 久艹免费| 亚洲国产精品久久AV| 熟女探花啪啪| 五月天我淫我色av| 美国人人操人人操| 中文字幕日本久久| 激情色播| 乱老熟女一区二区三区| 欧美色日本| 中国小夫妻勾搭露脸淫荡对白| 欧美综合制服在线| 加勒比伊人综合| 久久影视二区三区行押| 国产9熟妇视频网站| 日韩熟女操逼| 乱伦1色页| 校园春色 男人天堂| 天天摸夜夜摸| 欧美图片校园春色| 亚洲动态色图| 亚洲超碰AV| 四虎免费看黄| 大香蕉狠狠爱| 91精品久久久久五月天精品| 男人的天堂一区三区| 蜜臀av一区二区三区免费观看| 麻豆性爱视频在线播放| 久久精品无码熟妇一区二区三区视频导航 | 五月婷在线| 亚洲天堂日本| 欧美十八禁视频| 国产999精品久久久久久| 美女干逼2| 国产 日韩 欧美一区| 亚洲综合五月天婷婷丁香| 亚洲国内精品成人不卡| 美欧色综合| 天天摸,夜夜摸| 99精品无码| 欧美一区二区观看在线| 天天天天天天天天综合| 高清国产精品福利网站| 日本在线一二 | 无码人妻丰满熟妇奶水区毛片| 色约约一区=区三区| 人人摸人人干人人拍97| 99热日| 久草视频在线视频在线视频在线观看| 欧美色图亚州激情| 国产精品福利视频播放| 熟妇人妻一区二区三区| 91色综合| 亚洲精品 超碰| 伊人一区二区在线播放| 亚洲欧美另类少妇精品| 久操网址| 情色大香蕉| 超碰亚洲97| 日本精品中文字幕视频| 国产嫩草精品A88AV在线| 天天综合网91| 亚洲影院小综合| 超碰色男人操熟女| 清清草影| 思思热在线| 国产精品成久久久久午夜午夜| 99999久久久久9国产精品| 浓厚中出中文字幕在线| 天天操美美| 色综合色| 操国产逼| 九九国产| 大胆91| 91精品国产日韩欧美综合| 熟女91网| 91亚洲影院综合| 影音先锋国产精品| 亚洲国产成人精品999| 加勒比av网| 国产隔壁老王影院在线| 毛片视频白嫩| 蜜臀久久99精品久久久久久-DVD| 双插性欧美一二三区| 日韩欧美中文字| 成人福利视频网| 欧美 亚洲| av天堂手机版追回| 欧洲乱码视频| 一区二区三区亚洲| 中文字幕1区2区| 久久久久久九九九九-美女久久久久久久-成人AV | 亚洲蜜桃V妇女| 国产高清自拍视频| 人人妻人人爽人人精品| 欧美亚洲美少妇一区二区| 日韩精品国产精品五码一区二区| 乱伦AVxx| 一区操逼日比视频| 性videos欧美熟妇hdx| 亚洲黄色电影| 91高清日| 亚州黄站| 黑丝制服中文字幕| 日本超碰色精品| 中文字幕一区二区三四五区日日骚| 97视频网站在线观看| 人妻啊啊人妻啊啊| 9/A片| 国产伦精品免编号公布| 97色插| 亚洲城人男人的天堂| 亚洲男人的天堂一区二区| 一区二区三区四区五区高清无码永久视频| 国产成人资源| 久久有码| 天天操天天7| 精品人妻15区| 大香蕉综合网| 青娱乐福利99| 亚洲精品亚洲人成在线麻豆| 午夜精品探花| 97干在线| 男人 天堂 日 亚洲| 中文久久96| 天天天干977| 免费中文综合精品| 26uuu国产免费观看| 九九热最新| 二级久久网| 欧美情色亚洲| 亚洲黄色视频在线观看视频| 久久9视频| 99re3这里只有精品| 精品九九淫乱男| 欧美综合91| 午夜男人av| 精品女人999| 91 亚欧| 欧美大波激情xxxx| 欧美日不卡| 欧美淫乱视频| 少妇啪啪自拍| 91久久18禁| 91综合网在线| 黄片直播三级黄片两女一男| 亚洲一区二区三区麻豆传媒| 人妻人久久精品中文字幕| 亚洲精品国产精品成人| www.激情| 偷拍新久久| 图片区小说区| 久久熟女久| 欧美日韩性爱无码| 秋霞男人网| 澳门黄片一香蕉视频| 97超碰国产亚洲精品资源| 亚洲双插| 操操啪| 大香蕉伊人75| 久久熟女人| 五月丁香黄色网| 日韩女优在线| 国产精品电影大全| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 日韩熟女精品无码专区一区二区| 久久国产精品m码| 久久极品一区二区| 中国人高清www色视频免费| 九久9热| 老熟女乱子伦中文字幕一区二区| 亚洲欧美另类少妇精品| 做爱A级亚欧| 欧美91久久久久| 思思性爱| 97在线/亚洲| 青青草日逼视频| 国产美女口爆吞精视频| 在线97在线| 日本一区二区做爱的视频| 亚洲无码日韩电影| 久热伊人99re| 免费的很黄很污的全部视频| 国产97av| 亚洲丝袜B诱惑| 91在线精品| 女人综合网| 欧美久久人妻少妇一区二区| 激情看片网站| 国产99精品一区二区三区免费| 五月天亚洲网| 黑人中出21连凳花野真衣| 人妻久久久久久| 欧美综合娱乐久久| 大香蕉淫人| 九九免费影片| 好爽,再快点啊哈嗯嗯嗯嗯| 亚洲天堂无码| 午夜乱轮操逼视频免费看| 热热色综合网| 国模91| 成熟熟女国产精品一区二区| 色噜噜国产在线| 91视频国品一二三区| 国产Aα| 性爱乱伦视频免费| 岛国免费视频在线| 在线视频97| 精品高潮| 欧美精品宗合| 淫淫综合网| 人人妻人人爽一区二区三区| 曰本道人妻久久久在线不卡色视频| 欧美日本久久精品一区 | 久久天堂婷婷网| 久久激情五月| 五月婷婷六月激情| 男人的天堂啪啪啪啪啪蜜桃不卡| 国产女人91精品嗷嗷嗷嗷| 福利在线黄片| 日本午夜福利影院| 亚洲欧美精品一区天堂久久 | 亚洲国产91精品一区二区久久| 另类图片欧美激情综合| a片偷拍视频| 操逼1区| 中文自拍欧美影视| 日韩熟妇二区| 97色97好| 国产乱码久久久久久| 成人日本片久久久蜜桃| 综合久久2017| se吧提供91精品国产91久久久久久| 中文字幕国产在线天堂| 国产51色综合久久免费| 三级片网站在线播放| 中文字幕老熟妇黄色视频| 天堂在线一区二区| 亚洲素人综合| a片在线播放| 国产精品自在自拍视频| 亚洲天堂,男人| 一区二区三区无卡视频在线观看| 校园春色美腿丝袜 | 欧美天天影院| 国产美女销魂在线观看不卡| 把腿张开老子CAO烂你| 天天看天天综合成人网| 欧美激情亚洲情色| 久久永久无码人妻视频| 国产欧美日韩在线不卡第一页| 久久超碰97中文字幕| 久久精品店| 啪啪综合网| 日韩少妇在线视频| 伊人五月天婷婷| 天天操天天插| 亚洲欧美骚| 亚洲中文一区二区三区视频| 中文字幕在线观看网页| 亚洲色图欧洲| 激情五月天色色| 欧美草草高清日韩视频| 这里只有精品视频在线观看麻豆| 在线啊啊啊啊| 中文视频在线观看| 日本曲间由美性生活片| 日产精品久久久一区二区| 亚洲四虎熟女精品| 一级毛片久久久久久久女人18| 久久一区二区高清免费| 欧美日韩情色一区二区| 清纯唯美激情| 99久久婷婷丁香| 亚洲中文日韩欧美大香蕉视频| 97免费在线视频在线观看| 国产传媒操逼视频| 骚女天天综合网| 国产成人精品午夜福利| 一本一道人妻久久一区二区三区 | a片偷拍视频| 日本 情色 1区2区3区| 青青草亚洲一区| 亚洲激情在线| 亞洲久久直播| 99这里只有精品国产| 国产精品操| 少妇大屁屁| 欧美在线干| 97频视在线| 丝袜综合| 富二代亚洲精品99| 丁香五月激情综合| 免费看欧美美女黄色大片| 成人无码在线超碰网| 免费成人自拍视频在线| 97色操| 国产外初女出血视频| 人人搡人人肉久久精品| 欧美熟女激情| 神马久久久久眼| 蜜桃久久综合视频| 九九碰九九爱97| 日本三级日本三级99| 国产女性无套 免费观看| 无码操逼网| 色婷婷激一区二区三区 | 精品九九淫乱男| 夜精品久无码| 美女AV一区二区| 亚洲情色在线| 亚州综合色图| 成人精品欧洲亚洲| 激情视频一二三| 91丝袜在线视频| 亚洲drav色图| 91色伦| 成人九九| 亚洲小说视频| 97精品免费视频网站| 屁股久久久久久久久久| 久久久久久久精| 操逼网站网站| 伊人一区二区在线播放| 欧美亚洲第一页| 鸡巴插逼视频| 四虎精品永久在线观看| 91在线免费观看处女| 一区=区三区视频| 九九九久久久久| 日本黄色天堂|