看道客巴巴十億文檔的數(shù)據(jù)挖掘與應(yīng)用
原創(chuàng)【51CTO.com原創(chuàng)稿件】
【講師簡(jiǎn)介】
劉斌,道客巴巴在線文檔分享平臺(tái)聯(lián)合創(chuàng)始人&CTO, 10年IT從業(yè)經(jīng)驗(yàn),擅長(zhǎng)前端與服務(wù)器端開發(fā)技術(shù)、WEB服務(wù)器分布式集群部署、高并發(fā)調(diào)優(yōu)、數(shù)據(jù)庫(kù)性能優(yōu)化。目前主要負(fù)責(zé)道客巴巴平臺(tái)的架構(gòu)與實(shí)現(xiàn),10億文檔的分布式存儲(chǔ)與數(shù)據(jù)挖據(jù)、服務(wù)器安全防護(hù)、文檔智能分類技術(shù)與高性能分布式檢索,為文檔跨平臺(tái)閱讀提供解決方案。
道客巴巴是一個(gè)專注于電子文檔的在線分享平臺(tái),用戶在此平臺(tái)上不但可以自由交換文檔,還可以分享最新的行業(yè)資訊。是一個(gè)自由交流、平等學(xué)習(xí)、開放式的互動(dòng)平臺(tái)。從2008年成立以來,文檔數(shù)據(jù)量已達(dá)10億,從技術(shù)來講,平均每個(gè)文檔的大小是2兆,這樣總共有2PB的空間。由于所有的文件要支持跨平臺(tái)閱讀,需要做一些數(shù)據(jù)挖掘的操作,所以所有的文件要經(jīng)過處理生成目標(biāo)文件。原始文件和目標(biāo),即文檔本身,大約有6PB。同時(shí)還有一些網(wǎng)站的日志,其他的數(shù)據(jù),大約有2PB,這樣總的數(shù)據(jù)量是接近8PB。當(dāng)然這個(gè)數(shù)據(jù)還沒有做冗余,因?yàn)閿?shù)據(jù)全部是多份存儲(chǔ)的,所以可能還要乘以3。
面對(duì)如此龐大的數(shù)據(jù)量,如何保證它的存儲(chǔ)安全,如何避免由于單機(jī)的故障導(dǎo)致的數(shù)據(jù)丟失,如何避免計(jì)算機(jī)的其他硬件故障導(dǎo)致服務(wù)停止,在10億文檔當(dāng)中如何快速定位到用戶所需要的文檔,等等問題,都顯得尤為重要。
文檔的安全存儲(chǔ)
文檔的安全存儲(chǔ)
劉斌首先介紹了道客巴巴數(shù)據(jù)平臺(tái)的總體框架。如果按照原始的方式,拿到文檔直接寫到linuxC盤的某個(gè)目錄下,如果磁盤出現(xiàn)故障,數(shù)據(jù)就丟失了。即使做一個(gè)red5,當(dāng)硬件出現(xiàn)故障時(shí),數(shù)據(jù)還是會(huì)丟失。道客巴巴采用的方式是hadoop,hadoop是一個(gè)分布式文件存儲(chǔ)系統(tǒng),當(dāng)用戶傳一個(gè)文件到集群服務(wù)器后,集群服務(wù)器本身也是一個(gè)客戶端,到hadoop客戶端。hadoop客戶端大概是一個(gè)50個(gè)節(jié)點(diǎn)的集群,首先有一個(gè)master節(jié)點(diǎn),master節(jié)點(diǎn)有兩個(gè)服務(wù),datenode服務(wù)和tasktracker服務(wù)。當(dāng)傳一個(gè)文件A傳到服務(wù)器上的時(shí)候,首先要做的是把文件拆成三份,A1、A2、A3,同時(shí)每一份又保留多個(gè)副本,這個(gè)份數(shù)和副本保留在不同的節(jié)點(diǎn)。當(dāng)用戶請(qǐng)求文件的時(shí)候,平臺(tái)從三臺(tái)計(jì)算機(jī)分別讀取這個(gè)文件,同時(shí)把結(jié)果匯總到節(jié)點(diǎn),反饋給用戶。這樣一來,有效地利用了每臺(tái)計(jì)算機(jī)的計(jì)算資源,以及它的IO,甚至是網(wǎng)絡(luò)空間。保留多個(gè)副本是為了保證在任何情況下,數(shù)據(jù)都是安全的。
當(dāng)拿到文件后,datenode會(huì)生成一個(gè)文件的標(biāo)識(shí):文件名。因?yàn)槲臋n本身不僅僅是文件,還有屬性,包括大小、上傳人、時(shí)間的信息。道客巴巴使用的是原始的結(jié)構(gòu)化的數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)本身也是一個(gè)負(fù)載,下面有兩個(gè)主節(jié)點(diǎn),這兩個(gè)主節(jié)點(diǎn)是雙面同步的,也是數(shù)據(jù)庫(kù)的一個(gè)讀寫節(jié)點(diǎn)。同時(shí)每個(gè)節(jié)點(diǎn)下面又分?jǐn)偭送?jié)點(diǎn),甚至在同節(jié)點(diǎn)下面還有一層其他同節(jié)點(diǎn),這樣可以保證在任何情況下,當(dāng)單機(jī)數(shù)據(jù)庫(kù)出現(xiàn)問題的時(shí)候,服務(wù)不會(huì)停止。同時(shí)客戶端有一個(gè)數(shù)據(jù)庫(kù),也有一個(gè)檢測(cè),如果發(fā)現(xiàn)里面數(shù)據(jù)庫(kù)出現(xiàn)故障,會(huì)連到其他數(shù)據(jù)庫(kù)。所以平臺(tái)所有的構(gòu)架都是一個(gè)分布式的構(gòu)架,這樣就有效地避免了在任何情況下導(dǎo)致數(shù)據(jù)丟失的情況。
跨平臺(tái)閱讀
上傳到網(wǎng)站的文檔的格式可以是office、PDF,甚至是文本,而手機(jī)可能不會(huì)支持js閱讀,或者沒有office閱讀。如何解決這樣的問題?道客巴巴的做法是把所有的文檔經(jīng)過統(tǒng)一的轉(zhuǎn)換,生成目標(biāo)格式(jmflash或其他),這樣無論是在手機(jī)還是在客戶端都可以閱讀。同時(shí),對(duì)這個(gè)文檔做了保護(hù)操作,除非上傳者允許下載,否則是無法下載的。如果想用頁(yè)面另存的方式下載,在連網(wǎng)的情況下有可能可以看,但是脫離網(wǎng)絡(luò)后是看不到的,因?yàn)榱泶娴膬H僅是轉(zhuǎn)換后的目標(biāo)格式,它必須依賴道客巴巴的平臺(tái)和軟件,才可以閱讀。
在客戶端,用的是原生的方式來解析文檔。解析的過程不需要訪問網(wǎng)絡(luò),其性能、效率非常高。如果用戶沒有安裝道客巴巴的客戶端,就提供一個(gè)web平臺(tái),相當(dāng)于一個(gè)網(wǎng)頁(yè)版。網(wǎng)頁(yè)版依然保留了原有的格式。
當(dāng)把一個(gè)很復(fù)雜的PPT轉(zhuǎn)化成目標(biāo)格式時(shí),會(huì)使用圖片。根據(jù)手機(jī)的分辨率生成和用戶手機(jī)分辨率匹配的圖片。保證不管使用什么手機(jī),或者pad,圖片都是清晰的,在放大的時(shí)候,后端有一個(gè)集群的環(huán)境,對(duì)它在線實(shí)時(shí)渲染。道客巴巴收集了大約幾十萬(wàn)的手機(jī)庫(kù),只要通過agent去訪問的時(shí)候,能得到這個(gè)手機(jī)的物理分辨率,再根據(jù)物理分辨率生成相應(yīng)的圖片,這是道客巴巴網(wǎng)站的跨平臺(tái)業(yè)務(wù)部分。
數(shù)據(jù)挖掘
跨平臺(tái)閱讀生成一個(gè)web的圖片,同時(shí)會(huì)生成縮略圖,這個(gè)縮略圖就是為了讓用戶方便的預(yù)覽這個(gè)文檔,一般在列表產(chǎn)生模式的時(shí)候會(huì)采用這一步,最重要的一點(diǎn)就是文本提取,做數(shù)據(jù)挖掘,這是核心。同樣這個(gè)目標(biāo)文件也是保存到分布式存儲(chǔ)服務(wù)里,所以目標(biāo)文件也絕對(duì)是安全的,永遠(yuǎn)不會(huì)丟失的。
有些用戶可能會(huì)上傳一些非法文檔,可能涉黃、涉黑、涉暴,這類的文檔是不允許發(fā)布。道客巴巴有一個(gè)圖片積累的幾十萬(wàn)的非法詞庫(kù),同時(shí)有一個(gè)文本數(shù)據(jù),即分詞的庫(kù),這個(gè)分詞庫(kù)包含一千多萬(wàn)的詞庫(kù),同時(shí)分詞的詞庫(kù),也包含非法詞庫(kù)。當(dāng)用戶上傳文檔的時(shí)候,用詞庫(kù)對(duì)這個(gè)文本進(jìn)行分詞,單臺(tái)計(jì)算機(jī)一秒可以做到50個(gè),所以這一步非??臁H绻衷~結(jié)果在非法詞庫(kù)里出現(xiàn)了,這個(gè)文檔就是非法的。
如果有些文檔是一個(gè)圖片,如何識(shí)別?ACR能識(shí)別一部分文檔,為了確保非法文檔不發(fā)布,道客巴巴又加了一個(gè)人工復(fù)合流程,由強(qiáng)大的審核團(tuán)隊(duì)對(duì)計(jì)算機(jī)沒有過濾出來的文檔進(jìn)行再次過濾,這樣就保證了發(fā)到平臺(tái)的文檔一定是優(yōu)質(zhì)的。
拿到分詞數(shù)據(jù)后首先要做濾重。首先是進(jìn)行MB5驗(yàn)證,如果MB5驗(yàn)證失敗了,這個(gè)文檔只保留一個(gè)副本。由于文檔量相當(dāng)大,所以要提供一個(gè)搜索的環(huán)境,用戶可以快速地在這10億文檔中搜索到自己的文檔。最后一步是核心的智能分類,如何在用戶閱讀某一篇文檔的時(shí)候,洞察出用戶所關(guān)心的是什么,之后就可以主動(dòng)的對(duì)用戶進(jìn)行文檔推送。
文檔的分布式檢索
此處的檢索不是簡(jiǎn)單的標(biāo)題檢索,道客巴巴采取的是分布式的檢索架構(gòu),大約有50個(gè)節(jié)點(diǎn)。錄入的時(shí)候,把文檔的分詞結(jié)果錄入到分布式搜索服務(wù)上,但這個(gè)分詞結(jié)果和前面所說的一千萬(wàn)的分詞結(jié)果是不一樣的。例如,一個(gè)句子“我是中國(guó)人”,分出來的結(jié)果可能只有中國(guó)人是一個(gè)詞。道客巴巴采用的方式是,把“我是中國(guó)人”做一個(gè)索引保存起來,“我”和“是”也不是兩個(gè)詞,以字為單位又做一個(gè)索引,保存到分布式搜索上。當(dāng)用戶檢索文檔的時(shí)候,指令發(fā)送到搜索服務(wù)器上,搜索的時(shí)候會(huì)把指令分發(fā)到不同的服務(wù)器,每個(gè)服務(wù)器大約從2千萬(wàn)的文檔中進(jìn)行檢索,最終把檢索的結(jié)果匯總到主服務(wù)器里面。然后主服務(wù)器再進(jìn)行一些結(jié)果的排序、優(yōu)化,把最優(yōu)質(zhì)的文檔展示給用戶。這就是檢索的流程,只需幾毫秒就可以完成。而做分片是為了保證數(shù)據(jù)在任何情況下都可以提供正常的服務(wù)。
當(dāng)用戶沒有搜索到自己想要的文檔的時(shí)候,道客巴巴會(huì)用人機(jī)結(jié)合的方式來解決。用戶可以把自己的需求發(fā)到道客巴巴網(wǎng)站上,會(huì)有千萬(wàn)個(gè)用戶協(xié)助完成。當(dāng)然,這項(xiàng)協(xié)助是付費(fèi)的。
文檔智能分類
文檔智能分類
如何將一個(gè)文檔轉(zhuǎn)換成一個(gè)空間項(xiàng)的模型是分類的目標(biāo),圖中的模型是一個(gè)多維的空間,對(duì)于一個(gè)空間項(xiàng)的模型無非是有兩個(gè)元素:特征集和特征值。特征集就是向鏈,特征值就是方向。分詞有一個(gè)結(jié)果就是特征集。道客巴巴采用TFIDF的方案完成特征值。TF就是文本的詞頻。為了辨別哪些是對(duì)文檔具有決定性的詞,道客巴巴采用IDF的概念(逆向文本詞頻)。
把一篇大的分類看成一個(gè)文章。一旦做計(jì)算機(jī)預(yù)算的時(shí)候,道客巴巴采用的是一個(gè)平均分?jǐn)?shù)的算法,用當(dāng)前這個(gè)詞的詞頻,減去miu,再除以西格瑪,miu是平均值,西格瑪是平衡差。
通過這兩種方式,得到了一個(gè)模型。首先對(duì)樣本進(jìn)行訓(xùn)練,這個(gè)樣本其實(shí)就是某個(gè)分類下的部分,文檔。然后進(jìn)行分詞、特征選擇。通過辭典能測(cè)出它的特征向量,就是得到SVM的中間向模型。采用SVM模型,得到所有分類的節(jié)點(diǎn),就是所有分類的值。道客巴巴目前是2千個(gè)分類,每2千個(gè)分類之后就對(duì)應(yīng)了這樣一個(gè)數(shù)據(jù)。當(dāng)有了這樣的數(shù)據(jù)之后,就要拿到一個(gè)新的文檔進(jìn)行比較了。
對(duì)于新的文檔首先也是進(jìn)行分詞,然后構(gòu)造它的特征向量。這時(shí)候會(huì)到不同的分類,如何比較分類值?有兩個(gè)分類向量模型,做運(yùn)算其實(shí)就是除以以前的運(yùn)算,但是有轉(zhuǎn)到AV空間上是不一樣的,有一個(gè)公式,算出來值如果越接近于1,文檔就是屬于這個(gè)分類的。實(shí)際上一篇文檔可能是屬于多篇分類。這就是進(jìn)行分類的流程。得到這樣一個(gè)結(jié)果后,在用手機(jī)訪問文檔的時(shí)候,可以分析出來用戶所關(guān)注的是什么,通過這種分類算法,到庫(kù)里面匹配,比如85%相似的文檔會(huì)推薦給用戶,這樣大大提高了用戶的閱讀效果。
劉斌介紹說,這種算法在10億文檔中得到了考驗(yàn),確實(shí)是有效的。同時(shí),還有很多細(xì)節(jié)需要完善,他希望能與各位專家共同交流、共同進(jìn)步,為互聯(lián)網(wǎng)用戶提供更優(yōu)質(zhì)、更便捷、更完善的服務(wù)。
本文由劉斌于2016年8月,在WOT2016移動(dòng)互聯(lián)網(wǎng)技術(shù)峰會(huì)數(shù)據(jù)分析專場(chǎng)《道客巴巴十億文檔的數(shù)據(jù)挖掘與應(yīng)用》主題演講整理而成。WOT2016大數(shù)據(jù)峰會(huì)將于2016年11月25-26日在北京粵財(cái)JW萬(wàn)豪酒店召開,屆時(shí),數(shù)十位大數(shù)據(jù)領(lǐng)域一線專家、數(shù)據(jù)技術(shù)先行者將齊聚現(xiàn)場(chǎng),在圍繞機(jī)器學(xué)習(xí)、實(shí)時(shí)計(jì)算、系統(tǒng)架構(gòu)、NoSQL技術(shù)實(shí)踐等前沿技術(shù)話題展開深度交流和溝通探討的同時(shí),分享大數(shù)據(jù)領(lǐng)域最新實(shí)踐和最熱門的行業(yè)應(yīng)用。了解WOT2016大數(shù)據(jù)技術(shù)峰會(huì)更多信息,請(qǐng)登陸大會(huì)官網(wǎng):http://wot.51cto.com/2016bigdata/
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】