【问题标题】:How to overwrite the output directory in Hadoop?如何覆盖Hadoop中的输出目录?
【发布时间】:2015-12-03 16:17:03
【问题描述】:

我正在读取一个 json 文件,我希望修改 json 文件中的一些更改。修改后我想覆盖在同一个 json 文件中。当我这样做时,MapReduce 会抛出一个异常为“FileAlreadyExists”。请给我一个在同一个文件中覆盖的解决方案。我不想删除文件并创建一个新文件。我只想覆盖。

【问题讨论】:

    标签: hadoop


    【解决方案1】:

    HDFS 不允许写入现有文件。您必须先删除文件并重新编写它们。 HDFS 不支持对文件的就地更新。 HDFS 旨在提供对现有数据的高读取。因此,您期望的功能在 HDFS 中不可用。

    【讨论】:

    • 感谢您的回复,阿布舍克。根据我的项目要求,我必须在 S3Bucket 中读取一个 json 文件(它有近 5000 个 json 文件),并且我希望在同一个文件中覆盖。有没有办法完成这个任务?
    • 请查看this。可能会帮助你。我不知道亚马逊 S3。我已经在 Hadoop(MapReduce 和 HDFS)上下文中给出了答案。
    • 我建议您正确解释您的问题,因为您到底在寻找什么以及您正在使用什么环境。
    • 我在 S3bucket 中有近 5000 个 json 文件。使用 MapReduce,我正在访问和读取 S3bucket 中的 json 文件。我对 Mapper 类中读取的 json 文件做了一些修改。在reducer类中,我想将修改后的json文件上传到S3存储桶中。由于文件已经存在,因此 mapreduce 不允许我覆盖它会引发异常,因为“文件已存在”。
    • 我已经使用了那个方法,你给我的链接。在这种方法中,我可以成功地读取和覆盖 S3bucket。它仅在 Eclipse 中工作正常。当我将它导出到 jar 并在终端中运行时,我无法在文件中覆盖,而且它也没有显示任何错误为“Filealreadyexist”。
    猜你喜欢
    • 2015-01-17
    • 2013-01-13
    • 2015-09-25
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 2020-11-19
    • 2011-12-04
    • 1970-01-01
    相关资源
    最近更新 更多