web-dev-qa-db-fra.com

Supprimer un fichier/dossier de Hadoop

J'exécute une activité EMR dans un pipeline de données en analysant les fichiers journaux et j'obtiens l'erreur suivante lorsque mon Pipeline échoue:

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)

Comment puis-je supprimer ce dossier de Hadoop?

17
cevallos.valtira

J'ai contacté le support technique d'AWS et il semblait que le problème était que les fichiers journaux que j'étais en train d'analyser étaient très volumineux et que cela créait un problème de mémoire. J'ai ajouté à ma définition de pipeline "masterInstanceType": "m1.xlarge" dans la section EMRCluster et cela a fonctionné.

1
cevallos.valtira

Lorsque vous dites supprimer de Hadoop, vous voulez vraiment dire supprimer de HDFS.

Pour supprimer quelque chose de HDFS, effectuez l’une des deux

A partir de la ligne de commande:

  • manière obsolète:

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

  • nouvelle manière (avec hadoop 2.4.1):

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

Ou de Java:

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

Pour supprimer un fichier de hdfs, vous pouvez utiliser la commande ci-dessous: 

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

Pour supprimer un dossier de hdfs, vous pouvez utiliser la commande ci-dessous:

hadoop fs -rm -r -skipTrash /folder_name

Vous devez utiliser l'option -skipTrash sinon une erreur vous sera demandée. 

15
Udit Solanki

Avec Scala:

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

sc est le SparkContext

7
Josiah Yoder

Pour supprimer un fichier de hdfs, utilisez la commande suivante: hadoop fs -rm -r /FolderName

2
Kishore Bhosale

A partir de la ligne de commande:

 hadoop fs -rm -r /folder
1
grokster

J'utilise hadoop 2.6.0, la ligne de commande 'hadoop fs -rm -r nomFichier.hib' fonctionne bien pour supprimer tout fichier hib sur mon fichier hdfs sys

0
Ahmed Dib