Удаление файла/папки из Hadoop

Я запускаю операцию EMR внутри Data Pipeline, анализируя файлы журнала, и я получаю следующую ошибку, когда моя строка не работает:

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)

Как удалить эту папку из Hadoop?

Ответы

Ответ 1

Я связался с поддержкой AWS, и казалось, что проблема в том, что файлы журнала, которые я анализировал, были очень большими, и это создало проблему с памятью. Я добавил в определение конвейера "masterInstanceType": "m1.xlarge" в разделе EMRCluster и работал.

Ответ 2

Когда вы говорите delete из 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 

Ответ 3

Чтобы удалить файл из hdfs, вы можете использовать приведенную ниже команду:

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

Чтобы удалить папку из hdfs, вы можете использовать следующую команду:

hadoop fs -rm -r -skipTrash /folder_name

Вам нужно использовать опцию -skipTrash, иначе появится запрос об ошибке.

Ответ 4

С Scala:

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

sc - это SparkContext

Ответ 5

Чтобы удалить файл из hdfs, используйте команду: hadoop fs -rm -r /FolderName

Ответ 6

Из командной строки:

 hadoop fs -rm -r /folder

Ответ 7

Я использую hasoop 2.6.0, строка commande 'hasoop fs -rm -r fileName.hib' отлично работает для удаления любого hib файла в моем hdf файле sys