Удаление файла/папки из Hadoop
Я запускаю действие EMR внутри конвейера данных, анализирующего файлы журнала, и я получаю следующую ошибку, когда мой не:
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.run(JobClient.java:944)
at org.apache.hadoop.mapred.JobClient.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)
Как удалить эту папку из Hadoop?
7 ответов
когда вы говорите удалить из Hadoop, вы действительно имеете в виду удалить из HDFS.
чтобы удалить что-то из HDFS, сделайте один из двух
из командной строки:
- устаревшие образом:
hadoop dfs -rmr hdfs://path/to/file
- новый способ (с Hadoop 2.4.1) :
hdfs dfs -rm -r hdfs://path/to/file
или с java:
FileSystem fs = FileSystem.get(getConf());
fs.delete(new Path("path/to/file"), true); // delete file, true for recursive
чтобы удалить файл из hdfs, вы можете использовать следующую команду:
hadoop fs -rm -r -skipTrash /path_to_file/file_name
чтобы удалить папку из hdfs, вы можете использовать следующую команду:
hadoop fs -rm -r -skipTrash /folder_name
вам нужно использовать опцию-skipTrash в противном случае будет предложено ошибка.
С Помощью Scala:
val fs:FileSystem = FileSystem.get(new URI(filePath), sc.hadoopConfiguration);
fs.delete(new Path(filePath), true) // true for recursive
sc-это SparkContext
Я связался с поддержкой AWS, и мне показалось, что проблема в том, что файлы журналов, которые я анализировал, были очень большими, и это создало проблему с памятью. Я добавил в свое определение конвейера "masterInstanceType": "m1.xlarge " в разделе EMRCluster, и это сработало.
Я использую hadoop 2.6.0, имя файла командной строки " Hadoop fs-rm-R.hib " отлично работает для удаления любого файла hib в моем файле hdfs sys