假设我想存储大量带有关联元数据的网址
URL => Metadata
在文件中
hdfs://db/urls.seq
我希望这个文件在每次运行MapReduce后增长(如果找到新的URL)。
这适用于Hadoop吗?据我了解,MapReduce将数据输出到新目录。有没有办法获取该输出并将其附加到文件中?
我想到的唯一想法是创建一个临时的urls.seq,然后替换旧的。它有效,但感觉很浪费。另外,根据我的理解,Hadoop喜欢"一次编写"的方法,这个想法与此相冲突。
正如BlackSmith所解释的那样,您可以轻松地在hdfs中附加现有文件,但这会降低性能,因为hdfs采用"一次写入"策略设计。我的建议是避免这种方法,直到没有选择。您可以考虑的一种方法是,您可以为每个mapreduce输出创建一个新文件,如果每个输出的大小足够大,那么这种技术将使您受益最大,因为编写新文件不会影响附加的性能。此外,如果您在下一个mapreduce中读取每个mapreduce的输出,那么读取新文件不会像追加那样影响您的性能。因此,有一个权衡,这取决于您想要的性能或简单性。(无论如何圣诞快乐!