是否可以立即向Hadoop Cluster中的所有其他节点显示写入HDFS或Hbase的内容?

时间:2012-02-12 12:00:06

标签: java hadoop hbase hive

如果Hadoop作业正在运行或正在进行中,如果我向HDFS或Hbase写入内容,那么就会这样做 数据对集群中的所有节点可见

1)立即?

2.)如果没有立即经过多长时间?

3.)或者时间真的无法确定?

3 个答案:

答案 0 :(得分:4)

HDFS非常一致,因此一旦写入成功完成,新数据应立即在所有节点上可见。显然,实际写作需要一些时间 - 有关详细信息,请参阅replication pipelining

这与最终一致的系统形成对比,在所有系统中,在所有节点看到一致的数据视图之前,它可能需要无限期(但通常只有几毫秒)。

像Cassandra这样的系统具有可调整的一致性 - 每次读写都可以在不同的一致性水平上执行,以适应正在执行的操作。

答案 1 :(得分:3)

据我所知,写操作完成后,数据立即可见。
让我们看看这个过程的一些方面:
当客户端写入HDFS数据写入所有副本时,并且在写入操作完成后,它应该是完全可用的 还有一个地方有元数据 - NameNode也没有任何隔离概念,这样可以隐藏数据,直到完成更大的工作。
HBase是一个不同的情况 - 因为它只会立即将LOG写入HDFS,并且仅在压缩后将使用新数据更新其HFile。同时 - 在HBase自身写入HDFS之后 - 数据将立即可见。

答案 2 :(得分:0)

在HDFS中,一旦使用hflush()或hsync()方法刷新或同步数据,就会看到这些数据 - 我想这些方法是在0.21版本中引入的。 HFlush 可确保所有读者都能看到数据。 Hsync 可以保证数据已保存到磁盘(尽管它可能仍在磁盘缓存中)。 write方法不会给你任何保证。要回答你的问题 - 在执行hflush()或hsync()之后,HDFS中的数据会立即显示立即