我有一个案例,一个mapreduce作业将每天执行几次。我想做的是将结果存储到相同的输出目录中。我得到这个错误:
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory
我不知道我怎么能增量存储到同一个文件夹,有什么例子,我可以看看吗?
v6ylcynt1#
当你在hdfs中存储文件时,它会导致重复,所以你必须用文件名添加timesatmp,这样填充将根据时间戳添加。添加文件名(日期+%y-%m-%d-%s)例如,当我们使用命令行在hdfs中添加文件时
hadoop dfs -put inputfile /inputfile_$(date +"%Y-%m-%d-%S")
在hdfs中
hadoop dfs -ls / -rw-r--r-- 1 kishore supergroup 0 2014-11-06 22:28 /inputfile_2014-11-06-29
8aqjt8rx2#
你不能那样做。通常,您希望这样做的原因是能够随着时间的推移将结果串联起来,作为以后map reduce作业的输入。您可以通过选择根目录并在每次运行时写入唯一命名的子目录来实现这一点。例如,第一次运行时写入目录/data/output/d001,第二次运行时写入目录/data/output/d02,等等。如果要将所有这些目录用作单个作业的输入,请将/data/output设置为输入目录。
2条答案
按热度按时间v6ylcynt1#
当你在hdfs中存储文件时,它会导致重复,所以你必须用文件名添加timesatmp,这样填充将根据时间戳添加。
添加文件名(日期+%y-%m-%d-%s)
例如,
当我们使用命令行在hdfs中添加文件时
在hdfs中
8aqjt8rx2#
你不能那样做。通常,您希望这样做的原因是能够随着时间的推移将结果串联起来,作为以后map reduce作业的输入。您可以通过选择根目录并在每次运行时写入唯一命名的子目录来实现这一点。例如,第一次运行时写入目录/data/output/d001,第二次运行时写入目录/data/output/d02,等等。如果要将所有这些目录用作单个作业的输入,请将/data/output设置为输入目录。