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