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