版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
上篇
1、elasticsearch了解多少,說說你們公司es的集群架
構(gòu),索引數(shù)據(jù)大小,分片有多少,以及一些調(diào)優(yōu)手段。
面試官:想了解應(yīng)聘者之前公司接觸的ES使用場(chǎng)景、規(guī)模,有沒有做過比較大規(guī)模的索引設(shè)計(jì)、規(guī)
劃、調(diào)優(yōu)。
解答:如實(shí)結(jié)合自己的實(shí)踐場(chǎng)景回答即可.
比如:ES集群架構(gòu)13個(gè)節(jié)點(diǎn),索引根據(jù)通道不同共20+索引,根據(jù)日期,每日遞增20+,索引:10
分片,每日遞增1億+數(shù)據(jù),每個(gè)通道每天索引大小控制:150GB之內(nèi)。
僅索引層面調(diào)優(yōu)手段:
1」、設(shè)計(jì)階段調(diào)優(yōu)
(1)根據(jù)業(yè)務(wù)增量需求,采取基于日期模板創(chuàng)建索引,通過rolloverAPI滾動(dòng)索引;
(2)使用別名進(jìn)行索引管理;
(3)每天凌晨定時(shí)對(duì)索引做force_merge操作,以釋放空間;
(4)采取冷熱分離機(jī)制,熱數(shù)據(jù)存儲(chǔ)到SSD,提高檢索效率;冷數(shù)據(jù)定期進(jìn)行shrink操作,以縮減存
儲(chǔ);
(5)采取curator進(jìn)行索引的生命周期管理;
(6)僅針對(duì)需要分詞的字段,合理的設(shè)置分詞器;
(7)Mapping階段充分結(jié)合各個(gè)字段的屬性,是否需要檢索、是否需要存儲(chǔ)等。........
1.2、寫入調(diào)優(yōu)
(1)寫入前副本數(shù)設(shè)置為0;
(2)寫入前關(guān)閉refresh_interval設(shè)置為-1,禁用刷新機(jī)制;
(3)寫入過程中:采取bulk批量寫入;
(4)寫入后恢復(fù)副本數(shù)和刷新間隔;
(5)盡量使用自動(dòng)生成的id。
1.3、查詢調(diào)優(yōu)
(1)禁用wildcard;
(2)禁用批量terms(成百上千的場(chǎng)景);
(3)充分利用倒排索引機(jī)制,能keyword類型盡量keyword;
(4)數(shù)據(jù)量大時(shí)候,可以先基于時(shí)間敲定索引再檢索;
(5)設(shè)置合理的路由機(jī)制。
1.4、其他調(diào)優(yōu)
部署調(diào)優(yōu),業(yè)務(wù)調(diào)優(yōu)等。
上面的提及一部分,面試者就基本對(duì)你之前的實(shí)踐或者運(yùn)維經(jīng)驗(yàn)有所評(píng)估了。
2、elasticsearch的倒排索引是什么
面試官:想了解你對(duì)基礎(chǔ)概念的認(rèn)知。
解答:通俗解釋一下就可以。
傳統(tǒng)的我們的檢索是通過文章,逐個(gè)遍歷找到對(duì)應(yīng)關(guān)鍵詞的位置。
而倒排索引,是通過分詞策略,形成了詞和文章的映射關(guān)系表,這種詞典+映射表即為倒排索引。有了
倒排索引,就能實(shí)現(xiàn)。(1)時(shí)間復(fù)雜度的效率檢索文章了,極大的提高了檢索效率。
term字典倒排docld友
學(xué)術(shù)的解答方式:
倒排索引,相反一篇文章包含了哪些詞,它從詞出發(fā),記載了這個(gè)詞在哪些文檔中出現(xiàn)過,由兩部分
組成一一詞典和倒排表。
加分項(xiàng):倒排索引的底層實(shí)現(xiàn)是基于:FST(FiniteStateTransducer)數(shù)據(jù)結(jié)構(gòu),
lucene從4+版本后開始大量使用的數(shù)據(jù)結(jié)構(gòu)是FST。FST有兩個(gè)優(yōu)點(diǎn):
(1)空間占用小。通過對(duì)詞典中單詞前綴和后綴的重復(fù)利用,壓縮了存儲(chǔ)空間;
(2)查詢速度快。O(len(str))的查詢時(shí)間復(fù)雜度.
3、elasticsearch索引數(shù)據(jù)多了怎么辦,如何調(diào)優(yōu),部署
面試官:想了解大數(shù)據(jù)量的運(yùn)維能力。
解答:索引數(shù)據(jù)的規(guī)劃,應(yīng)在前期做好規(guī)劃,正所謂“設(shè)計(jì)先行,編碼在后",這樣才能有效的避免突如
其來的數(shù)據(jù)激增導(dǎo)致集群處理能力不足引發(fā)的線上客戶檢索或者其他業(yè)務(wù)受到影響。
如何調(diào)優(yōu),正如問題1所說,這里細(xì)化一下:
3.1動(dòng)態(tài)索引層面
基于模板+時(shí)間+rolloverapi滾動(dòng)創(chuàng)建索引,舉例:設(shè)計(jì)階段定義:blog索引的模板格式為:
blogjndex一時(shí)間戳的形式,每天遞增數(shù)據(jù)。這樣做的好處:不至于數(shù)據(jù)量激增導(dǎo)致單個(gè)索引數(shù)據(jù)量非
常大,接近于上線2的32次鬲-1,索引存儲(chǔ)達(dá)到了TB+甚至更大。
一旦單個(gè)索引很大,存儲(chǔ)等各種風(fēng)險(xiǎn)也隨之而來,所以要提前考慮+及早避免。
3.2存儲(chǔ)層面
冷熱數(shù)據(jù)分離存儲(chǔ),熱數(shù)據(jù)(比如最近3天或者一周的數(shù)據(jù)),其余為冷數(shù)據(jù)。
對(duì)于冷數(shù)據(jù)不會(huì)再寫入新數(shù)據(jù),可以考慮定期force_merge加shrink壓縮操作,節(jié)省存儲(chǔ)空間和檢索
效率。
3.3部署層面
一旦之前沒有規(guī)劃,這里就屬于應(yīng)急策略。
結(jié)合ES自身的支持動(dòng)態(tài)擴(kuò)展的特點(diǎn),動(dòng)態(tài)新增機(jī)器的方式可以緩解集群壓力,注意:如果之前主節(jié)點(diǎn)
等規(guī)劃合理,不需要重啟集群也能完成動(dòng)態(tài)新增的。
4、elasticsearch是如何實(shí)現(xiàn)master選舉的
面試官:想了解ES集群的底層原理,不再只關(guān)注業(yè)務(wù)層面了。
解答:
刖置刖提:
(1)只有候選主節(jié)點(diǎn)(master:true)的節(jié)點(diǎn)才能成為主節(jié)點(diǎn)。
(2)最小主節(jié)點(diǎn)數(shù)(min_master_nodes)的目的是防止腦裂。
核對(duì)了一下代碼,核心入口為findMaster,選擇主節(jié)點(diǎn)成功返回對(duì)應(yīng)Master,否則返回null。選舉流
程大致描述如下:
第一步:確認(rèn)候選主節(jié)點(diǎn)數(shù)達(dá)標(biāo),elasticsearch.yml設(shè)置的值
discovery.zen.minimum_master_nodes;
第二步:匕戚:先判定是否具備master資格,具備候選主節(jié)點(diǎn)資格的優(yōu)先返回;
若兩節(jié)點(diǎn)都為候選主節(jié)點(diǎn),則id小的值會(huì)主節(jié)點(diǎn)。注意這里的id為string類型。
題外話:獲取節(jié)點(diǎn)id的方法。
1GET/_cat/nodes?v&h=ip,port,heappercent,heapMax,id,name
21pportheappercentheapMaxidname復(fù)制代碼
5、詳細(xì)描述一下Elasticsearch索引文檔的過程
面試官:想了解ES的底層原理,不再只關(guān)注業(yè)務(wù)層面了。
解答:
這里的索引文檔應(yīng)該理解為文檔寫入ES,創(chuàng)建索引的過程。
文檔寫入包含:?jiǎn)挝臋n寫入和批量bulk寫入,這里只解釋一下:?jiǎn)挝臋n寫入流程。
記住官方文檔中的這個(gè)圖。
第一步:客戶寫集群某節(jié)點(diǎn)寫入數(shù)據(jù),發(fā)送請(qǐng)求。(如果沒有指定路由/協(xié)調(diào)節(jié)點(diǎn),請(qǐng)求的節(jié)點(diǎn)扮演路
由節(jié)點(diǎn)的角色.)
第二步:節(jié)點(diǎn)1接受到請(qǐng)求后,使用文檔」d來確定文檔屬于分片0。請(qǐng)求會(huì)被轉(zhuǎn)到另外的節(jié)點(diǎn),假定
節(jié)點(diǎn)3。因此分片0的主分片分配到節(jié)點(diǎn)3上。
第三步:節(jié)點(diǎn)3在主分片上執(zhí)行寫操作,如果成功,則將請(qǐng)求并行轉(zhuǎn)發(fā)到節(jié)點(diǎn)1和節(jié)點(diǎn)2的副本分片
上,等待結(jié)果返回。所有的副本分片都報(bào)告成功,節(jié)點(diǎn)3將向協(xié)調(diào)節(jié)點(diǎn)(節(jié)點(diǎn)1)報(bào)告成功,節(jié)點(diǎn)1向
請(qǐng)求客戶端報(bào)告寫入成功。
如果面試官再問:第二步中的文檔獲取分片的過程?
回答:借助路由算法獲取,路由算法就是根據(jù)路由和文檔id計(jì)算目標(biāo)的分片id的過程。
Ishard=hash(.routing)%(num_of_primary_shards)復(fù)制代碼
6、詳細(xì)描述一下Elasticsearch搜索的過程?
面試官:想了解ES搜索的底層原理,不再只關(guān)注業(yè)務(wù)層面了。
解答:
搜索拆解為"querythenfetch"兩個(gè)階段。
query階段的目的:定位到位置,但不取。
步驟拆解如下:
(1)假設(shè)一個(gè)索引數(shù)據(jù)有5主+1副本共10分片,一次請(qǐng)求會(huì)命中(主或者副本分片中)的一個(gè)。
(2)每個(gè)分片在本地進(jìn)行杳詢,結(jié)果返回到本地有序的優(yōu)先隊(duì)列中。
(3)第2)步驟的結(jié)果發(fā)送到協(xié)調(diào)節(jié)點(diǎn),協(xié)調(diào)節(jié)點(diǎn)產(chǎn)生一個(gè)全局的排序列表。
fetch階段的目的:取數(shù)據(jù)。
路由節(jié)點(diǎn)獲取所有文檔,返回給客戶端。
7、Elasticsearch在部署時(shí),對(duì)Linux的設(shè)置有哪些優(yōu)化
方法
面試官:想了解對(duì)ES集群的運(yùn)維能力.
解答:
(1)關(guān)閉緩存swap;
(2)堆內(nèi)存設(shè)置為:Min(節(jié)點(diǎn)內(nèi)存/2,32GB);
(3)設(shè)置最大文件句柄數(shù);
(4)線程池+隊(duì)列大小根據(jù)業(yè)務(wù)需要做調(diào)整;
(5)磁盤存儲(chǔ)raid方式一一存儲(chǔ)有條件使用RAID10,增加單節(jié)點(diǎn)性能以及避免單節(jié)點(diǎn)存儲(chǔ)故障。
8、lucence內(nèi)部結(jié)構(gòu)是什么?
面試官:想了解你的知識(shí)面的廣度和深度。
解答:
Lucene是有索引和搜索的兩個(gè)過程,包含索引創(chuàng)建,索引,搜索三個(gè)要點(diǎn)??梢曰谶@個(gè)脈絡(luò)展開一
些。
9、Elasticsearch是如何實(shí)現(xiàn)Master選舉的?
(1)日asticsearch的選主是ZenDiscovery模塊負(fù)責(zé)的,主要包含Ping(節(jié)點(diǎn)之間通過這個(gè)RPC來發(fā)
現(xiàn)彼此)和Unicast(單播模塊包含一個(gè)主機(jī)列表以控制哪些節(jié)點(diǎn)需要ping通)這兩部分;
(2)對(duì)所有可以成為master的節(jié)點(diǎn)(node.master:true)根據(jù)nodeld字典排序,每次選舉每個(gè)節(jié)
點(diǎn)都把自己所知道節(jié)點(diǎn)排一次序,然后選出第一個(gè)(第0位)節(jié)點(diǎn),暫且認(rèn)為它是master節(jié)點(diǎn)。
(3)如果對(duì)某個(gè)節(jié)點(diǎn)的投票數(shù)達(dá)到一定的值(可以成為master節(jié)點(diǎn)數(shù)n/2+1)并且該節(jié)點(diǎn)自己也選
舉自己,那這個(gè)節(jié)點(diǎn)就是master。否則重新選舉一直到滿足上述條件。
(4)補(bǔ)充:master節(jié)點(diǎn)的職責(zé)主要包括集群、節(jié)點(diǎn)和索引的管理,不負(fù)責(zé)文檔級(jí)別的管理;data節(jié)
點(diǎn)可以關(guān)閉http功能*。
10、Elasticsearch中的節(jié)點(diǎn)(比如共20個(gè)),其中的
10個(gè)
選了一個(gè)master,另外10個(gè)選了另一個(gè)master,怎么辦?
(1)當(dāng)集群master候選數(shù)量不小于3個(gè)時(shí),可以通過設(shè)置最少投票通過數(shù)量
(discovery.zen.minimum_master_nodes)超過所有候選節(jié)點(diǎn)一半以上來解決腦裂問題;
(3)當(dāng)候選數(shù)量為兩個(gè)時(shí),只能修改為唯一的一個(gè)master候選,其他作為data節(jié)點(diǎn),避免腦裂問
題。
11、客戶端在和集群連接時(shí),如何選擇特定的節(jié)點(diǎn)執(zhí)行請(qǐng)
求的?
Transportclient利用transport模塊遠(yuǎn)程連接一個(gè)elasticsearch集群。它并不加入到集群中,只是簡(jiǎn)
單的獲得一個(gè)或者多個(gè)初始化的transport地址,并以輪詢的方式與這些地址進(jìn)行通信。
12、詳細(xì)描述一下Elasticsearch索引文檔的過程。
協(xié)調(diào)節(jié)點(diǎn)默認(rèn)使用文檔ID參與計(jì)算(也支持通過routing),以便為路由提供合適的分片。
shard=hash(document_id)%(num_of_primary_shards)復(fù)制代碼
(1)當(dāng)分片所在的節(jié)點(diǎn)接收到來自協(xié)調(diào)節(jié)點(diǎn)的請(qǐng)求后,會(huì)將請(qǐng)求寫入到MemoryBuffer,然后定時(shí)
(默認(rèn)是每隔1秒)寫入到FilesystemCache,這個(gè)從MomeryBuffer至(IFilesystemCache的過程就
叫做refresh;
(2)當(dāng)然在某些情況下,存在MomeryBuffer和FilesystemCache的數(shù)據(jù)可能會(huì)丟失,ES是通過
translog的機(jī)制來保證數(shù)據(jù)的可靠性的。其實(shí)現(xiàn)機(jī)制是接收到請(qǐng)求后,同時(shí)也會(huì)寫入到translog中,
當(dāng)Rlesystemcache中的數(shù)據(jù)寫入到磁盤中時(shí),才會(huì)清除掉,這個(gè)過程叫做flush;
(3)在flush過程中,內(nèi)存中的緩沖將被清除,內(nèi)容被寫入一個(gè)新段,段的fsync將創(chuàng)建一個(gè)新的提交
點(diǎn),并將內(nèi)容刷新到磁盤,舊的translog將被刪除并開始f新的translog。
(4)flush觸發(fā)的時(shí)機(jī)是定時(shí)觸發(fā)(默認(rèn)30分鐘)或者translog變得太大(默認(rèn)為512M)時(shí);
補(bǔ)充:關(guān)于Lucene的Segement:
(1)Lucene索引是由多個(gè)段組成,段本身是一個(gè)功能齊全的倒排索引。
(2)段是不可變的,允許Lucene將新的文檔增量地添加到索引中,而不用從頭重建索引。
(3)對(duì)于每一個(gè)搜索請(qǐng)求而言,索引中的所有段都會(huì)被搜索,并且每個(gè)段會(huì)消耗CPU的時(shí)鐘周、文件
句柄和內(nèi)存。這意味著段的數(shù)量越多,搜索性能會(huì)越低。
(4)為了解決這個(gè)問題,日asticsearch會(huì)合并小段到一個(gè)較大的段,提交新的合并段到磁盤,并刪除
那些舊的小段。
下篇
1.Elasticsearch是一個(gè)分布式的RESTful風(fēng)格的搜索和數(shù)據(jù)分析引
擎。
(1)直詢:日asticsearch允許執(zhí)行和合并多種類型的搜索一結(jié)構(gòu)化、非結(jié)構(gòu)化、地理位置、度量指
標(biāo)一搜索方式隨心而變。
(2)分析:找到與查詢最匹配的十個(gè)文檔是一回事。但是如果面對(duì)的是十億行日志,又該如何解讀
呢?日asticsearch聚合讓您能夠從大處著眼,探索數(shù)據(jù)的趨勢(shì)和模式。
(3)速度:Egsticsearch很快。真的,真的很快。
(4)可擴(kuò)展性:可以在筆記本電腦上運(yùn)行。也可以在承載了PB級(jí)數(shù)據(jù)的成百上千臺(tái)服務(wù)器上運(yùn)行。
(5)彈性:日asticsearch運(yùn)行在一個(gè)分布式的環(huán)境中,從設(shè)計(jì)之初就考慮到了這一點(diǎn)。
(6)靈活性:具備多個(gè)案例場(chǎng)景。數(shù)字、文本、地理位置、結(jié)構(gòu)化、非結(jié)構(gòu)化。所有的數(shù)據(jù)類型都?xì)g
迎。
(7)HADOOP&SPARK:Elasticsearch+Hadoop
2.Elasticsearch是一個(gè)高度可伸縮的開源全文搜索和分析引擎。它
允許您快速和接近實(shí)時(shí)地存儲(chǔ)、搜索和分析大量數(shù)據(jù)。
這里有一些使用日asticsearch的用例:
(1)你經(jīng)營(yíng)一個(gè)網(wǎng)上商店,你允許你的顧客搜索你賣的產(chǎn)品。在這種情況下,您可以使用
日asticsearch來存儲(chǔ)整個(gè)產(chǎn)品目錄和庫(kù)存,并為它們提供搜索和自動(dòng)完成建議.
(2)你希望收集日志或事務(wù)數(shù)據(jù),并希望分析和挖掘這些數(shù)據(jù),以查找趨勢(shì)、統(tǒng)計(jì)、匯總或異常。在
這種情況下,你可以使用loghide(Elasticsearch/loghide/Kibana堆棧的一^分)來收集、聚合和解析數(shù)
據(jù),然后讓loghide將這些數(shù)據(jù)輸入到日asticsearch中。一旦數(shù)據(jù)在日asticsearch中,你就可以運(yùn)行搜
索和聚合來挖掘你感興趣的任何信息。
(3)你運(yùn)行一個(gè)價(jià)格警報(bào)平臺(tái),允許精通價(jià)格的客戶指定如下規(guī)則:“我有興趣購(gòu)買特定的電子設(shè)備,如
果下個(gè)月任!可供應(yīng)商的產(chǎn)品價(jià)格低于X美元,我希望得到通知"。在這種情況下,你可以抓取供應(yīng)商的價(jià)
格,將它們推入到Elasticsearch中,并使用其反向搜索(PerWator)功能來匹配價(jià)格走勢(shì)與客戶查詢,
并最終在找到匹配后將警報(bào)推送給客戶。
(4)你有分析/業(yè)務(wù)智能需求,并希望快速調(diào)查、分析、可視化,并對(duì)大量數(shù)據(jù)提出特別問題(想想數(shù)百
萬(wàn)或數(shù)十億的記錄)。在這種情況下,你可以使用日asticsearch來存儲(chǔ)數(shù)據(jù),然后使用Kibana
(Elasticsearch/loghide/Kibana堆棧的一部分)來構(gòu)建自定義儀表板,以可視化對(duì)您來說很重要的數(shù)據(jù)
的各個(gè)方面。此外,還可以使用日asticsearch聚合功能對(duì)數(shù)據(jù)執(zhí)行復(fù)雜的業(yè)務(wù)智能查詢。
Elasticsearch面試題
1、詳細(xì)描述一下Elasticsearch更新和刪除文檔的過程。
2、詳細(xì)描述一下Elasticsearch搜索的過程。
3、在日asticsearch中,是怎么根據(jù)一個(gè)詞找到對(duì)應(yīng)的倒排索弓I的?
4、Elasticsearch在部署時(shí),對(duì)Linux的設(shè)置有哪些優(yōu)化方法?
5、對(duì)于GC方面,在使用Elasticsearch時(shí)要注意什么?
6、Elasticsearch對(duì)于大數(shù)據(jù)量(上億量級(jí))的聚合如何實(shí)現(xiàn)?
7、在并發(fā)情況下,日asticsearch如果保證讀寫一致?
8、如何監(jiān)控日asticsearch集群狀態(tài)?
9、介紹下你們電商搜索的整體技術(shù)架構(gòu)。
10、介紹一下你們的個(gè)性化搜索方案?
11、是否了解字典樹?
12、拼寫糾錯(cuò)是如何實(shí)現(xiàn)的?
1、詳細(xì)描述一下Elasticsearch更新和刪除文檔的過程。
(1)刪除和更新也都是寫操作,但是日asticsearch中的文檔是不可變的,因此不能被刪除或者改動(dòng)以
展示其變更;
(2)磁盤上的每個(gè)段都有一個(gè)相應(yīng)的.del文件。當(dāng)刪除請(qǐng)求發(fā)送后,文檔并沒有真的被刪除,而是
在.del文件中被標(biāo)記為刪除。該文檔依然能匹配查詢,但是會(huì)在結(jié)果中被過濾掉。當(dāng)段合并時(shí),在.del
文件中被標(biāo)記為刪除的文檔將不會(huì)被寫入新段。
(3)在新的文檔被創(chuàng)建時(shí),Elasticsearch會(huì)為該文檔指定一個(gè)版本號(hào),當(dāng)執(zhí)行更新時(shí),舊版本的文檔
在.del文件中被標(biāo)記為刪除,新版本的文檔被索引到一個(gè)新段。舊版本的文檔依然能匹配查詢,但是會(huì)
在結(jié)果中被過濾掉。
2、詳細(xì)描述一下Elasticsearch搜索的過程。
(1)搜索被執(zhí)行成一個(gè)兩階段過程,我們稱之為QueryThenFetch;
(2)在初始杳詢階段時(shí),杳詢會(huì)廣播到索引中每一個(gè)分片拷貝(主分片或者副本分片)。每個(gè)分片在
本地執(zhí)行搜索并構(gòu)建一個(gè)匹配文檔的大小為from+size的優(yōu)先隊(duì)列。
PS:在搜索的時(shí)候是會(huì)西旬FilesystemCache的,但是有部分?jǐn)?shù)據(jù)還在MemoryBuffer,所以搜索是
近實(shí)時(shí)的。
(3)每個(gè)分片返回各自優(yōu)先隊(duì)列中所有文檔的ID和排序值給協(xié)調(diào)節(jié)點(diǎn),它合并這些值到自己的優(yōu)先
隊(duì)列中來產(chǎn)生一個(gè)全局排序后的結(jié)果列表。
(4)接下來就是取回階段,協(xié)調(diào)節(jié)點(diǎn)辨別出哪些文檔需要被取回并向相關(guān)的分片提交多個(gè)GET請(qǐng)求。
每個(gè)分片加載并豐富文檔,如果有需要的話,接著返回文檔給協(xié)調(diào)節(jié)點(diǎn).一旦所有的文檔都被取回
了,協(xié)調(diào)節(jié)點(diǎn)返回結(jié)果給客戶端。
(5)補(bǔ)充:QueryThenFetch的搜索類型在文檔相關(guān)性打分的時(shí)候參考的是本分片的數(shù)據(jù),這樣在文
檔數(shù)量較少的時(shí)候可能不夠準(zhǔn)確,DFSQueryThenFetch增加了一個(gè)預(yù)查詢的處理,詢問Term和
Documentfrequency,這個(gè)評(píng)分更準(zhǔn)確,但是性能會(huì)變差。*
□L二QueryPhase
Phonty?CfMResapra%queueof?izehom?皿and
softsm&ufsbyraievinca
,XxMScgemiD63ndicogcazchmg
OccumeragmeooortimannQnode
mr二
FVcnty
oueue
mr二
Rriocity
QlMMIFetchPTIBM
?Retutnsdocumems??quMledbr
coorcWnimgwdeafterstcNngthen
3、在Elasticsearch中,是怎么根據(jù)一個(gè)詞找到對(duì)應(yīng)的倒排索引
的?
(1)Lucene的索引過程,就是按照全文檢索的基本過程,將倒排表寫成此文件格式的過程。
(2)Lucene的搜索過程,就是按照此文件格式將索引進(jìn)去的信息讀出來,然后計(jì)算每篇文檔打分
(score)的過程。
4、Elasticsearch在部署時(shí),對(duì)Linux的設(shè)置有哪些優(yōu)化方法?
(1)64GB內(nèi)存的機(jī)器是非常理想的,但是32GB和16GB機(jī)器也是很常見的。少于8GB會(huì)適得其
反。
(2)如果你要在更快的CPUs和更多的核心之間選擇,選擇更多的核心更好。多個(gè)內(nèi)核提供的額夕由
發(fā)遠(yuǎn)勝過稍微快一點(diǎn)點(diǎn)的時(shí)鐘頻率。
(3)如果你負(fù)擔(dān)得起SSD,它將遠(yuǎn)遠(yuǎn)超出任何旋轉(zhuǎn)介質(zhì)。基于SSD的節(jié)點(diǎn),查詢和索引性能都有提
升。如果你負(fù)擔(dān)得起,SSD是一個(gè)好的選擇。
(4)即使數(shù)據(jù)中心們近在咫尺,也要避免集群跨越多個(gè)數(shù)據(jù)中心。絕對(duì)要避免集群跨越大的地理距
離。
(5)請(qǐng)確保運(yùn)行你應(yīng)用程序的JVM和服務(wù)器的JVM是完全一樣的。在日asticsearch的幾個(gè)地方,使
用Java的本地序列化。
(6)通過設(shè)置gateway.recover_after_nodes、gateway.expected_nodess
gateway.recover_after_time可以在集群重啟的時(shí)候避免過多的分片交換,這可能會(huì)讓數(shù)據(jù)恢復(fù)從數(shù)個(gè)
小時(shí)縮短為幾秒鐘。
(7)Elasticsearch默認(rèn)被配置為使用單播發(fā)現(xiàn),以防止節(jié)點(diǎn)無意中加入集群。只有在同一臺(tái)機(jī)器上運(yùn)
行的節(jié)點(diǎn)才會(huì)自動(dòng)組成集群。最好使用單播代替組播。
(8)不要隨意修改垃圾回收器(CMS)和各個(gè)線程池的大小。
(9)把你的內(nèi)存的(少于)一半給Lucene(但不要超過32GB!),通過ES_HEAP_SIZE環(huán)境變量設(shè)
置。
(10)內(nèi)存交換到磁盤對(duì)服務(wù)器性能來說是致命的。如果內(nèi)存交換到磁盤上,一個(gè)100微秒的操作可能
變成10毫秒。再想想那么多10微秒的操作時(shí)延累加起來.不難看出SW叩ping對(duì)于性能是多么可
怕。
(11)Lucene使用了大量的文件。同時(shí),日asticsearch在節(jié)點(diǎn)和HTTP客戶端之間進(jìn)行通信也使用
了大量的套接字。所有這一切都需要足夠的文件描述符。你應(yīng)該增加你的文件描述符,設(shè)置一個(gè)很大的
值,如64,000。
補(bǔ)充:索引階段性能提升方法
(1)使用批量請(qǐng)求并調(diào)整其大?。好看闻繑?shù)據(jù)5-15MB大是個(gè)不錯(cuò)的起始點(diǎn)。
(2)存儲(chǔ):使用SSD
(3)窗哈并:日asticsearch默認(rèn)值是20MB/s,對(duì)機(jī)械磁盤應(yīng)該是個(gè)不錯(cuò)的設(shè)置。如果你用的是
SSD,可以考慮提高到100-200MB/S。如果你在做批量導(dǎo)入,完全不在意搜索,你可以徹底關(guān)掉合并
限流。另外還可以增力口index.translog.flush_threshold_size設(shè)置,從默認(rèn)的512MB到更大一些的
值,比如1GB,這可以在一次清空觸發(fā)的時(shí)候在事務(wù)日志里積累出更大的段。
(4)如果你的搜索結(jié)果不需要近實(shí)時(shí)的準(zhǔn)確度,考慮把每個(gè)索引的index.refresh_interval改到30s。
(5)如果你在做大批量導(dǎo)入,考慮通過設(shè)置index.number_of_replicas:0關(guān)閉副本。
5、對(duì)于GC方面,在使用Elasticsearch時(shí)要注意什么?
(1)倒排詞典的索引需要常駐內(nèi)存,無法GC,需要監(jiān)控datanode上segmentmemory增長(zhǎng)趨勢(shì)。
(2)各類緩存,fieldcache,filtercache,indexingcache,bulkqueue等等,要設(shè)置合理的大小,并
且要應(yīng)該根據(jù)最壞的情況來看heap是否夠用,也就是各類緩存全部占滿的時(shí)候,還有heap空間可以
分配給其他任務(wù)嗎?避免采用dearcache等"自欺欺人”的方式來釋放內(nèi)存。
(3)避免返回大量結(jié)果集的搜索與聚合。確實(shí)需要大量拉取數(shù)據(jù)的場(chǎng)景,可以采用scan&scrollapi
來實(shí)現(xiàn)。
(4)dusterstats駐留內(nèi)存并無法水平擴(kuò)展,超大規(guī)模集群可以考慮分拆成多個(gè)集群通過tribenode
連接。
(5)想知道heap夠不夠,必須結(jié)合實(shí)際應(yīng)用場(chǎng)景,并對(duì)集群的heap使用情況做持續(xù)的監(jiān)控。
(6)根據(jù)監(jiān)控?cái)?shù)據(jù)理解內(nèi)存需求,合理配置各類circuitbreaker,將內(nèi)存溢出風(fēng)險(xiǎn)降低到最低
6、Elasticsearch對(duì)于大數(shù)據(jù)量(上億量級(jí))的聚合如何實(shí)現(xiàn)?
日asticsearch提供的首個(gè)近似聚合是cardinality度量。它提供一個(gè)字段的基數(shù),即該字段的distinct
或者unique值的數(shù)目.它是基于HLL算法的。HLL會(huì)先對(duì)我們的輸入作哈希運(yùn)算,然后根據(jù)哈希運(yùn)算
的結(jié)果中的bits做概率估算從而得到基數(shù)。其特點(diǎn)是:可配置的精度,用來控制內(nèi)存的使用(更精確
=更多內(nèi)存);小的數(shù)據(jù)集精度是非常高的;我們可以通過配置參數(shù),來設(shè)置去重需要的固定內(nèi)存使用
量。無論數(shù)千還是數(shù)十億的唯T直,內(nèi)存使用量只與你配置的精確度相關(guān)。
7、在并發(fā)情況下,Elasticsearch如果保證讀寫一致?
(D可以通過版本號(hào)使用樂觀并發(fā)控制,以確保新版本不會(huì)被舊版本覆蓋,由應(yīng)用層來處理具體的沖
突;
(2)另外對(duì)于寫操作,一致性級(jí)別支持quorum/one/all,默認(rèn)為quorum,即只有當(dāng)大多數(shù)分片可用
時(shí)才允許寫操作。但即使大多數(shù)可用,也可能存在因?yàn)榫W(wǎng)絡(luò)等原因?qū)е聦懭敫北臼?,這樣該副本被認(rèn)
為故障,分片將會(huì)在一個(gè)不同的節(jié)點(diǎn)上重建。
(3)對(duì)于讀操作,可以設(shè)置replication為sync(默認(rèn)),這使得操作在主分片和副本分片都完成后才會(huì)
返回;如果設(shè)置replication為async時(shí),也可以通過設(shè)置搜索請(qǐng)求參^preference為primary來查
詢主分片,確保文檔是最新版本。
8、如何監(jiān)控Elasticsearch集群狀態(tài)?
Marvel讓你可以很簡(jiǎn)單的通過Kibana監(jiān)控Elasticsearch.你可以實(shí)時(shí)杳看你的集群健康狀態(tài)和性
能,也可以分析過去的集群、索引和節(jié)點(diǎn)指標(biāo)。
9、介紹下你們電商搜索的整體技術(shù)架構(gòu)。
10、介紹一下你們的個(gè)性化搜索方案?
基于word2vec和Elasticsearch實(shí)現(xiàn)個(gè)性化搜索
(1)基于word2vec、日asticsearch和自定義的腳本插件,我們就實(shí)現(xiàn)了一個(gè)個(gè)性化的搜索服務(wù),相對(duì)
于原有的實(shí)現(xiàn),新版的點(diǎn)擊率和轉(zhuǎn)化率都有大幅的提升;
(2)基于word2vec的商品向量還有一個(gè)可用之處,就是可以用來實(shí)現(xiàn)相似商品的推薦;
(3)使用word2vec來實(shí)現(xiàn)個(gè)性化搜索或個(gè)性化推薦是有一定局限性的,因?yàn)樗荒芴幚碛脩酎c(diǎn)擊歷史
這樣的時(shí)序數(shù)據(jù),而無法全面的去考慮用戶偏好,這個(gè)還是有很大的改進(jìn)和提升的空間;
11、是否了解字典樹?
常用字典數(shù)據(jù)結(jié)構(gòu)如下幅:
Trie的核心思想是空間換時(shí)間,利用字符串的公共前綴來降低查詢時(shí)間的開銷以達(dá)到提高效率的目的。
它有3個(gè)基本性質(zhì):
1)根節(jié)點(diǎn)不包含字符,除根節(jié)點(diǎn)外每一個(gè)節(jié)點(diǎn)都只包含一個(gè)字符。
2)從根節(jié)點(diǎn)到某一節(jié)點(diǎn),路徑上經(jīng)過的字符連接起來,為該節(jié)點(diǎn)對(duì)應(yīng)的字符串。
3)每個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)包含的字符都不相同。
(1)可以看到,trie樹每一層的節(jié)點(diǎn)數(shù)是26N級(jí)別的。所以為了節(jié)省空間,我們還可以用動(dòng)態(tài)鏈表,
或者用數(shù)組來模擬動(dòng)態(tài)。而空間的花費(fèi),不會(huì)超過單詞數(shù)/單詞長(zhǎng)度。
(2)實(shí)現(xiàn):對(duì)每個(gè)結(jié)點(diǎn)開一個(gè)字母集大小的數(shù)組,每個(gè)結(jié)點(diǎn)掛一個(gè)鏈表,使用左兒子右兄弟表示法記
錄這棵樹;
(3)對(duì)于中文的字典樹,每個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)用一個(gè)哈希表存儲(chǔ),這樣就不用浪費(fèi)太大的空間,而且查
詢速度上可以保留哈希的復(fù)雜度0(1).
12、拼寫糾錯(cuò)是如何實(shí)現(xiàn)的?
(D拼寫糾錯(cuò)是基于編輯距離來實(shí)現(xiàn);編輯距離是一種標(biāo)準(zhǔn)的方法,它用來表示經(jīng)過插入、刪除和替
換操作從一個(gè)字符串轉(zhuǎn)換到另外一個(gè)字符串的最小操作步數(shù);
(2)編輯距離的計(jì)算過程:比如要計(jì)算batyu和beauty的編輯距離,先創(chuàng)建f7、8的表(batyu
長(zhǎng)度為5,coffee長(zhǎng)度為6,各加2),接著,在如下位置填入黑色數(shù)字。其他格的計(jì)算過程是取以下
三個(gè)值的最小值:
如果最上方的字符等于最左方的字符,則為左上方的數(shù)字。否則為左上方的數(shù)字+1。(對(duì)于3,3來說為
0)
左方數(shù)字+1(對(duì)于3,3格來說為2)
上方數(shù)字+1(對(duì)于3,3格來說為2)
最終取右下角的值即為編輯距離的值30
beauty
0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度展會(huì)多媒體作品著作權(quán)授權(quán)及保護(hù)合同3篇
- 托管班引流課程設(shè)計(jì)
- 中考數(shù)學(xué)二輪復(fù)習(xí)壓軸題培優(yōu)專練專題16 函數(shù)的圖像變換問題(原卷版)
- 2024年版云服務(wù)外包合同
- 2024年版學(xué)生宿舍共住規(guī)則3篇
- 2024年智能化生產(chǎn)車間承包與升級(jí)合同范本3篇
- 物聯(lián)網(wǎng)應(yīng)用課程設(shè)計(jì)論文
- 2024年度大白智能倉(cāng)儲(chǔ)管理系統(tǒng)安裝與數(shù)據(jù)安全協(xié)議范本3篇
- 物流專業(yè)課程設(shè)計(jì)
- 2024-2025學(xué)年人教部編版六年級(jí)上語(yǔ)文寒假作業(yè)(七)
- 武漢理工大學(xué)2019-2020學(xué)年第一學(xué)期2018級(jí)軟件工程專業(yè)《Java語(yǔ)言程序設(shè)計(jì)》期末考試-
- GB/T 26334-2023燃?xì)獗戆惭b配件
- 五年級(jí)中隊(duì)日志全解
- 機(jī)械設(shè)備租賃保障措施
- 腳手架施工驗(yàn)收表
- 公司合同審批流程
- 質(zhì)量守恒定律評(píng)課稿
- 凝膠消毒劑工藝流程圖
- 危險(xiǎn)性較大的分部分項(xiàng)工程監(jiān)理巡視表-有限空間
- 2023-2024學(xué)年成都市成華區(qū)六上數(shù)學(xué)期末監(jiān)測(cè)模擬試題含答案
- ECS-700系統(tǒng)控制系統(tǒng)介紹
評(píng)論
0/150
提交評(píng)論