从Hadoop中删除文件/文件夹

从Hadoop中删除文件/文件夹,hadoop,amazon-web-services,amazon-s3,elastic-map-reduce,Hadoop,Amazon Web Services,Amazon S3,Elastic Map Reduce,我正在分析日志文件的数据管道中运行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.FileOutp

我正在分析日志文件的数据管道中运行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$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中删除该文件夹?

当您说从Hadoop中删除时,实际上是指从HDFS中删除

要从HDFS中删除某些内容,请执行以下两种操作之一

从命令行:

 hadoop fs -rm -r /folder
  • 不推荐的方式:
hadoop dfs-rmrhdfs://path/to/file

  • 新方法(使用hadoop 2.4.1):
hdfs-dfs-rm-rhdfs://path/to/file

或来自java:

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

我联系了AWS支持人员,问题似乎是我正在分析的日志文件非常大,导致内存问题。我在我的管道定义中添加了“masterInstanceType”:“m1.xlarge”在EMRCluster部分,它起了作用。

从命令行:

 hadoop fs -rm -r /folder

要从hdfs中删除文件,请使用以下命令:
hadoop fs-rm-r/FolderName

要从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

我使用hadoop 2.6.0,命令行'hadoop fs-rm-r fileName.hib'可以很好地删除hdfs文件sys上的任何hib文件

path/to/file是“10.208.42.127:9000/home/hadoop/temp-output-s3copy”?谢谢我还没有测试过。我的问题是我应该使用“10.208.42.127:9000/home/hadoop/temp-output-s3copy”作为路径/到/文件吗?通常您只需指定hdfs://home/hadoop/temp-output-s3copy,因为hdfs上的文件通常复制到多个节点。您是在单个节点上执行此操作的吗?如果此文件夹位于HDFS上,那么它应该可以工作。虽然你给出的路径让我觉得它根本不在HDFS上,而是一个本地文件夹。你是通过命令行还是java来完成的?我是通过命令行创建管道的,但是我的loganalyzer是用java来完成的。这是对你的问题的回答,但不是对问题标题的回答。正是我想要的:包括递归标志和来自sparkContext的。