數(shù)據(jù)采集與預(yù)處理(第2版)-課后習(xí)題答案_第1頁(yè)
數(shù)據(jù)采集與預(yù)處理(第2版)-課后習(xí)題答案_第2頁(yè)
數(shù)據(jù)采集與預(yù)處理(第2版)-課后習(xí)題答案_第3頁(yè)
數(shù)據(jù)采集與預(yù)處理(第2版)-課后習(xí)題答案_第4頁(yè)
數(shù)據(jù)采集與預(yù)處理(第2版)-課后習(xí)題答案_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

課后習(xí)題參考答案

【項(xiàng)目1:數(shù)據(jù)采集與預(yù)處理準(zhǔn)備】

1、通過(guò)網(wǎng)絡(luò)收集資料,了解常用的ETL工具有哪些?

(1)Kettle:KelUe是一款國(guó)外開(kāi)源的ETL工具。KelUe是純java編寫(xiě),具有高效且

穩(wěn)定的數(shù)據(jù)抽取功能。

(2)FineDataLink:FineDataLink數(shù)據(jù)集成平臺(tái)(簡(jiǎn)寫(xiě):FDL)是國(guó)內(nèi)知名商業(yè)智能

廠商帆軟面向IT人員推出的企業(yè)級(jí)一站式數(shù)據(jù)集成平臺(tái)產(chǎn)品,擁有實(shí)時(shí)同步和離線計(jì)算兩

大引擎,具備實(shí)時(shí)數(shù)據(jù)同步、ETL和ELT定時(shí)數(shù)據(jù)計(jì)算等核心能力。

(3)Talend:Talend中文名拓藍(lán),是一個(gè)開(kāi)源的ETL數(shù)據(jù)集成解決方案,與企業(yè)內(nèi)

部和云端的數(shù)據(jù)源都兼容。該平臺(tái)包括數(shù)百個(gè)預(yù)建的集成,簡(jiǎn)化了數(shù)據(jù)處理流程。除了開(kāi)

源版本,Talend還提供了一個(gè)付費(fèi)的數(shù)據(jù)管理平臺(tái),包括用于生產(chǎn)力、設(shè)計(jì)、管理、監(jiān)控

和數(shù)據(jù)治理的額外工具和功能。

(4)DataStage:DataStage是IBM公司的商業(yè)軟件,它為整個(gè)ETL過(guò)程提供了一個(gè)

圖形化的開(kāi)發(fā)環(huán)境,是一套專(zhuān)門(mén)對(duì)多種操作數(shù)據(jù)源的數(shù)據(jù)抽取、轉(zhuǎn)換和維護(hù)過(guò)程進(jìn)行簡(jiǎn)化

和自動(dòng)化,并將其輸入數(shù)據(jù)集或數(shù)據(jù)倉(cāng)庫(kù)的集成工具,適合大規(guī)模的ETL應(yīng)用。

2、通過(guò)網(wǎng)絡(luò)收集資料-了解日志采集系統(tǒng)有哪些?基于python的網(wǎng)絡(luò)爬蟲(chóng)框架有哪

些?

流行的日志采集系統(tǒng)包括:

Cloudera/ApacheFlume:這是一個(gè)高可用的、高可靠的、分布式的海量日志興集、聚

合和傳輸系統(tǒng)。

FacebookScribe:Facebook開(kāi)發(fā)的日志采集系統(tǒng)。

ManageEngineEventLogAnalyzer:適用于Windows操作系統(tǒng)的日志管理系統(tǒng)c

MicrosoftLogParser:微軟開(kāi)發(fā)的日志解析工具。

Filebeat:用于轉(zhuǎn)發(fā)和集中日志數(shù)據(jù)的輕量級(jí)傳送程序,可以收集日志事件并轉(zhuǎn)發(fā)到

Elasticscarch或Logstash進(jìn)行索引。

Graylog:一個(gè)開(kāi)源的日志聚合、分析、審計(jì)、展現(xiàn)和預(yù)警工具,功能上類(lèi)似于ELK,

但更簡(jiǎn)單、高效且部署使用簡(jiǎn)單。

LogDNA:提供基于代理和無(wú)代理的日志收集,支持syslog和HTTP(S)以及全文搜

索和可視化,可以作為SaaS或內(nèi)部使用。

基于python的網(wǎng)絡(luò)爬蟲(chóng)框架有:

Scmpy是一個(gè)可以爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫(xiě)的應(yīng)用框架,能夠應(yīng)用在數(shù)

據(jù)挖掘、信息處理、存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。

Pyspider是用pylhon實(shí)現(xiàn)的的網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng),可以在瀏覽器界面上編寫(xiě)腳本,也可以

實(shí)時(shí)查看功能的調(diào)度和爬取結(jié)果。后端使用常用的數(shù)據(jù)庫(kù)進(jìn)行爬取結(jié)果的存儲(chǔ),并且還能

定時(shí)設(shè)置任務(wù)與任務(wù)優(yōu)先級(jí)。

Crawley可以快速爬取對(duì)應(yīng)網(wǎng)站的相關(guān)內(nèi)容,支持關(guān)系和非關(guān)系數(shù)據(jù)庫(kù),數(shù)據(jù)可以導(dǎo)

出的格式為JSON、XML等。

Portia是scrapyhub開(kāi)源的一款可視化爬蟲(chóng)規(guī)則編寫(xiě)工具。它提供可視化Web頁(yè)面,

用戶只需耍通過(guò)點(diǎn)擊標(biāo)注頁(yè)面上需要抽取的數(shù)據(jù),不需要任何編程知識(shí)即可完成規(guī)則開(kāi)發(fā)。

BeautifulSoup是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù),它可以通

過(guò)用戶喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航、查找、修改文檔的功能。

Grab是一個(gè)用于構(gòu)建Web模板的Python框架,用戶可以通過(guò)Grab構(gòu)建各種復(fù)雜的網(wǎng)

頁(yè)抓取工具,從簡(jiǎn)單的兒行腳本到處理數(shù)百萬(wàn)個(gè)網(wǎng)頁(yè)的復(fù)雜異步網(wǎng)站抓取工具。Grab能夠

提供一個(gè)API用于執(zhí)行網(wǎng)絡(luò)請(qǐng)求和處理接收到的內(nèi)容,比如與HTML文檔的DOM樹(shù)進(jìn)行

交互。

3^布隆過(guò)濾器(BloomFilter)的基本思想是什么?

布隆過(guò)濾器的基本思想是,當(dāng)一個(gè)元素被加入集合時(shí),通過(guò)上個(gè)散列函數(shù)將這個(gè)元素

映射成一個(gè)位數(shù)組中的攵個(gè)點(diǎn),把它們置為1。檢索時(shí),只要看看這些點(diǎn)是不是都是1就知

道集合中有沒(méi)有被檢元素:如果這些點(diǎn)有任何一個(gè)是0,則被檢元素一定不在;如果都是1,

則被檢元素很可能存在。

4、現(xiàn)實(shí)世界采集到的大量的、各種各樣的數(shù)據(jù)一般具有哪些特征?

(1)不完整性。不完整性指的是數(shù)據(jù)記錄中可能會(huì)出現(xiàn)有一些數(shù)據(jù)屬性的值丟失或不

確定的情況,還有可能缺失必需的數(shù)據(jù)。

(2)含噪聲。含噪聲指的是數(shù)據(jù)具有不正確的屬性值,包含錯(cuò)誤或存在偏離期望的離

群值(指與其他數(shù)值比較差異較大的值)。

(3)雜亂性(不一致性)。原始數(shù)據(jù)是從各個(gè)實(shí)際應(yīng)用系統(tǒng)中獲取的,由于各應(yīng)用

系統(tǒng)的數(shù)據(jù)缺乏統(tǒng)一標(biāo)準(zhǔn)的定義,數(shù)據(jù)結(jié)構(gòu)也有較大的差異,因此各系統(tǒng)間的數(shù)據(jù)存在

較大的不一致性。

5、數(shù)據(jù)采樣技術(shù)分為哪幾種?

數(shù)據(jù)采樣技術(shù)分為加權(quán)采樣、隨機(jī)采樣和分層采樣3類(lèi),其目的是從數(shù)據(jù)集口采集部

分樣本進(jìn)行處理。

6、填補(bǔ)遺漏的數(shù)據(jù)值,處理不完備數(shù)據(jù)集的方法主要有哪些類(lèi)型?

①刪除元組

刪除元組就是將存在遺漏信息屬性值的對(duì)象(元組,記錄)刪除,從而得到一個(gè)完

備的信息表。

②數(shù)據(jù)補(bǔ)齊

這類(lèi)方法是用一定的值去填充空值,從而使信息表完備化。通常基于統(tǒng)計(jì)學(xué)原理,根

據(jù)決策表中其余對(duì)象取值的分布情況來(lái)對(duì)?個(gè)空值進(jìn)行填充,數(shù)據(jù)挖掘中常用的補(bǔ)齊方法

有以下幾種。

a.人工填寫(xiě):由于最了解數(shù)據(jù)的是用戶自己,因此這個(gè)方法產(chǎn)生的數(shù)據(jù)偏離最小,可

能是填充效果最好的一種。然而,一一般來(lái)說(shuō),此方法很費(fèi)時(shí);當(dāng)數(shù)據(jù)規(guī)模很大、空值很多

的時(shí)候,此方法是不可行的。

b.特殊值填充:將空值作為一種特殊的屬性值來(lái)處理,它不同于其他的任何屬性值,

如所有的空值都用“unknown”填充。如果該缺失值與預(yù)測(cè)值具有高度相關(guān)性,可能導(dǎo)致

嚴(yán)重的數(shù)據(jù)偏離,一般不推薦使用。

c.平均值填充:將信息表中的屬性分為數(shù)值屬性和非數(shù)值屬性來(lái)分別進(jìn)行處理如

果空值是數(shù)值型的,則使用該屬性在其他所有對(duì)象的取值的平均值來(lái)填充該缺失的屬性

值;如果空值是非數(shù)值型的,則根據(jù)統(tǒng)計(jì)學(xué)中的眾數(shù)原理,用該屬性在其他所有對(duì)象的

取值次數(shù)最多的值(即出現(xiàn)頻率最高的值)來(lái)補(bǔ)齊該缺失的屬性值。

d.熱卡填充(或就近補(bǔ)齊):對(duì)于一個(gè)包含空值的對(duì)象,熱卡填充法在完整數(shù)據(jù)

中找到一個(gè)與它最相似的對(duì)象,并用這個(gè)相似對(duì)象的信來(lái)進(jìn)行填充。

e.火近鄰法:先根據(jù)歐式距離或相關(guān)分析來(lái)確定距離具有缺失數(shù)據(jù)樣本最近的2個(gè)樣

本,再將這七個(gè)值加權(quán)平均來(lái)估計(jì)該樣本的缺失數(shù)據(jù)。

f.使用所有可能的值填充:這種方法用空缺屬性值的所有可能的屬性取值來(lái)填充,

能夠得到較好的補(bǔ)齊效果。

g.組合完整化方法:這種方法用空缺屬性值的所有可能的屬性取值來(lái)嘗試,并從最

終屬性的約簡(jiǎn)結(jié)果中選擇最好的一個(gè)作為填補(bǔ)的屬性值。

h.回歸:基于完整的數(shù)據(jù)集,建立回歸方程(模型)。對(duì)于包含空值的對(duì)象,將已知

屬性值代入方程可估計(jì)未知屬性值,以此估計(jì)值來(lái)進(jìn)行填充。

③平滑有噪聲數(shù)據(jù)

噪聲是?個(gè)測(cè)量變量中的隨機(jī)錯(cuò)誤或偏差,包含錯(cuò)誤值或偏離期望的孤立點(diǎn)值。數(shù)據(jù)

平滑技術(shù)包括以下幾種。

a.分箱:分箱方法通過(guò)考察數(shù)據(jù)的“近鄰”(即周?chē)闹?來(lái)平滑有序數(shù)據(jù)值。

b.回歸:也可以用一個(gè)函數(shù)擬合數(shù)據(jù)來(lái)平滑數(shù)據(jù)。

c.聚類(lèi):可以通過(guò)聚類(lèi)來(lái)檢測(cè)離群點(diǎn),將類(lèi)似的值組織成群或簇。

【項(xiàng)目2:]

一、單項(xiàng)選擇題

(1)關(guān)于urllib.parse模塊中的urlencode。函數(shù)的說(shuō)法,正確的是(C)。

A.它用來(lái)給傳輸數(shù)據(jù)送行加密

B.它接受字符串作為參數(shù),對(duì)參數(shù)中的中文進(jìn)行編碼

C.它接受字典作為參數(shù),對(duì)參數(shù)中的中文進(jìn)行編碼

D.如果傳入的參數(shù)不包括中文,則會(huì)報(bào)錯(cuò)

(2)關(guān)于urllib.parse模塊中的quote。函數(shù)的說(shuō)法,正確的是(B)。

A.它用來(lái)給傳輸數(shù)據(jù)達(dá)行加密

B.它接受字符串作為參數(shù),對(duì)參數(shù)中的中文進(jìn)行編碼

C.它接受字典作為參數(shù),對(duì)參數(shù)中的中文進(jìn)行編碼

D.如果傳入的參數(shù)不包括中文,則會(huì)報(bào)錯(cuò)

(3)使用urHib中Request類(lèi)構(gòu)建請(qǐng)求,添加請(qǐng)求頭最常見(jiàn)的方法是通過(guò)修改(A)來(lái)

偽裝瀏覽器。

A.User-Agent

B.add_hcadcr

C.heads

D.add

(4)利用urllib.request模塊中最基本的(C)方法,可以完成對(duì)簡(jiǎn)單網(wǎng)頁(yè)的請(qǐng)求和抓取。

A.urlparse

B.urlencode

C.urlopen

D.urlunparse

(5)urllib庫(kù)中能用于構(gòu)建一個(gè)HTTP請(qǐng)求的函數(shù)是(A)

A.request()

B.get()

C.urlparse()

D.post()

(6)在Selenium中,如何模擬鼠標(biāo)操作?(A)

A.使用click。方法

B.使用sendKeys。方法

C.使用submit。方法

D.使用get()方法

⑺在Selenium中,如何模擬鍵盤(pán)操作?(B)

A.使用click。方法

B.使用sendKeys。方法

C.使用submit。方法

D.使用get。方法

(8)在Selenium中,如何處理彈出窗口?(C)

A.使用switch」o.alerl()方法

B.使用switch_to.frame()方法

C.使用switch_to_window()方法

(9)下列選項(xiàng)中,不屬于請(qǐng)求報(bào)頭的是(D)。

A、User-Agent

Cookie

C、Referer

D、Content-Type

(10)下列狀態(tài)碼中,表示客戶端的請(qǐng)求有錯(cuò)誤的是(C)。

A、200

B、304

C、403

D、500

(11)下列請(qǐng)求報(bào)頭中,可以記載用戶信息實(shí)現(xiàn)模擬登錄的是(B)。

A、User-Agent

B、Cookie

C、Connection

D、Host

二、填空題

(1)在下面的表格中,列出了一些路徑表達(dá)式,請(qǐng)寫(xiě)出表達(dá)式的含義

路徑表達(dá)式結(jié)果|

/bookstore/book[l]選取屬于bookstore子元素的第一個(gè)book元

素。

/bookstore/book[last()]選取屬于bookstore子元素的最后一個(gè)book

元素。

/bookstore/book|last()-1]選取屬于bookstore子元素的倒數(shù)第二個(gè)book

兀素O

/bookstorc/book[position()<3選取最前面的兩個(gè)屬于bookstore元素的子元

1素的book元素。

//title[@lang]選取所有擁有名為lang的屬性的title元素。

//title[@lang='eng']選取所有title元素,且這些元素?fù)碛兄禐閑ng

的lang屬性。

/bookstore/book[price>35.00選取bookstore元素的所有book元素,且其中

]的price元素的值須大于35.00。

/bookstore/book[price>35.00選取bookstore元素中的book元素的所有

]/titletitle元素,且其中的price元素的值須大于35.00。

//book/title|//book/price選取book元素的所有title和price元素c

//title|//price選取文檔中的所有title和price元素。

/bookstore/book/title|//price選取屬于bookstore元素的book元素的所有

title元素,以及文檔中所有的price元素。

(2)HTML部分結(jié)構(gòu)如下:

<Iibrary>

<books>

<bookid="book1">數(shù)據(jù)采集與預(yù)處理</book>

<bookid="book2">大數(shù)據(jù)運(yùn)維技術(shù)v/book>

<bookid="book3">數(shù)據(jù)分析v/book>

</books>

<records>

<items>

<date>2022-05-02</date>

<personname="張三豐"class=="boxl"/>

</items>

<items>

<date>2022-05-01</date>

<pcrsonnamc="張無(wú)忌"class="box2"/>

</items>

</records>

</library>

通過(guò)Xpath實(shí)現(xiàn)如下元素定位:

(1)查詢所有的book節(jié)點(diǎn):/library/books/book。

(2)查詢第二個(gè)book節(jié)點(diǎn):/library/books/book|2]0

(3)查詢person的同性:/library/records/items/Derson/attributeO。

(4)查詢所有book節(jié)點(diǎn)值中帶有“運(yùn)維”字符串的book節(jié)點(diǎn):

/library/books/book[contains(textQ,'實(shí)例')]

(5)查詢所有date節(jié)點(diǎn)值中帶有“05”字符串的items節(jié)點(diǎn):

/library/rccords/itcms/datc[contains(tcxt0、'05')]/parcm::itcms。

(6)查詢所有屬性節(jié)點(diǎn)值帶有“box”字符串的person節(jié)點(diǎn):

/librarY/records/items/person[contains(@name,'box')orcontains(@class,'box')l。

(7)查詢所有的book節(jié)點(diǎn)的文本值:/Iibrary/books/book/lexl。

三、操作題

答案建源代碼附件

【項(xiàng)目3:日志數(shù)據(jù)采集實(shí)踐】

1、FlumefitlSource,Sink,Channel的作用?

(1)Source組件是專(zhuān)門(mén)用來(lái)收集數(shù)據(jù)的,可以處理各種類(lèi)型、各種格式的日志數(shù)據(jù),

包括avro、thrift、exec、jms、spoolingdirectorynetcal、sequencegeneratorsyslog^http^

legacyo

(2)Channel組件對(duì)采集到的數(shù)據(jù)進(jìn)行緩存,可以存放在Memory或File中。

(3)Sink組件是用于把數(shù)據(jù)發(fā)送到目的地的組件,目的地包括Hdfs、Logger,avro.

thrift、ipc>file、Hbase、solr、自定義。

2、如何通過(guò)Flume參數(shù)設(shè)置進(jìn)行調(diào)優(yōu)?

(1)Source參數(shù)設(shè)置

增力IISource個(gè)數(shù)(使月TairDirSource時(shí)可增力IIFileGroups個(gè)數(shù))可以增大Source的

讀取數(shù)據(jù)的能力。例如:當(dāng)某一個(gè)目錄產(chǎn)生的文件過(guò)多時(shí)需要將這個(gè)文件目錄拆分成多個(gè)

文件目錄,同時(shí)配置好多個(gè)Source以保證Source有足夠的能力獲取到新產(chǎn)生的數(shù)據(jù)。

batchSize參數(shù)決定Source一次批量運(yùn)輸?shù)紺hannel的event條數(shù),適當(dāng)調(diào)大這個(gè)參數(shù)可.以

提高Source搬運(yùn)Event至ljChannel時(shí)的性能。

(2)Channel參數(shù)設(shè)置

type選擇memory時(shí)Channel的性能最好,但是如果Flume進(jìn)程意外掛掉可能會(huì)丟失

數(shù)據(jù)。type選擇file時(shí)Channel的容錯(cuò)性更好,但是性能上會(huì)比memorychannel差。使用

fileChannel時(shí)dataDirs配置多個(gè)不同盤(pán)下的目錄可以提高性能。

Capacity參數(shù)設(shè)置,Capacity參數(shù)決定Channel可容納最大的event條數(shù)。

transactioncapacity參數(shù)設(shè)置,transactioncapacity參數(shù)決定每次Source往channel里面

寫(xiě)的最大event條數(shù)和每次Sink從channel里面讀的最大event條數(shù)。transactioncapacity

需要大于Source和Sink的batchSize參數(shù)。

(3)Sink參數(shù)設(shè)置

增加Sink的個(gè)數(shù)可以增加Sink消費(fèi)event的能力。Sink也不是越多越好,過(guò)多的Sink

會(huì)占用系統(tǒng)資源,造成系統(tǒng)資源不必要的浪費(fèi)。batchSize參數(shù)決定Sink一次批量從Channel

讀取的event條數(shù),適當(dāng)調(diào)大這個(gè)參數(shù)可以提高Sink從Channel消費(fèi)event的性能。

3、請(qǐng)簡(jiǎn)單介紹一下Flume中的事務(wù)機(jī)制

Flume的事務(wù)機(jī)制(類(lèi)似數(shù)據(jù)庫(kù)的事務(wù)機(jī)制):Flume使用兩個(gè)獨(dú)立的事務(wù)分別負(fù)責(zé)

從Soucrce至ljChannel,以及從Channel至I]Sink的事件傳遞。比如spoolingdirectorysource為

文件的每一行創(chuàng)建一個(gè)事件,一旦事務(wù)中所有的事件全部傳遞到Channel且提交成功,那

么Soucrce就將該文件標(biāo)記為完成。同理,事務(wù)以類(lèi)似的方式處理從Channel到Sink的傳

遞過(guò)程,如果因?yàn)槟撤N原因使得事件無(wú)法記錄,那么事務(wù)將會(huì)回滾。且所有的事件都會(huì)保

持到Channel中,等待重新傳遞。

4、若Flume采集日志過(guò)程中突然停止,己經(jīng)采集但尚未寫(xiě)入的數(shù)據(jù)會(huì)不會(huì)丟失?請(qǐng)說(shuō)

明原因?

數(shù)據(jù)丟失與否的關(guān)鍵在于Channel是否開(kāi)啟了持久化。Flame的Channel充當(dāng)了數(shù)據(jù)緩

沖區(qū),負(fù)責(zé)在Source(數(shù)據(jù)源)和Sink(數(shù)據(jù)目的地)之間暫存數(shù)據(jù)。

Flume本身采用了事務(wù)機(jī)制來(lái)保證數(shù)據(jù)傳輸?shù)目煽啃裕碨ource到Channel和Channel

到Sink都是事務(wù)性的,只有當(dāng)下一個(gè)環(huán)節(jié)確認(rèn)成功接收,上一個(gè)環(huán)節(jié)才會(huì)將數(shù)據(jù)移除。因

此,理論上只要數(shù)據(jù)被成功寫(xiě)入Channel,就不會(huì)輕易丟失。但不同類(lèi)型的Channel在持久

化能力上存在根本差異,具體如下:

存儲(chǔ)數(shù)據(jù)持久

Channel類(lèi)型宕機(jī)后數(shù)據(jù)是否會(huì)丟失?適用場(chǎng)景

位置性

對(duì)吞L量要求極高,

會(huì)丟失“存儲(chǔ)在內(nèi)存隊(duì)列中的未處理數(shù)據(jù)會(huì)隨著

MemoryChannel內(nèi)存非持久化且能容忍少量數(shù)據(jù)

JVM進(jìn)程-■起消失,無(wú)法恢第。

丟失的業(yè)務(wù)。

不會(huì)丟失。它基于WAL(預(yù)寫(xiě)式日志)技術(shù),所對(duì)數(shù)據(jù)可靠性要求

本地

FileChannel持久化有操作先寫(xiě)磁盤(pán),右機(jī)重啟后可恢發(fā)崩潰前已提交的高,不允許日志丟失

磁盤(pán)

所有事務(wù)。的生產(chǎn)環(huán)境。

不會(huì)丟失。注意,這是兩種特殊的Source,并非

Spooling監(jiān)控本地日志文件,

Source自Channel,它們通過(guò)記錄已讀取文件的位置來(lái)保證可

DirectorySourceN/A這是比ExecSource

帶可靠性鴕性,即使Agent重啟,也能從斷點(diǎn)處繼續(xù)讀取,避

/TaildirSource更可靠的Source選擇

免數(shù)據(jù)丟失。

Flume通過(guò)事務(wù)來(lái)串聯(lián)數(shù)據(jù)傳輸?shù)母鱾€(gè)環(huán)節(jié),確保了“At-leasl-once”(至少一次)的投

遞語(yǔ)義。這意味著在正常情況下,數(shù)據(jù)不會(huì)在傳輸過(guò)程中“意外”丟失。唯一可能導(dǎo)致丟

失的場(chǎng)景,就是作為臨時(shí)緩沖區(qū)的Channel本身不具備持久化能力。

MemoryChannel的工作原理:它將數(shù)據(jù)存儲(chǔ)在內(nèi)存隊(duì)列中,速度極快。一旦Agent進(jìn)

程因故障、斷電等原因停止,這部分存在內(nèi)存中且尚未被Sink消費(fèi)的數(shù)據(jù)會(huì)立刻消失,無(wú)

法找回。

FileChannel的保障機(jī)制:它會(huì)先將數(shù)據(jù)寫(xiě)入磁盤(pán)中的日志文件,并定期執(zhí)行Checkpoint

(檢查點(diǎn))操作。即使Flume突然崩潰,重啟后系統(tǒng)會(huì)通過(guò)重新執(zhí)行WAL來(lái)恢復(fù)Channel

到崩潰前的狀態(tài),確保已提交的數(shù)據(jù)不丟失。

5、簡(jiǎn)述AvroSource、ExecSource>SpoolingDirectorySource的主要區(qū)別?

這三個(gè)Source是Flume中非常經(jīng)典的日志采集方式,它們的核心區(qū)別在于數(shù)據(jù)來(lái)源、

可靠性保證以及適用場(chǎng)景。下面是它們的主要區(qū)別總結(jié):

-數(shù)據(jù)來(lái)源不同:AvroSource通過(guò)網(wǎng)絡(luò)接收數(shù)據(jù);ExecSource通過(guò)執(zhí)行命令(如“l(fā)ail

-F”)獲取輸出;SpoolingDirectorySource則通過(guò)讀取本地指定目錄下的靜態(tài)文件來(lái)采集。

■可.靠性不同:ExecSource在進(jìn)程崩潰或命令重啟時(shí),可能丟失數(shù)據(jù)或產(chǎn)生重復(fù),可

靠性最低。而AvroSource和SpoolingDirectorySource都通過(guò)事務(wù)機(jī)制保證"至少一次”

的語(yǔ)義,可靠性更高。SpoohngSource還支持記錄文件讀取位置,避免重復(fù)。

-實(shí)時(shí)性不同:AvroSource和ExecSource支持接近實(shí)時(shí)的流式傳輸;Spooling

DirectorySource則更接近于“準(zhǔn)實(shí)時(shí)”的批量讀取,因?yàn)樗跈z測(cè)并讀取目錄中的文件。

-典型應(yīng)用場(chǎng)景:

-AvroSource:常用于多層FlumeAgent架構(gòu)中,作為接收上一層Agent轉(zhuǎn)發(fā)的數(shù)據(jù)

的節(jié)點(diǎn),實(shí)現(xiàn)跨網(wǎng)絡(luò)、跨節(jié)點(diǎn)的數(shù)據(jù)傳輸。

-ExecSource:適合測(cè)試環(huán)境,或采集少量、臨時(shí)的命令輸出,但因可靠性不足,

不建議在生產(chǎn)環(huán)境中使用。

-SpoolingDirectorySource:常用于采集已落盤(pán)的日志文件(如由日志服務(wù)輪轉(zhuǎn)后的

文件),適合不要求毫秒級(jí)實(shí)時(shí)性的場(chǎng)景。

下面詳細(xì)展開(kāi)這三個(gè)Source的機(jī)制和注意事項(xiàng):

I.AvroSource

-工作方式:它是一個(gè)基于ApacheAvroRPC(遠(yuǎn)程過(guò)程調(diào)用)協(xié)議的服務(wù)器,會(huì)監(jiān)

聽(tīng)一個(gè)端口,等待上游的FlumeAgent通過(guò)AvroSink發(fā)送數(shù)據(jù)。

-可靠性:高。它采用事務(wù)機(jī)制,只有當(dāng)數(shù)據(jù)成功寫(xiě)入Channel后,才會(huì)向發(fā)送端

確認(rèn),保證“至少一次”的語(yǔ)義。

-主要用途:作為Flume多層架構(gòu)中的“接收端”,用于匯總多個(gè)Agent的數(shù)據(jù),

或?qū)?shù)據(jù)跨網(wǎng)絡(luò)傳輸(比如從應(yīng)用服務(wù)器發(fā)送到中央口志收集器)。

特點(diǎn):天生是跨節(jié)點(diǎn)的流式傳輸,與Avr。Sink配對(duì)使用,是構(gòu)建分布式日志收集

鏈路的基石。

2.ExecSource

-工作方式:在啟動(dòng)時(shí)運(yùn)行一個(gè)用戶指定的Unix命令(例如“tail?F

/var/log/nginx/access.logM),并讀取該命令的標(biāo)準(zhǔn)輸出(Stdout)作為數(shù)據(jù)源。

-可靠性:低。這是其最大缺點(diǎn)。如果Agent崩潰或命令進(jìn)程中斷,重啟后命令會(huì)

從頭或從某個(gè)不確定的位置開(kāi)始執(zhí)行,這期間產(chǎn)生的數(shù)據(jù)無(wú)法被正確采集,容易導(dǎo)致數(shù)據(jù)

丟失或重復(fù)。同時(shí),它不支持事務(wù)。

-主要用途:官方文檔明確提示ExecSource不具備可靠性,僅建議用于測(cè)試、演示

或?qū)?shù)據(jù)丟失不敏感的場(chǎng)景。許多線上事故就是因使用“tail-F”的ExecSource引起的數(shù)

據(jù)丟失。

3.SpoolingDirectorySource

-工作方式:監(jiān)聽(tīng)一個(gè)本地磁盤(pán)上的目錄,讀取目錄中寫(xiě)入后不再被修改的“靜態(tài)”

文件(例如由日志輪轉(zhuǎn)生成的“.log”文件或“.tmp”文件)。

-可靠性:高。它會(huì)記錄每個(gè)文件已讀到的位置(基于偏移量),并采用事務(wù)機(jī)制,

支持“至少一次”的語(yǔ)義。即使在讀取過(guò)程中Agent重啟,也能從斷點(diǎn)繼續(xù),不會(huì)丟數(shù)據(jù)。

-主要用途:用于采集已經(jīng)落盤(pán)的日志文件,適合日志量不大、對(duì)實(shí)時(shí)性要求不高

的場(chǎng)景,或者應(yīng)用無(wú)法修改以直接輸出到網(wǎng)絡(luò)/控制臺(tái)時(shí)。

生產(chǎn)實(shí)踐建議

-絕對(duì)要避免在生產(chǎn)環(huán)境的核心鏈路中使用ExecSource,特別是用來(lái)“tail”實(shí)時(shí)

日志。

對(duì)于實(shí)時(shí)采集不斷寫(xiě)入的本地文件,推薦使用更可靠的TaildirSource(Flume1.7+

引入)。它結(jié)合了SpoolingDirectory的高可靠性和Exec的實(shí)時(shí)跟隨能力,支持?jǐn)帱c(diǎn)續(xù)傳

和通配符監(jiān)控多個(gè)文件。

-對(duì)于跨節(jié)點(diǎn)傳輸,AvroSource+AvroSink是標(biāo)準(zhǔn)、可靠的方案。

-對(duì)于離線批量采集已經(jīng)完稿的靜態(tài)日志文件,SpoolingDirectorySource非常適

合。

【項(xiàng)目4:使用Sqoop進(jìn)行數(shù)據(jù)遷移】

1.問(wèn)答題

請(qǐng)簡(jiǎn)述如下參數(shù)的含義?

參數(shù)含義

—table導(dǎo)出的源表表名

—columns從表中導(dǎo)出指定的列數(shù)據(jù)

-where指定導(dǎo)出時(shí)所使用的查詢條件

-target-dir上傳到hdfs的目錄

-dclctc-targct-dir如果指定目錄存在,則先刪除掉

—fields-terminated-by數(shù)據(jù)導(dǎo)入hdfs中需要的分隔符

-num-mappers指明sqoop任務(wù)的mapper個(gè)數(shù)

—split-by設(shè)置按照哪個(gè)列去分割數(shù)據(jù),如果mappers個(gè)數(shù)為1就

沒(méi)必要傳split-by參數(shù)

-compress表明輸出的文件需要壓縮

-compression-codec聲明壓縮格式

-null-string是string類(lèi)型的字段,當(dāng)Value是NULL,替換成指定

的字符

—null-non-string是非string類(lèi)型的字段,當(dāng)Value是NULL,替換成指

定字符

2.操作題

(1)準(zhǔn)備數(shù)據(jù)

在tesi數(shù)據(jù)庫(kù)中創(chuàng)建如下數(shù)據(jù)表

CREATETABLE'st_info'(

'id'int(10)DEFAULTNULL,

'name'varchar(50)DEFAULTNULL,

'school'varchar(lO)DEFAULTNULL,

'agesint(10)DEFAULTNULL,

'high'varchar(lO)DEFAULTNULL

)ENGINE=InnoDBDEFAULTCHARSET=latinl;

并在數(shù)據(jù)中插入如下數(shù)據(jù)。

INSERTINTO'stjnfo'VALUES('2023040l\'HarryPotter?Hogwarts'J8'」68');

INSERTINTO'st_info'VALUES('20230402';HermioneGranger','Hogwarts';17:160');

INSERTINTO'stjnfo'VALUES('20230403,:AlbusDumbledore'/Hogwarts';1507178t);

INSERTINTO'stjnfo'VALUES('20230404,;SeverusSnape':Hogwarts':50,;175');

INSERTINTO'st_infoxVALUES('20230405','RubcusHagrid','Hogwarts','50','260');

(2)請(qǐng)使用sqccp把數(shù)據(jù)全量導(dǎo)入到HDFS的人SQL2HDESI目錄下,要求使用一個(gè)map

sqoopimport\

—connectjdbc:mysql://inaster:3306/test?useSSL=false\

—usernameroot\

—password123456\

-delete-target-dir\

-target-dir/SQL2HDFS1\

—tablest_infd\

-fields-terminated-byV\

-num-mappers1

(3)請(qǐng)使用sqoop把部分?jǐn)?shù)據(jù)導(dǎo)入到HDFS的/SQL2HDFS2目錄下,要求使用where指

定age=50的條件杳詢,要求使用一個(gè)m叩。

sqoopimport\

—connectjdbc:mysql://master:3306/test?useSSL=false\

-usernameroot\

—password123456\

-where"age=50"\

—dclcte-targct-dir\

-targel-dir/SQL2HDFS2\

-tablest_info\

—fields-terminated-by'\t'\

-num-mappers1

(4)請(qǐng)使用sqoop把部分?jǐn)?shù)據(jù)導(dǎo)入到HDFS的/SQL2HDFS3目錄下,要求使用querysql

語(yǔ)句杳詢,導(dǎo)入的字段為,age,杳詢條件為age>17,要求使用兩個(gè)map,以id字段進(jìn)

行劃分。

sqoopimport\

-connectjdbc:mysql://master:3306/tesl?useSSL=false\

-usernameroot\

—password123456\

-delete-target-dir\

-target-dir/SQL2HDFS3\

--query'selectid,name,agefromst_infoWHEREage>17and$CONDITIONS'\

—split-byid\

-fields-terminated-by%'\

-num-mappers2

(5)請(qǐng)使用sqoop把數(shù)據(jù)全量導(dǎo)入到Hive的demo數(shù)據(jù)庫(kù)下,要求使用一個(gè)map

sqoopimport\

-connectjdbc:mysql://master:3306/test?useSSL=false\

—usernameroot\

-password123456\

—tablest_info\

-hive-import\

-num-mappers1\

-hive-databasedemo

【項(xiàng)目5:數(shù)據(jù)預(yù)處理實(shí)踐】

1、填空題

(1)Kettle中有兩種腳本文件:Transformalion和Job0其中,Transformaliou用于完

成針對(duì)數(shù)據(jù)的基礎(chǔ)轉(zhuǎn)換,而她用于完成整個(gè)工作流的控制。

(2)Kettle主要有4人組件組成,分別為:Spoon、Pan、Kitchen和Carte組件。

(3)隨機(jī)采樣是一種常用的數(shù)據(jù)采樣方法,它通過(guò)隨機(jī)選擇數(shù)據(jù)集中的樣本又構(gòu)建樣

本數(shù)據(jù)。在Python中,可以使用random模塊提供的sample函數(shù)來(lái)實(shí)現(xiàn)隨機(jī)采樣。

(4)在Pandas中,有兩種常用的數(shù)據(jù)合并方式:concat與merge。

(5)數(shù)據(jù)重塑是指轉(zhuǎn)換數(shù)據(jù)組織成行和列的方式。Pandas為用戶提供了多種數(shù)據(jù)重

塑的方法,常用的有Divot函數(shù)和melt函數(shù)。

(6)melt函數(shù)如下所示。

pandas.melt(frame,id_vars=None,value_vars=None,var_name=None,value_name='value',

col_level=None)

其中參數(shù)frame用于指定要轉(zhuǎn)換的DataFrame,參數(shù)id_vars用于指定要保留的列,不進(jìn)行

轉(zhuǎn)換的列,參數(shù)vakie_vars用于指定要轉(zhuǎn)換的列,參數(shù)vajname用于指定生成的新列的名

(7)數(shù)據(jù)離散化的目的是為了簡(jiǎn)化數(shù)據(jù)結(jié)構(gòu)。連續(xù)屬性的離散化就是將連續(xù)屬性的值

域劃分為若干個(gè)離散的區(qū)間,最后用不同的符號(hào)或整數(shù)值代表落在每個(gè)子區(qū)間中的屬

性值,離散化方法經(jīng)常作為數(shù)據(jù)挖掘的工具。常用的函數(shù)使用有cut函數(shù)、qcut函數(shù)

實(shí)現(xiàn)數(shù)據(jù)的區(qū)間分組轉(zhuǎn)換。

(8)啞變量轉(zhuǎn)換是一種將多分類(lèi)變量轉(zhuǎn)換為二分變量的一種方法。Pandas中的

gejdummies函數(shù)可以實(shí)現(xiàn)數(shù)據(jù)的啞變量矩陣轉(zhuǎn)換。

(9)特征工程是利用數(shù)據(jù)領(lǐng)域的相關(guān)知識(shí)來(lái)創(chuàng)建能夠使機(jī)器學(xué)習(xí)算法達(dá)到最佳性能的

特征的過(guò)程。特征處理主要有三個(gè)方法:特征構(gòu)建、特征抽取、特征選擇。

(10)jieba是百度工程師SunJunyi開(kāi)發(fā)的一個(gè)開(kāi)源庫(kù),jieba最流行的應(yīng)用是分詞、關(guān)

鍵詞抽取、詞頻統(tǒng)計(jì)等,是優(yōu)秀的中文分詞第三方庫(kù)。jieba支持四種分詞模式:精確模式、

搜索引擎模式、全模式、paddle模式。

(11)jieba中的常用函數(shù)jieba.load_userdict(dict_path)的功能是添力口詞典,dictpath為

文件類(lèi)對(duì)象或自定義詞典的路徑;jiciba.add_\vord(word)的功能是向分詞詞典中增加新詞

word;jieba.analyse.extract_tags(sentence,topK=20,withWeight二False,aHowPOS=())的功能是

使用TF-IDF算法從句子中提取關(guān)鍵詞;iieba.analyse.s?t_stop_words(file_name)的功能是關(guān)

鍵詞提取所使用停止詞(StopWords)文本語(yǔ)料庫(kù)可以切換成自定義語(yǔ)料庫(kù)的路徑,

filename為自定義語(yǔ)料庫(kù)的路徑。

(12)基于統(tǒng)計(jì)的分詞方法所應(yīng)用的主要統(tǒng)計(jì)模型有:隱馬爾可夫模型(HidcnMarkov

Model,HMM)、最大熠模型(ME)、條件隨機(jī)場(chǎng)模型(ConditionalRandomFields,CRF)

等。

(13)在NLTK中的pos」aN函數(shù)用于進(jìn)行詞性的標(biāo)注。jieba默認(rèn)詞性標(biāo)注集

(Python37\Lib\site-packages\jieba\dict.txt),可以使用makusureuserdicl」oaded函數(shù)將自定

義的詞匯加入標(biāo)注集中。

(14)關(guān)鍵詞是能夠表達(dá)文檔中心內(nèi)容的詞語(yǔ),從算法的角度來(lái)看,關(guān)鍵詞提取算法主

要有兩類(lèi):無(wú)監(jiān)督關(guān)鍵詞提取方法和有監(jiān)督關(guān)鍵詞提取方法。

(15)詞形規(guī)范化過(guò)程主要包括兩種:詞干提取和詞形還原,對(duì)于詞干提取來(lái)說(shuō),

nltk.stcm模塊中提供了多種詞干提取器,目前最受歡迎的就是波特詞干提取器和蘭卡斯特

詞干提取器。nltk.stem模塊中,WordNet提供了非常好用的詞形還原的函數(shù)。

2、操作題

任務(wù)一:使用kett加進(jìn)行數(shù)據(jù)清洗。

(1)創(chuàng)建一個(gè)新的轉(zhuǎn)換“旅游信息數(shù)據(jù)預(yù)處理”。將創(chuàng)建過(guò)程截圖。

ES另存為x

,▼個(gè)一"Win_>pdi-ce...vCSpdi-ce--342中搜...P

文件名(N):v|

保存類(lèi)型(T):Kettletransformations

“瀏覽文件夾(B)冉肖

(2)創(chuàng)建DB連接,創(chuàng)建一個(gè)planedemo數(shù)據(jù)庫(kù)連接〔使用mysql中的planedemo數(shù)據(jù)庫(kù)

的trip表),將連接創(chuàng)建的設(shè)置截圖。

Ml

pUncdrmofilWArt

連接他

王秋名行

NtftrveMocdrhn

Neoview

Netrzza

OpenERPSefvef

Of?le

OfMleRDB

PdioMOLAPSewf

PenSoDeUServke$

P5tgrKQ(

Kecnhin

RemecJyActionRequestSystem

■IXeQwHStreamingCunor

履唐

(3)創(chuàng)建一個(gè)表輸入,將其設(shè)置截圖。

里表蝙入§數(shù)寤庫(kù)瀏覽器

步器名際表輸入O%動(dòng)作?

數(shù)據(jù)庫(kù)連接planedemoK據(jù)庫(kù)連婁蟀g...新建…Wizard-Sauthuseruserpermissions

Bdjangoadminjog

SQI荻取SQL查詢語(yǔ)句-

3djangocontenttype

SZLECT?0節(jié)

FR詠tripBdjangomigrations

Sdjangosession

■?

fflinfo

行1殉)寸trip

允許簿易徒換□tripl

替授SQL語(yǔ)句里的變..」

Htriptest

從步要插入轆■beijingbusinfo

Ssysconfig

數(shù)制10001Bpeople

?Help確定(O)ffi£(P)取消(C)確定取消

(4)拆分酒店字段,將酒店字段按照空格作為分隔符進(jìn)行字段拆分為“酒店”、“類(lèi)型”

和評(píng)分字段,并將創(chuàng)建設(shè)置截圖。

25拆分字段-OX

步驟名稱(chēng)拆分酒店字段

需要拆分的字段酒店

分偈符。

字段

?新的字段ID^?ID?類(lèi)型mft格式分組符號(hào)小數(shù)點(diǎn)出斐不符號(hào)Nullif缺省去除空格類(lèi)型

1酒店NString不去抽空格

2類(lèi)型NString不去掉空格

3部分NString不去短空格

I?Help確逵(O)取消(C)

(5)使用正則表達(dá)將類(lèi)型字段中的“3.9分/5分”樣式的內(nèi)容替換為“舒適型”,并將創(chuàng)建

設(shè)置圖片截圖。

字符串日慢-□X

MM1WM________________________________________________________

字段

?修入澹字段檢出范例使用正史表達(dá)式授案便用…替修設(shè)置為仝串?使用領(lǐng)HBH修整個(gè)單詞匹配大小司?圈KUnicode

||1JISA\dWAd?t?9fiBBS

?Help?fe(O)Cl取才段(G)取冰。

L--------——1...........'t■..................J'j

(6)將數(shù)據(jù)中的“評(píng)分”字段中的“null”俏替換為“4.0”,并將設(shè)置講行截圖。

"替換NULL值一0X

作業(yè)名稱(chēng)替換NULUfi

替換所有字段的null值

佰音濱為。

設(shè)置空卻出二)

曬(日題1一▼

選擇字段,

選!到自類(lèi)型口

值姥1

T類(lèi)型值替換為轉(zhuǎn)換掩碼(日期)設(shè)置空字符串

字段

#字段值音換為轉(zhuǎn)換掩碼(日期)設(shè)置空字符串

1評(píng)分4.0否

?Help頻(O)要取字段取消(C)

(7)將“評(píng)分”字段的數(shù)據(jù)由“4.7分/5分”樣式經(jīng)過(guò)剪切字符串截取為“4.7”樣式,并

將設(shè)置截圖。

y剪切:字符串-□X

步驟名稱(chēng)E■現(xiàn)切字符串

要剪切的二字段

#輸入力元字段輸出流字段起始位置結(jié)束位置

1評(píng)分處理后的評(píng)分03

?Help確定(0)獲取字段(G)取消(C)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論