怎么將日志文件和二進(jìn)制文件快速導(dǎo)入HDFS

這篇文章主要講解了“怎么將日志文件和二進(jìn)制文件快速導(dǎo)入HDFS”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么將日志文件和二進(jìn)制文件快速導(dǎo)入HDFS”吧!

這篇文章主要講解了“怎么將日志文件和二進(jìn)制文件快速導(dǎo)入HDFS”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么將日志文件和二進(jìn)制文件快速導(dǎo)入HDFS”吧!

十年的羅城網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整羅城建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“羅城網(wǎng)站設(shè)計(jì)”,“羅城網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

首選數(shù)據(jù)移動(dòng)方法

如果在舊版Hadoop環(huán)境中運(yùn)行,我們可能需要一些工具來移動(dòng)數(shù)據(jù),這些工具都會(huì)在本章介紹。如果使用Kafka作為數(shù)據(jù)傳輸機(jī)制,則允許將生產(chǎn)者與消費(fèi)者分離,同時(shí)使多個(gè)消費(fèi)者能夠以不同的方式對(duì)數(shù)據(jù)進(jìn)行操作。在這種情況下,我們可以使用Kafka在Hadoop上存儲(chǔ)數(shù)據(jù),并為實(shí)時(shí)數(shù)據(jù)流系統(tǒng)(如Storm或Spark Streaming)提供數(shù)據(jù),然后使用它執(zhí)行近實(shí)時(shí)計(jì)算。比如,Lambda架構(gòu)允許以小增量實(shí)時(shí)計(jì)算聚合數(shù)據(jù),并使用批處理層執(zhí)行糾錯(cuò)和添加新數(shù)據(jù)點(diǎn)等,從而發(fā)揮實(shí)時(shí)和批處理系統(tǒng)的優(yōu)勢(shì) 。

實(shí)踐:使用Flume將系統(tǒng)日志消息推送到HDFS

面對(duì)跨多個(gè)的多個(gè)應(yīng)用程序和系統(tǒng)生成的一堆日志文件,我們可能手忙腳亂。毫無(wú)疑問,從這些日志中可以挖掘出有價(jià)值的信息,但第一大挑戰(zhàn)是將這些日志移動(dòng)到Hadoop集群以便可以執(zhí)行某些分析。

版本注意事項(xiàng)

此處的Flume使用版本1.4。與所有軟件一樣,不保證此處介紹的技術(shù),代碼和配置可以使用不同版本的Flume開箱即用。此外,F(xiàn)lume 1.4需要一些更新才能使其與Hadoop 2一起使用。

問題

希望將所有生產(chǎn)服務(wù)器的系統(tǒng)日志文件推送到HDFS。

解決方案

使用Flume(一種數(shù)據(jù)收集系統(tǒng))將Linux日志文件推送到HDFS。

討論

Flume的核心是日志文件收集和分發(fā),收集系統(tǒng)日志并傳輸?shù)紿DFS。此技術(shù)的第一步涉及捕獲附加到/var/log/messages的所有數(shù)據(jù)并將其傳輸?shù)紿DFS。我們將運(yùn)行一個(gè)Flume agent(稍后詳細(xì)介紹),這將完成所有工作。

Flume agent需要配置文件指明該做什么,以下代碼為用例定義了一個(gè):

要讓示例起作用,需要確保正在使用可以訪問Hadoop集群的主機(jī),以及 HADOOP_HOME配置正確,還需要下載并安裝Flume并將FLUME_HOME設(shè)置為指向安裝目錄。

使用文件名tail-hdfspart1.conf將前面的文件復(fù)制到Flume conf目錄中。完成后,就可以啟動(dòng)Flume agent實(shí)例了:

這應(yīng)該會(huì)產(chǎn)生很多輸出,但最終應(yīng)該看到類似于以下的輸出,表明一切都好了:

此時(shí),應(yīng)該看到HDFS中出現(xiàn)的一些數(shù)據(jù):

.tmp后綴表示Flume打開文件并繼續(xù)寫入。一旦完成,這將重命名文件并刪除后綴:

可以捕獲此文件以檢查其內(nèi)容,內(nèi)容應(yīng)與tail/var/log/messages對(duì)齊。

到目前為止,我們已經(jīng)用Flume完成了第一次數(shù)據(jù)移動(dòng)!

解析Flume agent

讓我們回過頭來檢查一下做了什么。主要有兩個(gè)部分:定義Flume配置文件,以及運(yùn)行Flume agent。Flume配置文件包含有關(guān)源,通道和接收器的詳細(xì)信息,這些都是影響Flume數(shù)據(jù)流不同部分的概念。圖5.4顯示了Flume agent中的這些概念。

讓我們逐步介紹這些概念,包括用途以及工作原理。

Sources

Flume sources負(fù)責(zé)從外部客戶端或其他Flume接收器讀取數(shù)據(jù)。Flume中的數(shù)據(jù)單元被定義為一個(gè)事件,本質(zhì)上是一個(gè)有效載荷和可選元數(shù)據(jù)集。Flume源將這些事件發(fā)送到一個(gè)或多個(gè)Flume通道,這些通道處理存儲(chǔ)和緩沖。

圖5.4 agent上下文中的Flume組件說明

Flume有一組廣泛的內(nèi)置源,包括HTTP,JMS和RPC。讓我們來看看你設(shè)置的特定于源的配置屬性:

exec source允許執(zhí)行Unix命令,標(biāo)準(zhǔn)輸出中發(fā)出的每一行都被捕獲為事件(默認(rèn)情況下會(huì)忽略常見錯(cuò)誤)。在前面的示例中,tail -F命令用于在生成系統(tǒng)消息時(shí)捕獲它們。如果可以更好地控制文件(例如,如果可以在完成所有寫入后將它們移動(dòng)到目錄中),考慮使用Flume的假脫機(jī)目錄源(稱為spooldir),因?yàn)樗峁┝薳xec source無(wú)法獲得的可靠性語(yǔ)義。

僅使用tail進(jìn)行測(cè)試

不鼓勵(lì)使用tail進(jìn)行測(cè)試以外的任何操作。

此配置中突出顯示的另一個(gè)功能是攔截器,它允許向事件添加元數(shù)據(jù)?;叵胍幌拢琀DFS中的數(shù)據(jù)是根據(jù)時(shí)間戳組織的:第一部分是日期,第二部分是時(shí)間:

之所以能這樣做,是因?yàn)槭褂脮r(shí)間戳攔截器修改了每個(gè)事件,時(shí)間戳攔截器將源處理事件的時(shí)間(以毫秒為單位)插入到事件頭。然后,F(xiàn)lume HDFS接收器使用此時(shí)間戳來確定事件寫入位置。

為了總結(jié)Flume sources,讓我們介紹一下其提供的功能:

事務(wù)語(yǔ)義,允許以至少一次語(yǔ)義可靠地移動(dòng)數(shù)據(jù),并非所有數(shù)據(jù)源都支持此功能。

攔截器,提供修改或刪除事件的功能。對(duì)于使用主機(jī),時(shí)間和唯一標(biāo)識(shí)符來注釋事件非常有用,這對(duì)于重復(fù)數(shù)據(jù)刪除非常有用。

選擇器,允許以各種方式扇出或多路復(fù)用事件,可以通過將事件復(fù)制到多個(gè)通道來扇出事件,也可以根據(jù)事件頭將事件路由到不同通道。

通道

Flume通道在agent內(nèi)部提供數(shù)據(jù)存儲(chǔ)設(shè)施。源將事件添加到通道,并從通道中刪除事件。Flume內(nèi)部的通道提供高可用性,可以根據(jù)應(yīng)用所需的容量和吞吐量選擇。

Flume捆綁了三個(gè)通道:

內(nèi)存通道將事件存儲(chǔ)在內(nèi)存隊(duì)列中。這對(duì)于高吞吐數(shù)據(jù)流非常有用,但其沒有持久性保證,這意味著如果agent發(fā)生故障,用戶將丟失數(shù)據(jù)。

文件通道將事件持久保存到磁盤。該實(shí)現(xiàn)使用高效的日志并具有強(qiáng)大的持久性。

JDBC通道將事件存儲(chǔ)在數(shù)據(jù)庫(kù)中。這提供了最強(qiáng)的可用性和可恢復(fù)性,但是以性能為代價(jià)。

在前面的示例中,我們使用了內(nèi)存通道,并將其存儲(chǔ)事件數(shù)限制為100,000。一旦內(nèi)存通道達(dá)到最大事件數(shù),將開始拒絕來自源的其他請(qǐng)求以添加更多事件。根據(jù)源的類型,這意味著源將重試或刪除事件(exec源將丟棄事件):

Sinks

Flume接收器從一個(gè)或多個(gè)Flume通道中接收事件,并將這些事件轉(zhuǎn)發(fā)到另一個(gè)Flume源(在多hop流程中),或以特定于接收器的方式處理事件。Flume內(nèi)置了許多接收器,包括HDFS,HBase,Solr和Elasticsearch。

在前面的示例中,我們將流配置為使用HDFS接收器:

我們將接收器配置為根據(jù)時(shí)間戳寫入文件(請(qǐng)注意%y和其他時(shí)間戳別名)。我們可以這樣做,因?yàn)槭褂胑xec源中的時(shí)間戳攔截器標(biāo)記事件。實(shí)際上,可以使用任何header值來確定事件輸出位置(例如,可以添加主機(jī)攔截器,然后根據(jù)生成事件的主機(jī)來寫入文件)。

可以通過各種方式配置HDFS接收器,以確定文件的滾動(dòng)方式。當(dāng)接收器讀取第一個(gè)事件時(shí),它將打開一個(gè)新文件(如果尚未打開)并寫入該文件。默認(rèn)情況下,接收器將繼續(xù)保持文件打開并將事件寫入其中,大約需要30秒,之后文件將被關(guān)閉,可以使用表5.5中的屬性更改滾動(dòng)行為。

表5.5 Flume HDFS接收器的rollover屬性

默認(rèn)HDFS接收器設(shè)置不應(yīng)在生產(chǎn)中使用,因?yàn)樗鼈儠?huì)導(dǎo)致大量可能很小的文件。建議升級(jí)value或使用下游壓縮作業(yè)來合并這些小文件。

HDFS接收器允許指定在寫入文件時(shí)如何序列化事件。默認(rèn)情況下,它們以文本格式序列化,沒有攔截器添加任何header。 例如,如果要在Avro中寫入數(shù)據(jù)(也包括事件頭),則可以使用序列化程序配置來執(zhí)行此操作。這樣做時(shí),還可以指定Avro內(nèi)部用于壓縮數(shù)據(jù)的Hadoop壓縮編解碼器:

總結(jié)

Flume中的可靠性取決于使用的通道類型,數(shù)據(jù)源是否具有重新傳輸事件的能力,以及是否將事件多路復(fù)用到多個(gè)源以減輕不可恢復(fù)的節(jié)點(diǎn)故障。在該技術(shù)中,使用了存儲(chǔ)器通道和執(zhí)行器源,但是在面對(duì)故障時(shí)都不提供可靠性。添加可靠性的一種方法是用假脫機(jī)目錄源替換exec源,并用磁盤通道替換內(nèi)存通道。

我們可以使用單個(gè)源,通道和接收器運(yùn)行單個(gè)agent的單臺(tái)計(jì)算機(jī)上使用Flume,但Flume可以支持完全分布式設(shè)置,可以在多個(gè)主機(jī)上運(yùn)行agent,在源和最終目標(biāo)之間有多個(gè)agent hop。圖5.5顯示了Flume如何在分布式環(huán)境中運(yùn)行。

此技術(shù)的目標(biāo)是將數(shù)據(jù)移動(dòng)到HDFS中。但是,F(xiàn)lume可以支持各種數(shù)據(jù)接收器,包括HBase,文件roll,Elasticsearch和Solr。使用Flume寫入Elasticsearch或Solr可實(shí)現(xiàn)強(qiáng)大的近實(shí)時(shí)索引。

因此,F(xiàn)lume是一個(gè)非常強(qiáng)大的數(shù)據(jù)移動(dòng)工具,可以輕松支持將數(shù)據(jù)移動(dòng)到HDFS以及許多其他位置。它可以持續(xù)移動(dòng)數(shù)據(jù)并支持各種級(jí)別的彈性,以解決系統(tǒng)故障,這是一個(gè)只需簡(jiǎn)單配置就可運(yùn)行的系統(tǒng)。

圖5.5 使用負(fù)載平衡和 fan-in將log4j日志移動(dòng)到HDFS的Flume設(shè)置

Flume沒有真正優(yōu)化的是使用二進(jìn)制數(shù)據(jù)。它可以支持移動(dòng)二進(jìn)制數(shù)據(jù),但會(huì)將整個(gè)二進(jìn)制事件加載到內(nèi)存中,因此移動(dòng)大小為GB或更大的文件將無(wú)法正常工作。

實(shí)踐:一種將文件復(fù)制到HDFS的自動(dòng)機(jī)制

你可能已經(jīng)學(xué)會(huì)了如何使用像Flume這樣的日志收集工具自動(dòng)將數(shù)據(jù)移動(dòng)到HDFS中。但是,這些工具不支持使用半結(jié)構(gòu)化或二進(jìn)制數(shù)據(jù)輸出。在該實(shí)踐中,我們將了解如何自動(dòng)將這些文件移動(dòng)到HDFS中。

企業(yè)實(shí)際生產(chǎn)環(huán)境通常具有網(wǎng)絡(luò)孤島,Hadoop集群可以遠(yuǎn)離其他生產(chǎn)應(yīng)用程序進(jìn)行細(xì)分。在這種情況下,Hadoop集群可能無(wú)法從其他數(shù)據(jù)源提取數(shù)據(jù),因此無(wú)需將數(shù)據(jù)推送到Hadoop。

需要一種機(jī)制來自動(dòng)化將任何格式的文件復(fù)制到HDFS的過程,類似于Linux工具rsync。該機(jī)制應(yīng)該能夠壓縮用HDFS編寫的文件,并提供一種動(dòng)態(tài)確定HDFS目的地的方法以進(jìn)行數(shù)據(jù)分區(qū)。

現(xiàn)有的文件傳輸機(jī)制,如Flume,Scribe和Chukwa,都是為了支持日志文件。如果文件格式不同,例如semistructured或binary,該怎么辦?如果文件以Hadoop從屬節(jié)點(diǎn)無(wú)法直接訪問的方式被孤立,那么也無(wú)法使用Oozie來幫助進(jìn)行文件輸入。

問題

需要自動(dòng)執(zhí)行將遠(yuǎn)程服務(wù)器上的文件復(fù)制到HDFS的過程。

解決方案

開源HDFS File Slurper項(xiàng)目可以將任何格式的文件復(fù)制到HDFS或從中復(fù)制出來。該技術(shù)涵蓋了如何配置和使用它來將數(shù)據(jù)復(fù)制到HDFS中。

討論

可以使用HDFS File Slurper來幫助實(shí)現(xiàn)自動(dòng)化(https://github.com/alexholmes/hdfs-file-slurper)。HDFS File Slurper是一個(gè)簡(jiǎn)單的實(shí)用程序,支持將文件從本地目錄復(fù)制到HDFS,反之亦然。

圖5.6提供了Slurper的高級(jí)概述,以及如何使用它來復(fù)制文件的示例。Slurper讀取源目錄中存在的所有文件,并可選擇查詢腳本以確定目標(biāo)目錄中的文件位置。然后,它將文件寫入目標(biāo),之后有一個(gè)可選的驗(yàn)證步驟。在成功完成所有步驟后,Slurper將源文件移動(dòng)到對(duì)應(yīng)文件夾。

圖5.6 用于復(fù)制文件的HDFS File Slurper數(shù)據(jù)流

使用這種技術(shù),需要確保解決以下幾個(gè)挑戰(zhàn):

如何有效地將寫入分區(qū)到HDFS,以便不將所有內(nèi)容整合到一個(gè)目錄?

如何確定HDFS中的數(shù)據(jù)是否已準(zhǔn)備好進(jìn)行處理(以避免讀取中間復(fù)制的文件)?

如何自動(dòng)定期執(zhí)行實(shí)用程序?

第一步是從https://github.com/alexholmes/hdfs-file-slurper/releases下載最新的HDFS File Slurper tarball,并將其安裝在可以訪問Hadoop集群和本地Hadoop安裝的主機(jī)上:

組件

在運(yùn)行代碼之前,需要編輯/usr/local/hdfs-slurper/conf/slurper-env.sh并設(shè)置hadoop腳本的位置。以下代碼是slurper-eng.sh文件的示例,如果遵循Hadoop安裝說明:

Slurper捆綁了/usr/local/hdfs-slurper/conf/slurper.conf文件,其中包含源和目標(biāo)目錄的詳細(xì)信息以及其他選項(xiàng)。該文件包含以下默認(rèn)設(shè)置,你可以更改:

讓我們仔細(xì)看看這些設(shè)置:

DATASOURCE_NAME—指定要傳輸?shù)臄?shù)據(jù)名稱。當(dāng)通過Linux init守護(hù)程序管理系統(tǒng)啟動(dòng)時(shí),該名稱用于日志文件名。

SRC_DIR—指定源目錄。移動(dòng)到此處的任何文件都會(huì)自動(dòng)復(fù)制到目標(biāo)目錄(使用中間hop到目標(biāo)目錄)。

WORK_DIR—這是工作目錄。在復(fù)制到目標(biāo)之前,源目錄中的文件將移動(dòng)到此處。

COMPLETE_DIR—指定完整目錄。復(fù)制完成后,文件將從工作目錄移動(dòng)到此目錄中。或者,可以使用--remove-after-copy選項(xiàng)刪除源文件,在這種情況下,不應(yīng)提供--complete-dir選項(xiàng)。

ERROR_DIR—這是錯(cuò)誤目錄。復(fù)制期間遇到的任何錯(cuò)誤都會(huì)導(dǎo)致源文件移動(dòng)到此目錄中。

DEST_DIR—設(shè)置源文件的最終目標(biāo)目錄。

DEST_STAGING_DIR—指定目標(biāo)目錄。首先將文件復(fù)制到此目錄中,一旦復(fù)制成功,Slurper就會(huì)將副本移動(dòng)到目標(biāo)位置,以避免目標(biāo)目錄包含部分寫入文件(如果發(fā)生故障)。

你會(huì)注意到所有目錄名稱都是HDFS URI。HDFS以這種方式區(qū)分不同的文件系統(tǒng)。file:/URI本地文件系統(tǒng)上的路徑,hdfs:/URI表示HDFS中的路徑。事實(shí)上,只要正確配置Hadoop,Slurper就支持任何Hadoop文件系統(tǒng)。

運(yùn)行

創(chuàng)建一個(gè)名為/tmp/slurper/in的本地目錄,在其中寫入一個(gè)空文件,然后運(yùn)行Slurper:

Slurper設(shè)計(jì)的一個(gè)關(guān)鍵特性是不能與部分寫入文件一起使用。文件必須以原子方式移動(dòng)到源目錄中(Linux和HDFS文件系統(tǒng)中的文件移動(dòng)都是原子的)。或者,可以寫入以句點(diǎn)(.)開頭的文件名,Slurper會(huì)忽略該文件名,文件寫入完成后,可以將文件重命名為不帶句點(diǎn)前綴的名稱。

請(qǐng)注意,復(fù)制具有相同文件名的多個(gè)文件將導(dǎo)致目標(biāo)被覆蓋,用戶有責(zé)任確保文件是唯一的,以防止這種情況發(fā)生。

動(dòng)態(tài)目標(biāo)路由

如果每天將少量文件移動(dòng)到HDFS中,則上一種方法很有效。但是,如果正在處理大量文件,你會(huì)想到將它們分成不同的目錄。這樣做的好處是可以對(duì)MapReduce作業(yè)的輸入數(shù)據(jù)進(jìn)行更細(xì)粒度的控制,并有助于在文件系統(tǒng)中整體組織數(shù)據(jù)(如果不希望計(jì)算機(jī)上的所有文件都在單個(gè)目錄)。

如何對(duì)目標(biāo)目錄和Slurper使用的文件名進(jìn)行更多動(dòng)態(tài)控制?Slurper配置文件具有SCRIPT選項(xiàng)(與DEST_DIR選項(xiàng)互斥),可以在其中指定一個(gè)腳本,該腳本提供源文件到目標(biāo)文件的動(dòng)態(tài)映射。

假設(shè)正在使用的文件包含文件名中的日期,并且已決定要按日期在HDFS中組織數(shù)據(jù)。那么,可以編寫腳本來執(zhí)行此映射活動(dòng)。以下示例是執(zhí)行此操作的Python腳本:

現(xiàn)在可以更新/usr/local/hdfs-slurper/conf/slurper.conf,設(shè)置SCRIPT,并注釋掉DEST_DIR,這會(huì)在文件中生成以下條目:

如果再次運(yùn)行Slurper,會(huì)注意到目標(biāo)路徑現(xiàn)在由Python腳本按日期分區(qū):

數(shù)據(jù)壓縮和驗(yàn)證

如果要在HDFS中壓縮輸出文件并驗(yàn)證副本是否正確,該怎么辦?需要使用COMPRESSION_CODEC選項(xiàng),其值是實(shí)現(xiàn)CompressionCodec接口的類。如果壓縮編解碼器是LZO或LZOP,還可以添加CREATE_LZO_INDEX選項(xiàng),以便創(chuàng)建LZOP索引。 (具體內(nèi)容請(qǐng)閱讀第四章,鏈接見文末)

驗(yàn)證功能會(huì)在復(fù)制完成后重新讀取目標(biāo)文件,并確保目標(biāo)文件的校驗(yàn)和與源文件匹配。這導(dǎo)致處理時(shí)間更長(zhǎng),但增加了復(fù)制成功的額外保證。

以下配置片段顯示了LZOP編解碼器,LZO索引和啟用的文件驗(yàn)證:

讓我們?cè)俅芜\(yùn)行Slurper:

連續(xù)運(yùn)轉(zhuǎn)

現(xiàn)在,你已經(jīng)掌握了基本機(jī)制,最后一步是將該工具作為守護(hù)程序運(yùn)行,以便不斷查找要傳輸?shù)奈募?。為此,可以使用名為bin/slurper-inittab.sh的腳本,該腳本旨在與inittab respawn一起使用。

此腳本不會(huì)創(chuàng)建PID文件或執(zhí)行nohup-在respawn的上下文中都沒有意義,因?yàn)閕nittab正在管理進(jìn)程。使用DATASOURCE_NAME配置值來創(chuàng)建日志文件名,這意味著可以使用記錄到不同日志文件的不同配置文件來啟動(dòng)多個(gè)Slurper實(shí)例。

總結(jié)

Slurper是一個(gè)很方便的工具,用于從本地文件系統(tǒng)到HDFS的數(shù)據(jù)輸入,還通過從HDFS復(fù)制到本地文件系統(tǒng)來支持?jǐn)?shù)據(jù)輸出。在MapReduce無(wú)法訪問文件系統(tǒng)并且正在傳輸?shù)奈募问讲贿m用于Flume等工具的情況下,它非常有用。

實(shí)踐:使用Oozie安排定期數(shù)據(jù)提取

如果數(shù)據(jù)位于文件系統(tǒng)、Web服務(wù)器或可從Hadoop集群訪問的任何其他系統(tǒng)上,我們將需要一種定期將該數(shù)據(jù)提取到Hadoop的方法。目前,有一些推送日志文件和從數(shù)據(jù)庫(kù)中提取的工具可供選擇,但如果需要與其他系統(tǒng)進(jìn)行交互,則可能需要自己處理數(shù)據(jù)輸入過程。

此技術(shù)使用Oozie 4.0.0版。

此數(shù)據(jù)入口分為兩部分:將數(shù)據(jù)從另一系統(tǒng)導(dǎo)入Hadoop以及定期進(jìn)行數(shù)據(jù)傳輸。

問題

自動(dòng)執(zhí)行每日任務(wù),以將內(nèi)容從HTTP服務(wù)器下載到HDFS。

解決方案

Oozie可用于將數(shù)據(jù)移動(dòng)到HDFS,還可用于執(zhí)行發(fā)布,例如啟動(dòng)MapReduce作業(yè)以處理獲取的數(shù)據(jù)。Oozie現(xiàn)在是Apache項(xiàng)目,管理數(shù)據(jù)處理活動(dòng)的Hadoop工作流引擎。Oozie還有一個(gè)協(xié)調(diào)器引擎,可以根據(jù)數(shù)據(jù)和時(shí)間觸發(fā)器啟動(dòng)工作流程。

討論

在此實(shí)踐中,我們將每24小時(shí)從多個(gè)URL執(zhí)行下載,使用Oozie管理工作流程和日程安排。該技術(shù)的流程如圖5.7所示,我們將使用Oozie觸發(fā)功能每24小時(shí)啟動(dòng)一次MapReduce作業(yè)。

圖5.7 Oozie技術(shù)的數(shù)據(jù)流

第一步是查看協(xié)調(diào)器XML配置文件。Oozie的協(xié)調(diào)引擎使用此文件來確定何時(shí)應(yīng)啟動(dòng)工作流程。Oozie使用模板引擎和表達(dá)式語(yǔ)言來執(zhí)行參數(shù)化,如下代碼所示。使用以下內(nèi)容創(chuàng)建名為coordinator.xml的文件:

代碼5.1 使用模板引擎通過Oozie執(zhí)行參數(shù)化

Oozie調(diào)度可能會(huì)讓人困惑的是,開始和結(jié)束時(shí)間與作業(yè)執(zhí)行的實(shí)際時(shí)間無(wú)關(guān)。相反,它們指的是每個(gè)工作流程執(zhí)行創(chuàng)建的日期,這在定期生成數(shù)據(jù)并且希望能夠及時(shí)返回某個(gè)點(diǎn)并對(duì)該數(shù)據(jù)執(zhí)行某些操作的情況下非常有用。在這個(gè)例子中,你希望每24小時(shí)執(zhí)行一份工作。所以,你可以將開始日期設(shè)置為昨天,將結(jié)束日期設(shè)置為將來的某個(gè)日期。

接下來,我們需要定義實(shí)際工作流程,該工作流程將在每個(gè)固定時(shí)間間隔執(zhí)行,并且在到達(dá)間隔時(shí)繼續(xù)執(zhí)行。為此,創(chuàng)建一個(gè)名為workflow.xml的文件,其中包含下一個(gè)代碼中顯示的內(nèi)容。

代碼5.2 使用Oozie協(xié)調(diào)器定義工作流程

Oozie希望map和reduce類使用“舊的”MapReduce API。如果要使用“新”API,則需要指定其他屬性:

最后一步是定義屬性文件,該文件指定如何獲取HDFS,MapReduce以及之前在HDFS中標(biāo)識(shí)的兩個(gè)XML文件的位置。創(chuàng)建一個(gè)名為job.properties的文件,如以下代碼所示:

不同Hadoop版本的JobTracker屬性

如果使用Hadoop 1.X版本,則應(yīng)使用jobTracker屬性中的JobTracker RPC端口(默認(rèn)值為8021)。否則使用YARN ResourceManager RPC端口(默認(rèn)為8032)。

在上一個(gè)代碼段中,HDFS中的位置指示本章前面編寫的coordinator.xml和workflow.xml文件的位置?,F(xiàn)在,需要將XML文件,輸入文件和包含MapReduce代碼的JAR文件復(fù)制到HDFS中:

最后,在Oozie中運(yùn)行作業(yè):

可以使用作業(yè)ID獲取有關(guān)作業(yè)的一些信息:

此輸出導(dǎo)致作業(yè)的一次運(yùn)行,可以看到運(yùn)行時(shí)間。整體狀態(tài)為RUNNING,這意味著作業(yè)正在等待下一個(gè)間隔發(fā)生。當(dāng)整個(gè)作業(yè)完成時(shí)(到結(jié)束日期之后),狀態(tài)將轉(zhuǎn)換為SUCCEEDED。

可以確認(rèn)HDFS中的輸出目錄對(duì)應(yīng)于具體日期:

只要作業(yè)正在運(yùn)行,它將繼續(xù)執(zhí)行直到日期結(jié)束,在此示例中已將其設(shè)置為2026年。如果要停止作業(yè),請(qǐng)使用-suspend選項(xiàng):

Oozie還可以分別使用-resume和-kill選項(xiàng)恢復(fù)暫停的作業(yè)以及殺死工作流程。

分享題目:怎么將日志文件和二進(jìn)制文件快速導(dǎo)入HDFS
文章地址:http://bm7419.com/article26/dpdecg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、小程序開發(fā)、企業(yè)建站網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)公司企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)