2016-07-12 36 views
-1

Mit einem Dateigenerator in Java, ich habe einen Strom von Verzeichnissen und Dateien in meinem lokalen Dateisystem, die ich in HDFS verschieben muss. Ich suche im Internet und ich habe gesehen, dass ich Flume benutzen kann, aber ich habe keine Ressourcen gefunden, die mir erklären, wie man das macht. Haben Sie eine Idee, wie Sie das umsetzen können?Kopieren von Dateien von meinem lokalen Dateisystem nach HDFS mit Flume

Danke

+0

Weitere Details sind erforderlich, um Ihnen einige Treffer zu geben. Zuerst haben Sie mehrere Maschinen oder Sie tun alles auf dem gleichen Knoten (zum Beispiel zum Testen). Was ist die Art der Dateien: Sind das statische Dateien, die Sie alle gleichzeitig lesen, oder sind es zum Beispiel Protokolldateien, die von Zeit zu Zeit erstellt werden? – Serhiy

+0

Momentan verwende ich den gleichen Knoten zum Testen. Es sind vom Benutzer erstellte Protokolldateien, und das Intervall zwischen den einzelnen Erstellungen kann von Minuten bis zu Stunden variieren. Aber jetzt erzeuge ich zufällige Dateien, um zu sehen, wie HDFS auf das Streaming von kleinen Dateien reagiert. – Yassine

Antwort

0

ich es nie auf der gleichen Maschine getan haben (wie Sie in Ihnen genannten Kommentar, über die Umwelt), so dass Sie vielleicht ein paar Tests und Anpassungen für die folgende Konfiguration zu arbeiten, tun müssen.

In Ihrem Fall, da die Dateien dynamisch (oder viele Verzeichnisse) in einer erstellt werden würde ich vorschlagen, die Spooling Directory Source (pro Verzeichnis) und HDFS Sink zu konfigurieren. Erstellen Sie eine Datei test.conf in conf Verzeichnis in Flume Installationsordner und setzen ähnliche Konfiguration:

# 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 

den Agenten auszuführen, führen Sie den folgenden Befehl in das Gerinne Installationsverzeichnis:

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

starten Putting-Dateien in das /tmp/spool/ und prüfen Sie, ob sie im HDFS erscheinen.

Wenn Sie das System verteilen, empfehle ich Avro Sink auf Client und Avro Source auf Server verwenden, Sie werden es erhalten, wenn Sie dort sein werden.