hadoop以键值对(记录)格式写入SequenceFile
。考虑一下我们有一个大的无界日志文件。 Hadoop将根据块大小拆分文件并将其保存在多个数据节点上。是否保证每个键值对都驻留在一个块上?或者我们可能有一个案例,以便密钥在节点1的一个块中,并在节点2的第二个块上的值(或部分)?如果我们可能有无意义的完全拆分,那么解决方案是什么?同步标记?
另一个问题是:hadoop是否自动写入同步标记,或者我们应该手动编写它?
答案 0 :(得分:9)
我在hadoop邮件列表中问了这个问题。他们回答说:
然后我问:同步标记已经写入序列文件,它们是其中的一部分 格式。这没什么好担心的 - 而且很简单 测试并充满信心。该机制与阅读文本相同 带换行符的文件 - 读者将确保读取边界 数据,以便在必要时完成记录。
因此,如果我们有一个地图作业,只分析日志的第二个块 文件,它不应该从其他节点传输其他任何部分 因为那部分是独立的,意味着完全分裂?我是对的吗?
他们回答说:
是。简而言之,您的记录永远不会破裂。我们不读 在分裂边界处,我们可能会超出边界直到同步 遇到标记是为了完成一个或一系列的记录 记录。随后的映射器将一直跳到第一个 同步标记,然后开始阅读 - 以避免重复。这是 文本文件读取的确切方式也是如此 - 只有在这里,它才是 换行。