大数据采集技术综述
????????近年來,以大數(shù)據(jù)、物聯(lián)網(wǎng)、人工智能、5G為核心特征的數(shù)字化浪潮正席卷全球。隨著網(wǎng)絡(luò)和信息技術(shù)的不斷普及,人類產(chǎn)生的數(shù)據(jù)量正在呈指數(shù)級(jí)增長(zhǎng)。大約每?jī)赡攴环?#xff0c;這意味著人類在最近兩年產(chǎn)生的數(shù)據(jù)量相當(dāng)于之前產(chǎn)生的全部數(shù)據(jù)量。世界上每時(shí)每刻都在產(chǎn)生的大量的數(shù)據(jù),包括物聯(lián)網(wǎng)傳 感器數(shù)據(jù)、社交網(wǎng)絡(luò)數(shù)據(jù)、商品交易數(shù)據(jù)等等。 面對(duì)如此巨大的數(shù)據(jù),與之相關(guān)的采集、存儲(chǔ)、分析等等環(huán)節(jié)產(chǎn)生了一系列的問題。如何收集這些數(shù)據(jù)并且進(jìn)行轉(zhuǎn)換分析存儲(chǔ)以及有效率的分析成為巨大的挑戰(zhàn)。需要有這樣一個(gè)系統(tǒng)用來收集這樣的數(shù)據(jù),并且對(duì)數(shù)據(jù)進(jìn)提取、轉(zhuǎn)換、加載。
????????本節(jié)就介紹這樣一個(gè)大數(shù)據(jù)采集技術(shù)。什么是大數(shù)據(jù)采集技術(shù)?大數(shù)據(jù)采集技術(shù)就是對(duì)數(shù)據(jù)進(jìn)行ETL操作,通過對(duì)數(shù)據(jù)進(jìn)行提取、轉(zhuǎn)換、加載,最終挖掘數(shù)據(jù)的潛在價(jià)值。然后提供給用戶解決方案或者決策參考。ETL,是英文 Extract-Transform-Load 的縮寫,數(shù)據(jù)從數(shù)據(jù)來源端經(jīng)過抽取(extract)、轉(zhuǎn)換(transform)、加載(load)到目的端,然后進(jìn)行處理分析的過程。用戶從數(shù)據(jù)源抽取出所需的數(shù)據(jù),經(jīng)過數(shù)據(jù)清洗,最終按照預(yù)先定義好的數(shù)據(jù)模型,將數(shù)據(jù)加載到數(shù)據(jù)倉庫中去,最后對(duì)數(shù)據(jù)倉庫中的數(shù)據(jù)進(jìn)行數(shù)據(jù)分析和處理。數(shù)據(jù)采集位于數(shù)據(jù)分析生命周期的重要一環(huán),它通過傳感器數(shù)據(jù)、社交網(wǎng)絡(luò)數(shù)據(jù)、移動(dòng)互聯(lián)網(wǎng)數(shù)據(jù)等方式獲得各種類型的結(jié)構(gòu)化、半結(jié)構(gòu)化及非結(jié)構(gòu)化的海量數(shù)據(jù)。由于采集的數(shù)據(jù)種類錯(cuò)綜復(fù)雜,對(duì)于這種不同種類的數(shù)據(jù)。我們進(jìn)行數(shù)據(jù)分析,必須通過提取技術(shù)。將復(fù)雜格式的數(shù)據(jù),進(jìn)行數(shù)據(jù)提取,從數(shù)據(jù)原始格式中提取(extract)出我們需要的數(shù)據(jù),這里可以丟棄一些不重要的字段。對(duì)于數(shù)據(jù)提取后的數(shù)據(jù),由于數(shù)據(jù)源頭的采集可能存在不準(zhǔn)確。所以我們必須進(jìn)行數(shù)據(jù)清洗,對(duì)于那些不正確的數(shù)據(jù)進(jìn)行過濾、剔除。針對(duì)不同的應(yīng)用場(chǎng)景,對(duì)數(shù)據(jù)進(jìn)行分析的工具或者系統(tǒng)不同,我們還需要對(duì)數(shù)據(jù)進(jìn)行數(shù)據(jù)轉(zhuǎn)換(transform)操作,將數(shù)據(jù)轉(zhuǎn)換成不同的數(shù)據(jù)格式,最終按照預(yù)先定義好的數(shù)據(jù)倉庫模型,將數(shù)據(jù)加載(load)到數(shù)據(jù)倉庫中去。
在現(xiàn)實(shí)生活中,數(shù)據(jù)產(chǎn)生的種類很多,并且不同種類的數(shù)據(jù)產(chǎn)生的方式不同。對(duì)于大數(shù)據(jù)采集系統(tǒng),主要分為以下三類系統(tǒng):
????????一、系統(tǒng)日志采集系統(tǒng)。許多公司的業(yè)務(wù)平臺(tái)每天都會(huì)產(chǎn)生大量的日志數(shù)據(jù)。對(duì)于這些日志信息,我們可以得到出很多有價(jià)值的數(shù)據(jù)。通過對(duì)這些日志信息進(jìn)行日志采集、收集,然后進(jìn)行數(shù)據(jù)分析,挖掘公司業(yè)務(wù)平臺(tái)日志數(shù)據(jù)中的潛在價(jià)值。為公司決策和公司后臺(tái)服務(wù)器平臺(tái)性能評(píng)估提高可靠的數(shù)據(jù)保證。系統(tǒng)日志采集系統(tǒng)做的事情就是收集日志數(shù)據(jù)提供離線和在線的實(shí)時(shí)分析使用。目前常用的開源日志收集系統(tǒng)有Flume、Scribe等。 Apache Flume是一個(gè)分布式、可靠、可用的服務(wù),用于高效地收集、聚合和移動(dòng) 大量的日志數(shù)據(jù),它具有基于流式數(shù)據(jù)流的簡(jiǎn)單靈活的架構(gòu)。其可靠性機(jī)制和許多故障轉(zhuǎn)移和恢復(fù)機(jī)制,使Flume具有強(qiáng)大的容錯(cuò)能力。Scribe是Facebook開源的日志采集系統(tǒng)。Scribe實(shí)際上是一個(gè)分布式共享隊(duì)列,它可以從各種數(shù)據(jù)源上收集日志數(shù)據(jù),然后放入它上面的共享隊(duì)列中。Scribe可以接受thrift client發(fā)送過來的數(shù)據(jù),將其放入它上面的消息隊(duì)列中。然后通過消息隊(duì)列將數(shù)據(jù)Push到分布式存儲(chǔ)系統(tǒng)中,并且由分布式存儲(chǔ)系統(tǒng)提供可靠的容錯(cuò)性能。如果最后的分布式存儲(chǔ)系統(tǒng)crash時(shí),Scribe中的消息隊(duì)列還可以提供容錯(cuò)能力,它會(huì)還日志數(shù)據(jù)寫到本地磁盤中。Scribe支持持久化的消息隊(duì)列,來提供日志收集系統(tǒng)的容錯(cuò)能力。
????????二、網(wǎng)絡(luò)數(shù)據(jù)采集系統(tǒng)。通過網(wǎng)絡(luò)爬蟲和一些網(wǎng)站平臺(tái)提供的公共API(如Twitter和新浪微博API)等方式從網(wǎng)站上獲取數(shù)據(jù)。這樣就可以將非結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)化數(shù)據(jù)的網(wǎng)頁數(shù)據(jù)從網(wǎng)頁中提取出來。并將其提取、清洗、轉(zhuǎn)換成結(jié)構(gòu)化的數(shù)據(jù),將其存儲(chǔ)為統(tǒng)一的本地文件數(shù)據(jù)。目前常用的網(wǎng)頁爬蟲系統(tǒng)有Apache Nutch、Crawler4j、Scrapy等框架。Apache Nutch是一個(gè)高度可擴(kuò)展和可伸縮性的分布式爬蟲框架。Apache通過分布式抓取網(wǎng)頁數(shù)據(jù),并且由Hadoop支持,通過提交MapReduce任務(wù)來抓取網(wǎng)頁數(shù)據(jù),并可以將網(wǎng)頁數(shù)據(jù)存儲(chǔ)在HDFS分布式文件系統(tǒng)中。Nutch可以進(jìn)行分布式多任務(wù)進(jìn)行爬取數(shù)據(jù),存儲(chǔ)和索引。由于多個(gè)機(jī)器并行做爬取任務(wù),Nutch利用多個(gè)機(jī)器充分利用機(jī)器的計(jì)算資源和存儲(chǔ)能力,大大提高系統(tǒng)爬取數(shù)據(jù)能力。Crawler4j、Scrapy都是一個(gè)爬蟲框架,提供給開發(fā)人員便利的爬蟲API接口。開發(fā)人員只需要關(guān)心爬蟲API接口的實(shí)現(xiàn),不需要關(guān)心具體框架怎么爬取數(shù)據(jù)。Crawler4j、Scrapy框架大大降低了開發(fā)人員開發(fā)速率,開發(fā)人員可以很快的完成一個(gè)爬蟲系統(tǒng)的開發(fā)。
????????三、數(shù)據(jù)庫采集系統(tǒng)。一些企業(yè)會(huì)使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫MySQL和Oracle等來存儲(chǔ)數(shù)據(jù)。除此之外,Redis和MongoDB這樣的NoSQL數(shù)據(jù)庫也常用于數(shù)據(jù)的采集。企業(yè)每時(shí)每刻產(chǎn)生的業(yè)務(wù)數(shù)據(jù),以數(shù)據(jù)庫一行記錄形式被直接寫入到數(shù)據(jù)庫中。通過數(shù)據(jù)庫采集系統(tǒng)直接與企業(yè)業(yè)務(wù)后臺(tái)服務(wù)器結(jié)合,將企業(yè)業(yè)務(wù)后臺(tái)每時(shí)每刻都在產(chǎn)生大量的業(yè)務(wù)記錄寫入到數(shù)據(jù)庫中,最后由特定的處理分許系統(tǒng)進(jìn)行系統(tǒng)分析。
????????針對(duì)大數(shù)據(jù)采集技術(shù),目前主要流行以下大數(shù)據(jù)采集分析技術(shù)。Hive是Facebook團(tuán)隊(duì)開發(fā)的一個(gè)可以支持PB級(jí)別的可伸縮性的數(shù)據(jù)倉庫。這是一個(gè)建立在Hadoop之上的開源數(shù)據(jù)倉庫解決方案。 Hive支持使用類似SQL的聲明性語言(HiveQL)表示的查詢,這些語言被編譯為使用Hadoop執(zhí)行的MapReduce作業(yè)。另外,HiveQL使用戶可以將自定義的map-reduce腳本插入到查詢中。該語言支持基本數(shù)據(jù)類型,類似數(shù)組和Map的集合以及嵌套組合。 HiveQL語句被提交執(zhí)行。首先Driver將查詢傳遞給編譯器compiler,通過典型的解析,類型檢查和語義分析階段,使用存儲(chǔ)在Metastore中的元數(shù)據(jù)。編譯器生成一個(gè)邏輯任務(wù),然后通過一個(gè)簡(jiǎn)單的基于規(guī)則的優(yōu)化器進(jìn)行優(yōu)化。最后生成一組MapReduce任務(wù)和HDFS Task的DAG優(yōu)化后的Task。 然后執(zhí)行引擎使用Hadoop按照它們的依賴性順序執(zhí)行這些Task。Hive簡(jiǎn)化了對(duì)于那些不熟悉Hadoop MapReduce接口的用戶學(xué)習(xí)門檻,Hive提供了一些列簡(jiǎn)單的HiveQL語句,對(duì)數(shù)據(jù)倉庫中的數(shù)據(jù)進(jìn)行簡(jiǎn)要分析與計(jì)算。
????????在大數(shù)據(jù)采技術(shù)中,其中有一個(gè)關(guān)鍵的環(huán)節(jié)就是transform操作。它將清洗后的數(shù)據(jù)轉(zhuǎn)換成不同的數(shù)據(jù)形式,由不同的數(shù)據(jù)分析系統(tǒng)和計(jì)算系統(tǒng)進(jìn)行處理和分析。將批量數(shù)據(jù)從生產(chǎn)數(shù)據(jù)庫加載到Hadoop HDFS分布式文件系統(tǒng)中或者從Hadoop HDFS文件系統(tǒng)將數(shù)據(jù)轉(zhuǎn)換為生產(chǎn)數(shù)據(jù)庫中,這是一項(xiàng)艱巨的任務(wù)。 用戶必須考慮確保數(shù)據(jù)一致性,生產(chǎn)系統(tǒng)資源消耗等細(xì)節(jié)。使用腳本傳輸數(shù)據(jù)效率低下且耗時(shí)。Apache Sqoop就是用來解決這個(gè)問題,Sqoop允許從結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)(如關(guān)系數(shù)據(jù)庫,企業(yè)數(shù)據(jù)倉庫和NoSQL系統(tǒng))輕松導(dǎo)入和導(dǎo)出數(shù)據(jù)。使用Sqoop,您可以將來自外部系統(tǒng)的數(shù)據(jù)配置到HDFS上,并將表填入Hive和HBase中。運(yùn)行Sqoop時(shí),被傳輸?shù)臄?shù)據(jù)集被分割成不同的分區(qū),一個(gè)只有mapper Task的Job被啟動(dòng),mapperTask負(fù)責(zé)傳輸這個(gè)數(shù)據(jù)集的一個(gè)分區(qū)。Sqoop使用數(shù)據(jù)庫元數(shù)據(jù)來推斷數(shù)據(jù)類型,因此每個(gè)數(shù)據(jù)記錄都以類型安全的方式進(jìn)行處理。
總結(jié)
- 上一篇: 批处理文件总结(三)
- 下一篇: WPAD原理介绍暨故障排查:ISA200