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