2017-06-28 2 views
0

Wir haben Dateien in HDFS mit rohen Protokollen, jedes einzelne Protokoll ist eine Zeile, da diese Protokolle zeilenweise getrennt sind.Hadoop: Verwenden von Pig zum Hinzufügen von Text am Ende jeder Zeile einer hdfs-Datei

Unsere Anforderung ist, dass ein Text ('12345' für z. B.) am Ende jedes Logs in diesen Dateien ... mit Pig/Hadoop-Befehl/oder einem anderen Map reduzieren Tool hinzugefügt werden.

Bitte Beratung

Dank AJ

+1

Was haben Sie bisher versucht? Bitte posten Sie, damit wir Ihnen helfen können. –

+0

Sie benötigen dazu lediglich einen Mapper. Was hast du bisher versucht? – user238607

Antwort

0

Laden, um die Dateien, in denen jeder Protokolleintrag in ein Feld dh Zeile geladen wird: chararray und verwenden CONCAT den Text zu jedem in neue Protokolldatei line.Store hinzufügen .Wenn Sie die einzelnen Dateien wollen, dann müssen Sie das Skript parametrisieren, um jede Datei zu laden und in einer neuen Datei zu speichern, anstatt Platzhalter zu laden.

Log = LOAD '/path/wildcard/*.log' USING TextLoader(line:chararray); 
Log_Text = FOREACH Log GENERATE CONCAT(line,'Your Text') as newline; 
STORE Log_Text INTO /path/NewLog.log'; 
+0

Danke "inquisitive_mind", das half uns, dies zu lösen – ankit

0

Wenn Ihre Dateien nicht extrem groß sind, können Sie das mit einem einzigen Shell-Befehl tun.

hdfs dfs -cat /user/hdfs/logfile.log | sed 's/$/12345/g' |\ 
hdfs dfs -put - /user/hdfs/newlogfile.txt 
Verwandte Themen