2016-07-12 99 views
-1

在java中使用文件生成器時,我將在本地文件系統中擁有需要在HDFS中移動的目錄和文件流。我在互聯網搜索,我看到我可以使用Flume,但我沒有找到任何資源,向我解釋如何做到這一點。你有什麼想法如何實現這一點?使用Flume將本地文件系統中的文件複製到HDFS

謝謝

+0

需要更多的細節才能夠給你點擊。首先,你有幾臺機器,或者你正在做同一個節點上的所有東西(例如測試)。這些文件的性質是什麼:是一次性讀取的那些靜態文件,還是那些不時創建的日誌文件? – Serhiy

+0

現在,我使用相同的節點進行測試。它將是由用戶創建的日誌文件,並且每次創建之間的時間間隔可能會從幾分鐘到幾小時不等。但現在我正在生成隨機文件,以查看HDFS如何響應小文件的流式傳輸。 – Yassine

回答

0

我從來沒有做過它在同一臺機器上(如你提到你對此有何評論,對環境),所以你可能需要做一些測試和調整以下配置工作。

就你而言,由於文件將在一個(或多個目錄)中動態創建,因此我建議配置Spooling Directory Source(每個目錄)和HDFS Sink。在水槽的安裝文件夾conf目錄下創建一個文件test.conf並把類似的配置:

# Name the components on this agent 
agent.sources = file-source 
agent.sinks = hdfs-sink 
agent.channels = mem-channel 

# Associate channel with source and sink 
agent.sources.file-source.channels = mem-channel 
agent.sinks.hdfs-sink.channel = mem-channel 

# Configure the source 
agent.sources.file-source.type = spooldir 
agent.sources.file-source.spoolDir = /tmp/spool/ 
agent.sources.file-source.fileHeader = true 

# Configure the sink 
agent.sinks.hdfs-sink.type = hdfs 
agent.sinks.hdfs-sink.hdfs.path = /tmp/log.log 
agent.sinks.hdfs-sink.hdfs.fileType = DataStream 
agent.sinks.hdfs-sink.hdfs.path = /flume/test/ 

# Use a channel which buffers events in memory 
agent.channels.mem-channel.type = memory 
agent.channels.mem-channel.capacity = 1000 
agent.channels.mem-channel.transactionCapacity = 100 

運行的代理,在水槽的安裝目錄下執行以下命令:

bin/flume-ng agent -n agent -c conf -f conf/test.conf 

開始把文件放到/tmp/spool/並檢查它們是否出現在HDFS中。

當您要分配系統時,我建議在客戶端上使用Avro Sink,在服務器上使用Avro Source,當您將在該服務器上時,您會得到它。

相關問題