柴志菲 李翔
摘要:在人工智能流行的時(shí)代,數(shù)據(jù)量的增長(zhǎng)速度也是無(wú)法估計(jì)的,網(wǎng)絡(luò)上的留言也越來(lái)越多,也難免會(huì)有一些污穢的語(yǔ)言,所以?xún)艋W(wǎng)絡(luò)環(huán)境是很重要的事情,我們可以利用自動(dòng)化的網(wǎng)頁(yè)抓取技術(shù)將網(wǎng)絡(luò)上的留言保存下來(lái),通過(guò)設(shè)計(jì)大數(shù)據(jù)架構(gòu)對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)計(jì)算,然后分批裝載進(jìn)數(shù)據(jù)庫(kù),常見(jiàn)的流式處理技術(shù)像kafka[1]+spark streaming[2]+zookeeper[3]這樣進(jìn)行架構(gòu),然后再將處理后的數(shù)據(jù)存儲(chǔ)進(jìn)hive 或者HDFS這樣的存儲(chǔ)單元。
關(guān)鍵詞:大數(shù)據(jù)架構(gòu),流式處理,實(shí)時(shí)計(jì)算
如今我們正處于人工智能的時(shí)代,大數(shù)據(jù),人工智能,自動(dòng)化等概念越來(lái)越深入人心,讓我們對(duì)于這些詞匯越來(lái)越有清晰的印象,而在數(shù)據(jù)挖掘,數(shù)據(jù)計(jì)算方面,整理一個(gè)思路清晰的架構(gòu)思路也是非常重要的。
我們所出的網(wǎng)絡(luò)環(huán)境,每天都會(huì)有很多人在上面發(fā)表自己的言論,這就會(huì)讓網(wǎng)絡(luò)成為一個(gè)自由的環(huán)境,但是也有很多不法分子在網(wǎng)絡(luò)上污穢的言論污染了我們所在的空間,這是一種不好且存在的現(xiàn)象,而我們可以使用人工智能大數(shù)據(jù)的手段,快速識(shí)別這些污穢的詞匯,從根本上杜絕這些情況的發(fā)生,這就需要設(shè)計(jì)一個(gè)可靠合理的大數(shù)據(jù)架構(gòu)了。
1.數(shù)據(jù)集
我們使用自動(dòng)化爬蟲(chóng)框架源源不斷的去獲取到數(shù)據(jù)源,從某網(wǎng)站上使用代理池ip不斷替換身份,然后抓取網(wǎng)絡(luò)的言論,最后保證獲取到的數(shù)據(jù)大約是百萬(wàn)量級(jí)的。
最開(kāi)始的時(shí)候,我們主要是從百度貼吧,新浪微博的客戶端去進(jìn)行獲取,因?yàn)閷?duì)于數(shù)據(jù)加密的算法不會(huì)很難,可以很容易的就獲取到,然后將這些數(shù)據(jù)規(guī)范化,存儲(chǔ)進(jìn)我們的數(shù)據(jù)庫(kù),或者可以說(shuō)是落盤(pán)與內(nèi)存的一種中間狀態(tài)進(jìn)行存儲(chǔ)。
2.設(shè)計(jì)架構(gòu)
接下來(lái),就是較為重要的架構(gòu)設(shè)計(jì)了。
本文將架構(gòu)的介紹按照數(shù)據(jù)流向的順序進(jìn)行介紹。
第一步,自動(dòng)化爬蟲(chóng)獲取到的數(shù)據(jù)我們是落盤(pán)到HDFS上的,如果想進(jìn)行計(jì)算,就需要將HDFS分區(qū)上的內(nèi)容讀進(jìn)內(nèi)存,但是HDFS[6]上的數(shù)據(jù)是海量的,如果一次全部讀進(jìn)來(lái),會(huì)堆棧溢出,所以此方案設(shè)計(jì)為按照block編號(hào)的順序去進(jìn)行讀取,之后對(duì)接到flume[7],按照順序去讀取每個(gè)block上的評(píng)論信息。
第二步,被flume讀取進(jìn)來(lái)之后,直接對(duì)接到kafka的生產(chǎn)者階段,此時(shí)系統(tǒng)整個(gè)過(guò)程都是需要使用zookeeper進(jìn)行高可用保障的,這里使用的znode主要用來(lái)存儲(chǔ)的是flume的配置信息,因?yàn)橄到y(tǒng)可以在不同流量的時(shí)候?qū)?yīng)到不同的采集配置。
第三步,就是系統(tǒng)中的kafka了,它主要起到了解耦的效果,數(shù)據(jù)在爬取讀入的過(guò)程,可以稱(chēng)之為生產(chǎn)數(shù)據(jù),之后利用kafka內(nèi)部的partition運(yùn)送所產(chǎn)生的的數(shù)據(jù)到消費(fèi)者端。由于此系統(tǒng)不需要過(guò)高的效率,所以這里將kafka的ack.require設(shè)置為exactly once,保證每一條信息的可靠傳達(dá)。這里的消費(fèi)者端也就是下面會(huì)提到的Sparkstreaming,在上層應(yīng)用中,系統(tǒng)會(huì)通過(guò)測(cè)試判斷當(dāng)前系統(tǒng)可支持的運(yùn)算能力,當(dāng)超過(guò)可容納的閾值的時(shí)候,會(huì)在消費(fèi)者端使用阻塞隊(duì)列保證系統(tǒng)的安全。
第四步,自然是最重要的SparkStreaming,此系統(tǒng)采用這項(xiàng)技術(shù)主要也是為了模擬batch運(yùn)算,將生產(chǎn)者端運(yùn)輸進(jìn)來(lái)的數(shù)據(jù)進(jìn)行微批次的計(jì)算,預(yù)處理等操作,篩選掉有些可能沒(méi)有價(jià)值的數(shù)據(jù),將這些數(shù)據(jù)一并進(jìn)行回收,最后將格式化的數(shù)據(jù)進(jìn)行整理,放入到hive中,分庫(kù)分表,以便于進(jìn)行后續(xù)進(jìn)行數(shù)據(jù)挖掘的同學(xué)進(jìn)行相關(guān)的操作和使用數(shù)據(jù)。
3.測(cè)試調(diào)優(yōu)
此項(xiàng)流程,主要是為了測(cè)試系統(tǒng)的各項(xiàng)閾值,例如kafka承受數(shù)據(jù)的閾值,消費(fèi)者端與kafka進(jìn)行TCP連接的句柄數(shù)閾值,spark層阻塞隊(duì)列長(zhǎng)度的閾值,內(nèi)存,cpu,堆等等的閾值,分別進(jìn)行測(cè)量與預(yù)估,制定優(yōu)化方案,接著將平臺(tái)的一些設(shè)計(jì)進(jìn)行調(diào)整,令體驗(yàn)上升,性能更優(yōu)。
而測(cè)試的過(guò)程,可以采用多種方案,比如說(shuō)Apache Jmeter,Apache Bench等等,都可以滿足我們的需求,實(shí)時(shí)監(jiān)控當(dāng)前狀態(tài)各性能指標(biāo)以及參數(shù),是否滿足我們預(yù)期的標(biāo)準(zhǔn)。
測(cè)試之后,發(fā)現(xiàn)當(dāng)前系統(tǒng)存在一個(gè)問(wèn)題,就是我們無(wú)法完成持久化,也就是說(shuō),如果在當(dāng)前內(nèi)存中出現(xiàn)宕機(jī),那么正在運(yùn)算的block的數(shù)據(jù),會(huì)丟失,于是便根據(jù)這個(gè)問(wèn)題設(shè)計(jì)了一個(gè)方案,參考Redis的RDB和AOF的混合持久化方式,每100條評(píng)論數(shù)據(jù)進(jìn)行一次落盤(pán),并且在加載當(dāng)前數(shù)據(jù)的時(shí)候,啟用AOF的手段保證數(shù)據(jù)的穩(wěn)定性。
4.總結(jié)
此系統(tǒng)主要會(huì)考察一些團(tuán)隊(duì)針對(duì)于分布式架構(gòu)體系的應(yīng)用,將一些生活中常見(jiàn)的場(chǎng)景使用一些相關(guān)技術(shù)得到數(shù)據(jù)整理,以便人工智能算法可以得以落地,團(tuán)隊(duì)通過(guò)查閱資料,單元測(cè)試等方法將一些書(shū)上的案例得以應(yīng)用,并且在此項(xiàng)目中,也確實(shí)擁有一定的商業(yè)價(jià)值,例如可以將此方案應(yīng)用在社交平臺(tái)上,凈化社交媒體的網(wǎng)絡(luò)環(huán)境,也可以應(yīng)用在游戲中,以防雙方因?yàn)榍榫w出現(xiàn)國(guó)際語(yǔ)言,也包括像微博,貼吧等地方,都可以應(yīng)用。
引用:
[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.