官术网_书友最值得收藏!

3.4 信息內(nèi)容獲取大數(shù)據(jù)結(jié)構(gòu)存儲

通過爬蟲獲取的信息內(nèi)容數(shù)據(jù),通常來說是海量的,那么在進行進一步的融合分析之前,需要使用合適的方式將其進行存儲。首先,要根據(jù)采集的對象定義數(shù)據(jù)結(jié)構(gòu),用以描述獲取的網(wǎng)絡(luò)媒體信息。對于新聞、論壇、博客、微博等文本類數(shù)據(jù)存儲的數(shù)據(jù)結(jié)構(gòu)具體見表3-1。

表3-1 媒體信息常用數(shù)據(jù)格式

在定義數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,選擇合適的大數(shù)據(jù)組件進行數(shù)據(jù)存儲。這個階段需要綜合考慮整個融合分析的需求、訪問量、信息的數(shù)量以及組件的特性。常用于大數(shù)據(jù)結(jié)構(gòu)存儲的組件有以Hadoop為代表的大數(shù)據(jù)平臺,以及以Elasticsearch為代表的本地搜索引擎。典型的大數(shù)據(jù)存儲架構(gòu)如圖3-17所示。

圖3-17 典型大數(shù)據(jù)存儲架構(gòu)

其中,消息隊列組件Kafka用于存儲待進一步處理的海量數(shù)據(jù)。Kafka有高吞吐量、可定義的副本存儲、分布式高可用等特性。作為數(shù)據(jù)入庫的第一站,通常分布式的爬蟲引擎通過互聯(lián)網(wǎng)將數(shù)據(jù)采集回來后就寫入Kafka,Kafka以主題(topic,即一組特色的消息)為單位定義作業(yè)組,例如,同一組關(guān)鍵詞的采集信息可以存儲同一個topic待后續(xù)處理。

借助Kafka可將數(shù)據(jù)采集和數(shù)據(jù)處理分開異步進行。對于存入Kafka的數(shù)據(jù),可以以訂閱方式使用Spark或者MapReduce進行批量的數(shù)據(jù)處理和入庫。兩者的區(qū)別在于,Spark側(cè)重于內(nèi)存和實時計算,而MapReduce需要很小的內(nèi)存,適合離線計算。可以根據(jù)計算資源和場景來平衡選擇。

對于數(shù)據(jù)存儲,通常使用Hbase+Phoenix、YARN、HDFS、Elasticsearch等技術(shù)。HDFS作為Hadoop的核心組件,有著高可用、多副本自動備份、大容量的特性,適合存儲原始的文件,用于離線分析和數(shù)據(jù)重構(gòu)。Hbase是使用HDFS作為存儲空間的NoSQL數(shù)據(jù)庫,Phoenix作為Hbase SQL層的中間件,彌補了Hbase沒有原生二級索引的缺點,同時支持JDBC的API,可以不用操作Hbase的shell而直接使用SQL來進行數(shù)據(jù)的查詢和統(tǒng)計,支持高并發(fā)和高速的隨機讀/寫,便于開發(fā)和接入第三方分析工具。Elasticsearch是分布式的全文檢索引擎,同樣支持海量的數(shù)據(jù)存儲,非常適合列表查詢和統(tǒng)計查詢,如果有基于內(nèi)容的模糊查詢需求,幾乎沒有比Elasticsearch更合適的,但它的缺點是事務(wù)性能不佳。所以,數(shù)據(jù)存儲通常會根據(jù)前臺的功能或分析功能,將不同的數(shù)據(jù)存儲在不同的數(shù)據(jù)倉儲中。

其他的數(shù)據(jù)存儲,如MySQL、Redis也經(jīng)常使用。MySQL通常作為采集任務(wù)分配的后臺數(shù)據(jù)庫,也可以存儲離線計算的統(tǒng)計數(shù)據(jù),用于頁面中統(tǒng)計圖表的快速的數(shù)據(jù)調(diào)取。Redis作為內(nèi)存數(shù)據(jù)庫,通常用于存儲需要高速查詢的Key-Value,可以作為下發(fā)策略的存儲或者采集的瀏覽器Cookie、會話ID(SessionID)、實時計算用到的關(guān)鍵詞策略等頻繁查詢和讀取的數(shù)據(jù)。

最后,大數(shù)據(jù)的資源調(diào)度組件是YARN。YARN用于針對不同的用戶進行集群劃分,從而實現(xiàn)不同的計算任務(wù)相互獨立的并行運行。Spark、MapReduce均可依賴YARN進行計算資源調(diào)度和分配。YARN可面向不同的用戶分配其能使用的大數(shù)據(jù)資源,從而避免不同用戶競爭資源、造成集群運算效率的下降。

主站蜘蛛池模板: 泸西县| 遵义市| 祁阳县| 奇台县| 郎溪县| 宿松县| 舞钢市| 樟树市| 长垣县| 仙桃市| 德庆县| 遂平县| 武城县| 崇明县| 元氏县| 尼玛县| 乐昌市| 郎溪县| 额敏县| 济南市| 开鲁县| 吉木萨尔县| 普陀区| 莒南县| 河间市| 绥宁县| 延寿县| 博罗县| 柞水县| 甘南县| 奉化市| 枝江市| 聂荣县| 临西县| 巢湖市| 曲水县| 调兵山市| 蓝山县| 宁南县| 沈阳市| 全州县|