hadoop上的读取操作和一致性级别

hadoop上的读取操作和一致性级别,hadoop,hbase,consistency,Hadoop,Hbase,Consistency,我正在HDFS上设置分布式HBase,并试图了解系统在读取操作期间的行为 这就是我如何理解读取操作的高级步骤 客户机连接到NameNode以获取包含他感兴趣的行的副本的DataNode列表 从这里开始,客户机缓存DataNodes列表,并开始直接与所选DataNode对话,直到它需要来自其他DataNode的一些其他行,在这种情况下,它再次询问NameNode 我的问题如下: 谁选择了要联系的最佳副本数据节点?客户端如何选择“最近的”复制副本?NameNode是否按排序顺序返回相对DataNod

我正在HDFS上设置分布式HBase,并试图了解系统在读取操作期间的行为

这就是我如何理解读取操作的高级步骤

  • 客户机连接到NameNode以获取包含他感兴趣的行的副本的DataNode列表
  • 从这里开始,客户机缓存DataNodes列表,并开始直接与所选DataNode对话,直到它需要来自其他DataNode的一些其他行,在这种情况下,它再次询问NameNode
  • 我的问题如下:

  • 谁选择了要联系的最佳副本数据节点?客户端如何选择“最近的”复制副本?NameNode是否按排序顺序返回相对DataNodes的列表
  • 当客户端切换到另一个已请求行的DataNode时,有哪些场景(如果有)?例如,如果其中一个DataNode过载/变慢,客户机库能否从NameNode返回的列表中找到另一个DataNode
  • 是否有可能从其中一个副本获取过时数据?例如,客户机获取数据节点列表并开始从其中一个节点读取数据。同时,另一个客户端向NameNode发出写入请求。我们有dfs.replication==3和dfs.replication.min=2。NAMENODE考虑在3个节点中的2个刷新到磁盘之后写入成功,而第一个客户端正在从第三个节点读取,并且不知道还有另一个已提交的写?李>
  • Hadoop在支持HBase时保持相同的读取策略 多谢各位

    谁选择了要联系的最佳副本数据节点?客户端如何选择“最近的”复制副本?NameNode是否按排序顺序返回相对DataNodes的列表

    客户是决定最好联系谁的人。它按以下顺序选择它们:

  • 文件在同一台机器上。在这种情况下(如果配置正确),它将使DataNode短路,并作为优化直接转到文件
  • 文件位于同一机架中(如果配置了机架感知)
  • 文件在别的地方
  • 当客户端切换到另一个已请求行的DataNode时,有哪些场景(如果有)?例如,如果其中一个DataNode过载/变慢,客户机库能否从NameNode返回的列表中找到另一个DataNode

    没那么聪明。如果它认为DataNode已关闭(意味着超时),但在我所知的任何其他情况下,它都会切换。我相信它会转到列表中的下一个节点,但它可能会再次联系NameNode——我不是100%确定

    是否有可能从其中一个副本获取过时数据?例如,客户机获取数据节点列表并开始从其中一个节点读取数据。同时,另一个客户端向NameNode发出写入请求。我们有dfs.replication==3和dfs.replication.min=2。NAMENODE考虑在3个节点中的2个刷新到磁盘之后写入成功,而第一个客户端正在从第三个节点读取,并且不知道还有另一个已提交的写?p> 陈旧的数据是可能的,但不是在您描述的情况下。文件是一次写入且不可变的(除了追加,但如果不需要追加,则不追加)。NameNode在完全写入文件之前不会告诉您文件在那里。如果是追加,那你就太丢脸了。从本地文件系统上主动附加到文件的文件中读取数据的行为也是不可预测的。在HDFS中,您应该期望得到同样的结果

    一种可能发生过时数据的方法是,检索块位置列表时,NameNode决定在访问之前同时迁移这三个位置。我不知道那里会发生什么。在使用Hadoop的5年中,我从来没有遇到过这样的问题。即使在工作的同时运行平衡器

    Hadoop在支持HBase时保持相同的读取策略

    HDFS对HBase没有特殊处理。有人说u可以获得更好的数据局部性,但这是不可能的