假设我想存储大量带有相关元数据的url
URL => Metadata
在文件中
hdfs://db/urls.seq
我想这个文件增长(如果新的网址发现)后,每次运行mapreduce。这对hadoop有用吗?据我所知,mapreduce将数据输出到一个新目录。有没有办法获取输出并将其附加到文件中?我唯一想到的是创建一个临时url.seq,然后替换旧的。它工作,但感觉浪费。另外,据我所知,hadoop喜欢“只写一次”的方法,这种想法可能与此相冲突。
yqhsw0fo1#
正如blacksmith所解释的,您可以很容易地在hdfs中附加现有文件,但这会降低您的性能,因为hdfs是用“一次写入”策略设计的。我的建议是在别无选择之前避免这种做法。您可以考虑的一种方法是,可以为每个mapreduce输出创建一个新文件,如果每个输出的大小足够大,那么这种技术将对您最有好处,因为编写新文件不会像附加那样影响性能。而且,如果在下一个mapreduce中读取每个mapreduce的输出,那么读取新文件不会像附加那样影响性能。因此,有一个折衷方案,它取决于您想要的是性能还是简单无论如何,圣诞快乐
1条答案
按热度按时间yqhsw0fo1#
正如blacksmith所解释的,您可以很容易地在hdfs中附加现有文件,但这会降低您的性能,因为hdfs是用“一次写入”策略设计的。我的建议是在别无选择之前避免这种做法。您可以考虑的一种方法是,可以为每个mapreduce输出创建一个新文件,如果每个输出的大小足够大,那么这种技术将对您最有好处,因为编写新文件不会像附加那样影响性能。而且,如果在下一个mapreduce中读取每个mapreduce的输出,那么读取新文件不会像附加那样影响性能。因此,有一个折衷方案,它取决于您想要的是性能还是简单无论如何,圣诞快乐