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?
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é.
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:
hadoop dfs -rmr hdfs://path/to/file
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
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.
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
Pour supprimer un fichier de hdfs, utilisez la commande suivante: hadoop fs -rm -r /FolderName
A partir de la ligne de commande:
hadoop fs -rm -r /folder
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