問題的可能答案。
這是一段時間以來,我使用了水槽。仍然希望他們幫助。
- 可水槽用來讀取更頻繁的文件服務器,這些較小的文件,並存儲在HDFS?
由於數據源是可定製的,水槽可用於傳輸事件的數據包括大量的數量,但不限於網絡流量數據,社交媒體產生的數據,電子郵件和幾乎任何數據源可能。
注意:Flume不支持tail
作爲源。可以將tail
命令包裝在一個可執行源中以流式傳輸該文件。
對於尾礦庫文件,您可以check this out
目錄爲多個文件源的實現可以tracked here
你可以閱讀有關HDFS sink here,可以寫信給HDFS
。我知道有CombineFileInputFormat和SequenceFiles 將這些文件合併處理,但是這些較小的文件是否可以在存儲在HDFS中之前連接成 ?
Flume基本上在Event機制上工作。可以根據所用時間或數據大小或事件數量定期滾動文件(關閉當前文件並創建一個新文件)。檢查HDFS接收器的相同鏈接。
如果文件數量很大,可以使用CombineFileINputFormat。在寫入HDFS之前,我不知道如何做到這一點。
注:
正如我已經說過水槽工作在基於事件的機制,據我知道這不是傳輸文件。如果你看看這個interface for Event,你會注意到下面的方法
byte[] getBody()
:返回此事件中包含的數據的原始字節數組。
void setBody(byte[] body)
:設置此事件中包含的數據的原始字節數組。
因此,一個事件的最大大小是byte []可以採用的大小。我不知道你的文件可以放在那裏。你必須自己測試它。此外,還有其他的條件,我現在不記得,可能會阻礙你將文件傳輸到HDFS。
謝謝JtheRocker。實際上,我沒有對文件服務器目錄的任何控制,並且文件中不需要尾部。我需要flume在網絡位置將文件傳輸到HDFS,並在到達時或間隔時傳輸。這些文件的平均速度可能是每小時1000個文件,最高文件可能達到3000個。 – learninghuman
@ManikandanKannan:請檢查 - 我已經更新了答案。 –
謝謝。如果不是flume,還有其他方式將數據攝入HDFS嗎?一種選擇是將文件加載到hadoop namenode的本地文件系統中,然後使用HDFS put命令加載到HDFS中。 – learninghuman