柴志菲 李翔
摘要:在人工智能流行的時代,數(shù)據(jù)量的增長速度也是無法估計的,網(wǎng)絡上的留言也越來越多,也難免會有一些污穢的語言,所以凈化網(wǎng)絡環(huán)境是很重要的事情,我們可以利用自動化的網(wǎng)頁抓取技術將網(wǎng)絡上的留言保存下來,通過設計大數(shù)據(jù)架構(gòu)對數(shù)據(jù)進行實時計算,然后分批裝載進數(shù)據(jù)庫,常見的流式處理技術像kafka[1]+spark streaming[2]+zookeeper[3]這樣進行架構(gòu),然后再將處理后的數(shù)據(jù)存儲進hive 或者HDFS這樣的存儲單元。
關鍵詞:大數(shù)據(jù)架構(gòu),流式處理,實時計算
如今我們正處于人工智能的時代,大數(shù)據(jù),人工智能,自動化等概念越來越深入人心,讓我們對于這些詞匯越來越有清晰的印象,而在數(shù)據(jù)挖掘,數(shù)據(jù)計算方面,整理一個思路清晰的架構(gòu)思路也是非常重要的。
我們所出的網(wǎng)絡環(huán)境,每天都會有很多人在上面發(fā)表自己的言論,這就會讓網(wǎng)絡成為一個自由的環(huán)境,但是也有很多不法分子在網(wǎng)絡上污穢的言論污染了我們所在的空間,這是一種不好且存在的現(xiàn)象,而我們可以使用人工智能大數(shù)據(jù)的手段,快速識別這些污穢的詞匯,從根本上杜絕這些情況的發(fā)生,這就需要設計一個可靠合理的大數(shù)據(jù)架構(gòu)了。
1.數(shù)據(jù)集
我們使用自動化爬蟲框架源源不斷的去獲取到數(shù)據(jù)源,從某網(wǎng)站上使用代理池ip不斷替換身份,然后抓取網(wǎng)絡的言論,最后保證獲取到的數(shù)據(jù)大約是百萬量級的。
最開始的時候,我們主要是從百度貼吧,新浪微博的客戶端去進行獲取,因為對于數(shù)據(jù)加密的算法不會很難,可以很容易的就獲取到,然后將這些數(shù)據(jù)規(guī)范化,存儲進我們的數(shù)據(jù)庫,或者可以說是落盤與內(nèi)存的一種中間狀態(tài)進行存儲。
2.設計架構(gòu)
接下來,就是較為重要的架構(gòu)設計了。
本文將架構(gòu)的介紹按照數(shù)據(jù)流向的順序進行介紹。
第一步,自動化爬蟲獲取到的數(shù)據(jù)我們是落盤到HDFS上的,如果想進行計算,就需要將HDFS分區(qū)上的內(nèi)容讀進內(nèi)存,但是HDFS[6]上的數(shù)據(jù)是海量的,如果一次全部讀進來,會堆棧溢出,所以此方案設計為按照block編號的順序去進行讀取,之后對接到flume[7],按照順序去讀取每個block上的評論信息。
第二步,被flume讀取進來之后,直接對接到kafka的生產(chǎn)者階段,此時系統(tǒng)整個過程都是需要使用zookeeper進行高可用保障的,這里使用的znode主要用來存儲的是flume的配置信息,因為系統(tǒng)可以在不同流量的時候?qū)讲煌牟杉渲谩?/p>
第三步,就是系統(tǒng)中的kafka了,它主要起到了解耦的效果,數(shù)據(jù)在爬取讀入的過程,可以稱之為生產(chǎn)數(shù)據(jù),之后利用kafka內(nèi)部的partition運送所產(chǎn)生的的數(shù)據(jù)到消費者端。由于此系統(tǒng)不需要過高的效率,所以這里將kafka的ack.require設置為exactly once,保證每一條信息的可靠傳達。這里的消費者端也就是下面會提到的Sparkstreaming,在上層應用中,系統(tǒng)會通過測試判斷當前系統(tǒng)可支持的運算能力,當超過可容納的閾值的時候,會在消費者端使用阻塞隊列保證系統(tǒng)的安全。
第四步,自然是最重要的SparkStreaming,此系統(tǒng)采用這項技術主要也是為了模擬batch運算,將生產(chǎn)者端運輸進來的數(shù)據(jù)進行微批次的計算,預處理等操作,篩選掉有些可能沒有價值的數(shù)據(jù),將這些數(shù)據(jù)一并進行回收,最后將格式化的數(shù)據(jù)進行整理,放入到hive中,分庫分表,以便于進行后續(xù)進行數(shù)據(jù)挖掘的同學進行相關的操作和使用數(shù)據(jù)。
3.測試調(diào)優(yōu)
此項流程,主要是為了測試系統(tǒng)的各項閾值,例如kafka承受數(shù)據(jù)的閾值,消費者端與kafka進行TCP連接的句柄數(shù)閾值,spark層阻塞隊列長度的閾值,內(nèi)存,cpu,堆等等的閾值,分別進行測量與預估,制定優(yōu)化方案,接著將平臺的一些設計進行調(diào)整,令體驗上升,性能更優(yōu)。
而測試的過程,可以采用多種方案,比如說Apache Jmeter,Apache Bench等等,都可以滿足我們的需求,實時監(jiān)控當前狀態(tài)各性能指標以及參數(shù),是否滿足我們預期的標準。
測試之后,發(fā)現(xiàn)當前系統(tǒng)存在一個問題,就是我們無法完成持久化,也就是說,如果在當前內(nèi)存中出現(xiàn)宕機,那么正在運算的block的數(shù)據(jù),會丟失,于是便根據(jù)這個問題設計了一個方案,參考Redis的RDB和AOF的混合持久化方式,每100條評論數(shù)據(jù)進行一次落盤,并且在加載當前數(shù)據(jù)的時候,啟用AOF的手段保證數(shù)據(jù)的穩(wěn)定性。
4.總結(jié)
此系統(tǒng)主要會考察一些團隊針對于分布式架構(gòu)體系的應用,將一些生活中常見的場景使用一些相關技術得到數(shù)據(jù)整理,以便人工智能算法可以得以落地,團隊通過查閱資料,單元測試等方法將一些書上的案例得以應用,并且在此項目中,也確實擁有一定的商業(yè)價值,例如可以將此方案應用在社交平臺上,凈化社交媒體的網(wǎng)絡環(huán)境,也可以應用在游戲中,以防雙方因為情緒出現(xiàn)國際語言,也包括像微博,貼吧等地方,都可以應用。
引用:
[1]Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications.
[2]By running on Spark, Spark Streaming lets you reuse the same code for batch processing, join streams against historical data, or run ad-hoc queries on stream state. Build powerful interactive applications, not just analytics.
[3]ZooKeeper aims at distilling the essence of these different services into a very simple interface to a centralized coordination service.
[4]The Hadoop Distributed File System (HDFS) is a distributed file system designed to run on commodity hardware.
[5]Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexible architecture based on streaming data flows. It is robust and fault tolerant with tunable reliability mechanisms and many failover and recovery mechanisms. It uses a simple extensible data model that allows for online analytic application.