以受控方式拆分SequenceFile - Hadoop

时间:2011-12-06 19:32:49

标签: hadoop

hadoop以键值对(记录)格式写入SequenceFile。考虑一下我们有一个大的无界日志文件。 Hadoop将根据块大小拆分文件并将其保存在多个数据节点上。是否保证每个键值对都驻留在一个块上?或者我们可能有一个案例,以便密钥在节点1的一个块中,并在节点2的第二个块上的值(或部分)?如果我们可能有无意义的完全拆分,那么解决方案是什么?同步标记?

另一个问题是:hadoop是否自动写入同步标记,或者我们应该手动编写它?

1 个答案:

答案 0 :(得分:9)

我在hadoop邮件列表中问了这个问题。他们回答说:

  

同步标记已经写入序列文件,它们是其中的一部分   格式。这没什么好担心的 - 而且很简单   测试并充满信心。该机制与阅读文本相同   带换行符的文件 - 读者将确保读取边界   数据,以便在必要时完成记录。

然后我问:

  

因此,如果我们有一个地图作业,只分析日志的第二个块   文件,它不应该从其他节点传输其他任何部分   因为那部分是独立的,意味着完全分裂?我是对的吗?

他们回答说:

  

是。简而言之,您的记录永远不会破裂。我们不读   在分裂边界处,我们可能会超出边界直到同步   遇到标记是为了完成一个或一系列的记录   记录。随后的映射器将一直跳到第一个   同步标记,然后开始阅读 - 以避免重复。这是   文本文件读取的确切方式也是如此 - 只有在这里,它才是   换行。