久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

千鋒教育

掃一掃進入千鋒手機站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > 大數(shù)據(jù)面試題:用戶畫像、推薦系統(tǒng)、Flink實時數(shù)倉、準(zhǔn)實時數(shù)倉中常見問題都有什么?

大數(shù)據(jù)面試題:用戶畫像、推薦系統(tǒng)、Flink實時數(shù)倉、準(zhǔn)實時數(shù)倉中常見問題都有什么?

來源:千鋒教育
發(fā)布人:syq
時間: 2022-06-29 16:24:20 1656491060

  用戶畫像、推薦系統(tǒng)、Flink實時數(shù)倉、準(zhǔn)實時數(shù)倉中,遇到的棘手的問題都有什么?

  用戶畫像

  1. 我們在選擇如何存儲用戶標(biāo)簽時,遇到了問題(標(biāo)簽查詢速度慢,并且構(gòu)建不夠靈活,標(biāo)簽更新和刪除比較麻煩),比如之前用HDFS或者ES存儲,后來切換為ClikcHouse,并用BitMap存儲,原因如下

  針對標(biāo)簽的表示形式,存儲方式有很多,結(jié)構(gòu)為`寬表,BitMap` 都可以,存儲選擇`HDFS,ES,ClickHouse 等` 也都可以,需要衡量的有兩點`1.標(biāo)簽構(gòu)建的靈活性和構(gòu)建速度 2.標(biāo)簽的查詢效率 ` `HDFS [Presot,Impala]:` 標(biāo)簽的增加,刪除,更新不友好, 一個小變動,要重寫整個`Parquet`, 寫放大問題。 查詢效率還可以,但是不夠優(yōu)秀。 支持查詢并發(fā)較小。 `ES:`標(biāo)簽的構(gòu)建的寫入速度一般, 新增和修改標(biāo)簽需要對ES文檔結(jié)構(gòu)更新,ES的DSL語法不友好,有一定學(xué)習(xí)成本。查詢效率還算優(yōu)秀,同時支持高并發(fā)。 ES資源占用高,需要較好的硬件配置。 `ClickHouse[BitMap]` 標(biāo)簽可以并行構(gòu)建,查詢效率優(yōu)秀,標(biāo)簽的增加非常方便,標(biāo)簽的更新和刪除可以實現(xiàn),但是并不高效,并發(fā)查詢支持比Presto,Impala要好,但同樣不支持高并發(fā),能夠滿足大部分場景需求。注意兩點`1. BitMap存儲的是用戶ID 2. BitMap使用了RoaringBitMap, 解決BitMap空間占用問題,不然1億這一個數(shù)也要占用11.9M空間`

  2. 如何構(gòu)建用戶的稠密向量的問題

  如果我們直接將用戶的標(biāo)簽轉(zhuǎn)換為稀疏向量來存儲,對于類別標(biāo)簽使用`one-hot`編碼,但這樣會出現(xiàn)維度爆炸的問題,向量過于稀疏,向量之間的余弦相似度計算結(jié)果基本沒有意義,根本無法實現(xiàn)用戶相似度的計算。所以就開始思考如何將用戶表示為轉(zhuǎn)換為稠密向量,經(jīng)過調(diào)研發(fā)現(xiàn),Word2Vec可以將詞轉(zhuǎn)換為稠密向量,同時借助Word2Vec思想,也可以將物品轉(zhuǎn)換為向量Item2Vec,比如將一個Session內(nèi),用戶購買的物品或者點擊的物品列表,看成是一句話,每個物品看成是一個單詞,就可以借助Word2Vec的思想將物品轉(zhuǎn)換為稠密向量表示。(這里注意如果是文章,可以使用分詞,然后抽取關(guān)鍵詞,將詞通過Word2Vec轉(zhuǎn)換為向量的方式) ,我們再將用戶點擊或者購買的物品列表中物品向量加和求平均,就可以得到用戶的稠密向量。后來發(fā)現(xiàn)通過ALS模型`矩陣分解`的方式也可以得到用戶的稠密向量,兩者`表達的用戶向量含義`是不同的,一個是有濃重的物品屬性特征的,一個是有協(xié)同特征的向量。但是都可以作為用戶的向量表示方式。

大數(shù)據(jù)面試題

  推薦系統(tǒng)

  1. SparkML Pipline 訓(xùn)練模型通過PMML跨平臺部署時字符串轉(zhuǎn)向量的問題

  由于我們通過Pipline訓(xùn)練出來的排序模型,模型的輸入是之前存入HBase中向量(用戶和物品)字符串,當(dāng)我們使用`jpmml-sparkml` 這個類庫去生成PMML模型,進行擴平臺部署時,發(fā)現(xiàn)無法正常生成PMML。 原因是因為對于字符串轉(zhuǎn)向量這種`transformer操作` jpmml沒有支持,我們參照jpmml源碼的實現(xiàn)方式,做了自定義transformer的實現(xiàn)。原理是先自定義一個Spark ML的transform,然后再擴展一個jpmml對應(yīng)的converter即可。

  2. 特征向量Load到HBase慢的問題

  我們構(gòu)建出來的用戶特征向量和物品特征向量,最終是存儲到HBase中的,最初是使用HBase API寫入數(shù)據(jù),但是太慢了,整個數(shù)據(jù)的寫入要耗費5~6個小時,之后我們`使用了bulkLoad的方式`,直接通過使用Spark生成將數(shù)據(jù)`生成HFile文件`寫入到HDFS,然后使用blukLoad直接生成好的HFile文件mv過去即可,15分鐘完成。 更具體點,首先我們把我們將要寫入hbase的rdd,按照設(shè)定的行鍵排序,之后將行鍵和值構(gòu)造一個HFile的KeyValue結(jié)構(gòu),設(shè)定outputformat 為HFileOutputFormat2,將生成的hfile數(shù)據(jù)寫入到hdfs,之后通過doBulkLoad方法將寫到HDFS上hfile數(shù)據(jù)移動到hbase目錄中。(這些項目的代碼中都有)

  3. 多路召回結(jié)果如何如何統(tǒng)一排序的問題

  因為我們采用了多種召回算法,比如ItemCF,ALS, 基于熱門,基于地域 等召回算法。 沒有召回算發(fā)的結(jié)果集我們是無法直接排序的,因為各個召回算法表達的含義是不同的,最開始不知道該怎么做,因此就是各個召回算法設(shè)定一個人為比例去取。 之后學(xué)習(xí)了解到可以加`一個排序模型`做這個事情,原理就是用戶向量和物品向量作為基礎(chǔ)特征,用戶是否點擊物品作為標(biāo)簽,訓(xùn)練一個排序模型(LR),只有將各路召回策略輸入排序模型重新排序即可。 # 注意如果你同時說1,3問題,注意順序

  數(shù)倉問題

  1. Flink Watermark激增的問題

  參考:http://coder.yihongyeyan.com/question/7, `里面有watermark 激增的場景說明`。從這上面的我舉的例子,你應(yīng)該知道這種情況發(fā)生的原因,是因為我們抽取事件事件直接減去延遲時間造成,解決方式就是我們再抽取watermark時,判斷一下事件中的時間和上次watermark的時間,如果兩者時間相差很大,我們就不更新watermark或者將watermark加上一個小值就可以了,一般選擇不更新。

  2. 實時作業(yè)和離線作業(yè)的資源競爭問題

  因為我們統(tǒng)一用Yarn做資源調(diào)度,實時作業(yè)Flink(Spark Streaming)和離線作業(yè)會調(diào)度到同一個機器上,集群相對空閑時沒什么問題,但是當(dāng)集群負(fù)載較高時,尤其是晚上大批離線任務(wù)啟動,就會造成我們實時作業(yè)的某些Container所在機器負(fù)載過高,同時我們實時作業(yè)中如果有重計算邏輯,F(xiàn)link計算不過來,背壓產(chǎn)生,Kafka消費延遲,數(shù)據(jù)積壓。解決這個問題的方法是,YARN Label,給YARN管理的機器打上標(biāo)簽,離線和實時分開,提交作業(yè)時指定Lable。

  3. 實時作業(yè)調(diào)度集中的問題

  問題產(chǎn)生的背景是,當(dāng)提交一個作業(yè)時(Flink,Spark),作業(yè)不大,YARN上申請10個Container,發(fā)現(xiàn)10個Container都調(diào)度到一個節(jié)點上,或者大部分調(diào)度到一個節(jié)點上,幾個調(diào)度到另一個節(jié)點,資源分配傾斜。 這樣造成如果我的作業(yè)是一個重計算的作業(yè),10Container都在一個節(jié)點上,CPU load過高,計算延遲。 當(dāng)時出現(xiàn)這個問題,比較苦惱,不知道什么原因,也沒有search到解決方案,最后只能去看源碼了(我們用的是Fair調(diào)度器),發(fā)現(xiàn)Container的分配策略是在一個NodeManger心跳中盡可能多的分配Container,這是為了提升調(diào)度的吞吐,但是源碼中有參數(shù)可以控制,是否一個心跳允許分配多個Container,以及一次心跳最大分配多少個Container給當(dāng)前的NodeManager.這個參數(shù)Yarn已經(jīng)暴露給用戶了`yarn.scheduler.fair.assignmultiple` 默認(rèn)是true。`yarn.scheduler.fair.max.assign` 默認(rèn)是-1,就是無限制。 解決的方式是`yarn.scheduler.fair.max.assign` 設(shè)置為一個較小的值,比如2.

  更多關(guān)于大數(shù)據(jù)培訓(xùn)的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓(xùn)服務(wù)經(jīng)驗,采用全程面授高品質(zhì)、高體驗培養(yǎng)模式,擁有國內(nèi)一體化教學(xué)管理及學(xué)員服務(wù),助力更多學(xué)員實現(xiàn)高薪夢想。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
什么是PlatformIo?

PlatformIO是什么PlatformIO是一個全面的物聯(lián)網(wǎng)開發(fā)平臺,它為眾多硬件平臺和開發(fā)環(huán)境提供了統(tǒng)一的工作流程,有效簡化了開發(fā)過程,并能兼容各種...詳情>>

2023-10-14 12:55:06
云快照與自動備份有什么區(qū)別?

1、定義和目標(biāo)不同云快照的主要目標(biāo)是提供一種快速恢復(fù)數(shù)據(jù)的方法,它只記錄在快照時間點后的數(shù)據(jù)變化,而不是所有的數(shù)據(jù)。自動備份的主要目標(biāo)...詳情>>

2023-10-14 12:48:59
服務(wù)器為什么要用Linux?

服務(wù)器為什么要用Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,Linux在眾多選擇中脫穎而出。Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,有其獨特的優(yōu)勢和特點。包括其...詳情>>

2023-10-14 12:34:11
ORM解決的主要問題是什么?

ORM(對象關(guān)系映射)解決的主要問題是將關(guān)系數(shù)據(jù)庫與面向?qū)ο缶幊讨g的映射困境。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)以表格的形式存儲,而在面向?qū)ο?..詳情>>

2023-10-14 12:26:19
Go為什么不支持三元運算符?

Go為什么不支持三元運算符Go語言是一種以簡潔和有效性為目標(biāo)的編程語言,因此在設(shè)計過程中,Go的設(shè)計者刻意排除了一些他們認(rèn)為可能導(dǎo)致復(fù)雜性或...詳情>>

2023-10-14 12:12:36