怎么將日志文件和二進制文件快速導入HDFS

這篇文章主要講解了“怎么將日志文件和二進制文件快速導入HDFS”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么將日志文件和二進制文件快速導入HDFS”吧!

這篇文章主要講解了“怎么將日志文件和二進制文件快速導入HDFS”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么將日志文件和二進制文件快速導入HDFS”吧!

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

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

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

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

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

版本注意事項

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

問題

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

解決方案

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

討論

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

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

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

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

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

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

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

可以捕獲此文件以檢查其內容,內容應與tail/var/log/messages對齊。

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

解析Flume agent

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

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

Sources

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

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

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

exec source允許執(zhí)行Unix命令,標準輸出中發(fā)出的每一行都被捕獲為事件(默認情況下會忽略常見錯誤)。在前面的示例中,tail -F命令用于在生成系統(tǒng)消息時捕獲它們。如果可以更好地控制文件(例如,如果可以在完成所有寫入后將它們移動到目錄中),考慮使用Flume的假脫機目錄源(稱為spooldir),因為它提供了exec source無法獲得的可靠性語義。

僅使用tail進行測試

不鼓勵使用tail進行測試以外的任何操作。

此配置中突出顯示的另一個功能是攔截器,它允許向事件添加元數(shù)據(jù)。回想一下,HDFS中的數(shù)據(jù)是根據(jù)時間戳組織的:第一部分是日期,第二部分是時間:

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

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

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

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

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

通道

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

Flume捆綁了三個通道:

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

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

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

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

Sinks

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

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

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

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

表5.5 Flume HDFS接收器的rollover屬性

默認HDFS接收器設置不應在生產(chǎn)中使用,因為它們會導致大量可能很小的文件。建議升級value或使用下游壓縮作業(yè)來合并這些小文件。

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

總結

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

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

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

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

圖5.5 使用負載平衡和 fan-in將log4j日志移動到HDFS的Flume設置

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

實踐:一種將文件復制到HDFS的自動機制

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

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

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

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

問題

需要自動執(zhí)行將遠程服務器上的文件復制到HDFS的過程。

解決方案

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

討論

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

圖5.6提供了Slurper的高級概述,以及如何使用它來復制文件的示例。Slurper讀取源目錄中存在的所有文件,并可選擇查詢腳本以確定目標目錄中的文件位置。然后,它將文件寫入目標,之后有一個可選的驗證步驟。在成功完成所有步驟后,Slurper將源文件移動到對應文件夾。

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

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

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

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

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

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

組件

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

Slurper捆綁了/usr/local/hdfs-slurper/conf/slurper.conf文件,其中包含源和目標目錄的詳細信息以及其他選項。該文件包含以下默認設置,你可以更改:

讓我們仔細看看這些設置:

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

SRC_DIR—指定源目錄。移動到此處的任何文件都會自動復制到目標目錄(使用中間hop到目標目錄)。

WORK_DIR—這是工作目錄。在復制到目標之前,源目錄中的文件將移動到此處。

COMPLETE_DIR—指定完整目錄。復制完成后,文件將從工作目錄移動到此目錄中?;蛘?,可以使用--remove-after-copy選項刪除源文件,在這種情況下,不應提供--complete-dir選項。

ERROR_DIR—這是錯誤目錄。復制期間遇到的任何錯誤都會導致源文件移動到此目錄中。

DEST_DIR—設置源文件的最終目標目錄。

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

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

運行

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

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

請注意,復制具有相同文件名的多個文件將導致目標被覆蓋,用戶有責任確保文件是唯一的,以防止這種情況發(fā)生。

動態(tài)目標路由

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

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

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

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

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

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

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

驗證功能會在復制完成后重新讀取目標文件,并確保目標文件的校驗和與源文件匹配。這導致處理時間更長,但增加了復制成功的額外保證。

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

讓我們再次運行Slurper:

連續(xù)運轉

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

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

總結

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

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

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

此技術使用Oozie 4.0.0版。

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

問題

自動執(zhí)行每日任務,以將內容從HTTP服務器下載到HDFS。

解決方案

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

討論

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

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

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

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

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

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

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

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

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

不同Hadoop版本的JobTracker屬性

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

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

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

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

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

可以確認HDFS中的輸出目錄對應于具體日期:

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

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

分享題目:怎么將日志文件和二進制文件快速導入HDFS
文章地址:http://muchs.cn/article26/dpdecg.html

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

廣告

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

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