Java 写入HDFS或Hbase的内容是否立即对Hadoop集群中的所有其他节点可见?

Java 写入HDFS或Hbase的内容是否立即对Hadoop集群中的所有其他节点可见?,java,hadoop,hbase,hive,Java,Hadoop,Hbase,Hive,当Hadoop作业正在运行或正在进行时,如果我将某些内容写入HDFS或Hbase,则会发生这种情况 数据对群集中的所有节点都可见 马上 2.)如果不是立即,那么在多长时间后 3.)或者确实无法确定时间?据我所知,写入操作完成后,数据立即可见 让我们看看这个过程的一些方面: 当客户端向HDFS写入数据时,数据会写入所有副本,并且在写入操作完成后,数据应该完全可用 也只有一个地方有元数据——NameNode,它也没有任何隔离的概念,这将使隐藏数据成为可能,直到完成更大的工作 HBase是另一种情况,

当Hadoop作业正在运行或正在进行时,如果我将某些内容写入HDFS或Hbase,则会发生这种情况 数据对群集中的所有节点都可见

马上

2.)如果不是立即,那么在多长时间后


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

据我所知,写入操作完成后,数据立即可见
让我们看看这个过程的一些方面:
当客户端向HDFS写入数据时,数据会写入所有副本,并且在写入操作完成后,数据应该完全可用
也只有一个地方有元数据——NameNode,它也没有任何隔离的概念,这将使隐藏数据成为可能,直到完成更大的工作

HBase是另一种情况,因为它将立即只向HDFS写入日志,并且其HFiles将仅在压缩后用新数据更新。同时,在HBase本身将某些内容写入HDFS后,数据将立即可见。

HDFS具有很强的一致性,因此一旦写入成功,新数据应立即在所有节点上可见。很明显,实际的写作需要一些时间——有关这方面的一些细节,请参阅

这与最终一致的系统形成对比,在最终一致的系统中,所有节点都可能需要一段不确定的时间(尽管通常只有几毫秒)才能看到一致的数据视图


像Cassandra这样的系统具有可调的一致性—每个读写操作都可以在不同的一致性级别上执行,以适应正在执行的操作。

在HDFS中,使用hflush()或hsync()方法刷新或同步数据后,数据就可见了—我想这些方法是在0.21版本中引入的HFlush保证所有读者都能看到数据Hsync保证数据已保存到磁盘(尽管它可能仍在磁盘缓存中)。write方法不能为您提供任何保证。回答您的问题-在HDFS中,执行hflush()或hsync()后,每个人都可以立即看到数据.

Hbase最终还是强一致?小问题:刷新调用不能保证预先存在的读卡器看到刷新调用刷新的数据。读卡器保证能够读取在读卡器打开文件之前“刷新”的数据。