-1
在java中使用文件生成器時,我將在本地文件系統中擁有需要在HDFS中移動的目錄和文件流。我在互聯網搜索,我看到我可以使用Flume,但我沒有找到任何資源,向我解釋如何做到這一點。你有什麼想法如何實現這一點?使用Flume將本地文件系統中的文件複製到HDFS
謝謝
在java中使用文件生成器時,我將在本地文件系統中擁有需要在HDFS中移動的目錄和文件流。我在互聯網搜索,我看到我可以使用Flume,但我沒有找到任何資源,向我解釋如何做到這一點。你有什麼想法如何實現這一點?使用Flume將本地文件系統中的文件複製到HDFS
謝謝
我從來沒有做過它在同一臺機器上(如你提到你對此有何評論,對環境),所以你可能需要做一些測試和調整以下配置工作。
就你而言,由於文件將在一個(或多個目錄)中動態創建,因此我建議配置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,當您將在該服務器上時,您會得到它。
需要更多的細節才能夠給你點擊。首先,你有幾臺機器,或者你正在做同一個節點上的所有東西(例如測試)。這些文件的性質是什麼:是一次性讀取的那些靜態文件,還是那些不時創建的日誌文件? – Serhiy
現在,我使用相同的節點進行測試。它將是由用戶創建的日誌文件,並且每次創建之間的時間間隔可能會從幾分鐘到幾小時不等。但現在我正在生成隨機文件,以查看HDFS如何響應小文件的流式傳輸。 – Yassine