【问题标题】:Is it possible to append to HDFS file from multiple clients in parallel?是否可以从多个客户端并行追加到 HDFS 文件?
【发布时间】:2011-09-17 09:22:17
【问题描述】:

基本上整个问题都在标题中。我想知道是否可以同时从多台计算机附加到位于 HDFS 上的文件?诸如存储由多个进程不断产生的事件流之类的东西。顺序并不重要。

我记得在一次 Google 技术演示中听说 GFS 支持此类附加功能,但尝试使用 HDFS 进行一些有限的测试(使用常规文件 append() 或使用 SequenceFile)似乎不起作用。

谢谢,

【问题讨论】:

标签: hadoop hdfs gfs


【解决方案1】:

仅供参考,可能它会在 hadoop 2.6.x 中得到完全支持,根据官方网站上的 JIRA 项目:https://issues.apache.org/jira/browse/HDFS-7203

【讨论】:

    【解决方案2】:

    我认为 HDFS 不可能做到这一点。即使您不关心记录的顺序,但您确实关心文件中字节的顺序。您不希望写入器 A 写入部分记录,然后被写入器 B 破坏。这对于 HDFS 来说是一个很难自行解决的问题,所以它不会。

    为每个作者创建一个文件。将所有文件传递给任何需要读取此数据的 MapReduce 工作人员。这要简单得多,并且适合 HDFS 和 Hadoop 的设计。如果非 MapReduce 代码需要将这些数据作为一个流读取,则可以按顺序流式传输每个文件,或者编写一个非常快速的 MapReduce 作业来整合文件。

    【讨论】:

    • 谢谢。我想我没有意识到每个 MapReduce 作业不必是一个文件。在每台计算机上编写一个文件应该很容易实现,也许可以使用另一个答案中建议的内存队列来避免阻塞。
    • @Spike 只是为了澄清 GFS 确实支持并发追加。从他们的 GFS 论文中:“我们的分布式应用程序大量使用记录追加,其中不同机器上的许多客户端同时追加到同一个文件。”
    • 你应该得到一个exception stating the file already exists。那个jira说"HDFS supports single writer at a time for a given file."您可以使用getmerge按照此答案中的建议合并文件
    猜你喜欢
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 2010-11-04
    相关资源
    最近更新 更多