it-swarm.com.de

Datei/Ordner von Hadoop löschen

Ich führe eine EMR-Aktivität in einer Daten-Pipeline aus, die Protokolldateien analysiert. Ich erhalte die folgende Fehlermeldung, wenn meine Pipeline ausfällt :

Exception in thread "main" org.Apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://10.208.42.127:9000/home/hadoop/temp-output-s3copy already exists
    at org.Apache.hadoop.mapred.FileOutputFormat.checkOutputSpecs(FileOutputFormat.Java:121)
    at org.Apache.hadoop.mapred.JobClient$2.run(JobClient.Java:944)
    at org.Apache.hadoop.mapred.JobClient$2.run(JobClient.Java:905)
    at Java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.Java:396)
    at org.Apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.Java:1132)
    at org.Apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.Java:905)
    at org.Apache.hadoop.mapred.JobClient.submitJob(JobClient.Java:879)
    at org.Apache.hadoop.mapred.JobClient.runJob(JobClient.Java:1316)
    at com.valtira.datapipeline.stream.CloudFrontStreamLogProcessors.main(CloudFrontStreamLogProcessors.Java:216)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
    at Java.lang.reflect.Method.invoke(Method.Java:597)
    at org.Apache.hadoop.util.RunJar.main(RunJar.Java:187)

Wie kann ich diesen Ordner aus Hadoop löschen?

17

Ich habe mich an den AWS-Support gewandt, und das Problem bestand darin, dass die von mir analysierten Protokolldateien sehr groß waren und ein Problem mit dem Speicher entstand. Ich habe meiner Pipeline-Definition "masterInstanceType" hinzugefügt: "m1.xlarge" im EMRCluster-Abschnitt, und es hat funktioniert.

1

Wenn Sie von Hadoop löschen sagen, meinen Sie wirklich das Löschen von HDFS.

Um etwas aus HDFS zu löschen, führen Sie einen der beiden Schritte aus

Von der Kommandozeile aus:

  • veraltete Art und Weise:

hadoop dfs -rmr hdfs://path/to/file

  • neuer Weg (mit hadoop 2.4.1):

hdfs dfs -rm -r hdfs://path/to/file

Oder von Java aus:

FileSystem fs = FileSystem.get(getConf());
fs.delete(new Path("path/to/file"), true); // delete file, true for recursive 
49
greedybuddha

Um eine Datei aus HDFS zu löschen, können Sie den folgenden Befehl verwenden: 

hadoop fs -rm -r -skipTrash /path_to_file/file_name

Um einen Ordner aus HDFS zu löschen, können Sie den folgenden Befehl verwenden:

hadoop fs -rm -r -skipTrash /folder_name

Sie müssen die Option -skipTrash verwenden, andernfalls wird ein Fehler angezeigt. 

15
Udit Solanki

Mit Scala:

val fs:FileSystem = FileSystem.get(new URI(filePath), sc.hadoopConfiguration);
fs.delete(new Path(filePath), true) // true for recursive

sc ist der SparkContext

7
Josiah Yoder

Um eine Datei aus HDFS zu löschen, verwenden Sie den Befehl: hadoop fs -rm -r /FolderName

2
Kishore Bhosale

Von der Kommandozeile aus:

 hadoop fs -rm -r /folder
1
grokster

Ich benutze hadoop 2.6.0, die Befehlszeile 'hadoop fs -rm -r fileName.hib' funktioniert gut, um jede Hib-Datei auf meiner HDFS-Datei sys zu löschen

0
Ahmed Dib