java - Hadoop 中的 HDFS 目录在哪里创建?

标签 java hdfs hadoop2

我正在伪分布式模式下运行一个简单的、get-my-feet-wet 的 map 缩减作业,如下所示:

bin/hadoop jar tm.jar TestMap input output

第一次运行良好,但在第二次运行时,我得到以下结果:

Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/tom/output already exists

创建 HDFS 目录的初始命令使用 hadoop 命令:

 $ bin/hdfs dfs -mkdir /user
 $ bin/hdfs dfs -mkdir /user/<username>

几个问题:

  • 这些 HDFS 目录是在哪里创建的?如果已经存在,可以删除它们吗?
  • 避免这种情况的最佳做法是什么?

最佳答案

运行 MR 作业时,它将期望 ouput目录不存在。

作业的第一次运行创建了它,并且使用相同的输出路径重新尝试作业导致了此异常。

从你的帖子中,output目录作为相对路径提供,在这种情况下,该目录将在用户的 HDFS 目录 ( /user/username/output ) 内创建。

是的,如果它们已经存在并且您不再需要它们,您可以删除它们。

hdfs dfs -rm -R output

为避免这种情况,您可以删除该目录并提交作业,或者提供不同的不存在路径作为作业的输出。

注意:例如,如果提供的输出路径为 new/mapreduce/output , Hadoop 期望父 new/mapreduce/存在。

关于java - Hadoop 中的 HDFS 目录在哪里创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41807917/

相关文章:

hadoop - Hadoop性能基准

hdfs - 如何使用 Apache Flink 读取 HDFS 中的 parquet 文件?

apache-spark - 在 Spark 中,广播是如何工作的?

java - 我可以将 return 语句放在 switch 语句中吗?

java - 快速 JUnit 类测试测试未失败

java - 使用批处理文件获取java安装路径?

java - 在Java数学中选择函数?

hadoop - Blocks如何转换为Records以及Hadoop中Record的定义到底是什么

rest - 如何集成 Ambari REST API 用于集群监控示例

hadoop - Yarn : Make yarn-site. xml 更改对集群中的工作节点有效