gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 14:47:12 28 4
gpt4 key购买 nike

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

这就是我对读取操作的高级步骤的理解。

  1. 客户端连接到 NameNode 以获取 DataNode 列表,其中包含他感兴趣的行的副本。
  2. 从这里客户端缓存 DataNode 列表并开始直接与选定的 DataNode 对话,直到它需要来自其他 DataNode 的一些其他行,在这种情况下它再次询问 NameNode。

我的问题如下:

  1. 谁选择最好的副本 DataNode 联系?客户如何选择“最近”的副本? NameNode 是否按排序顺序返回相关 DataNode 的列表?
  2. 当 Client 切换到另一个已请求行的 DataNode 时,会出现哪些情况(如果有)?例如,如果其中一个 DataNode 变得过载/变慢,客户端库能否从 NameNode 返回的列表中找出联系另一个 DataNode?
  3. 是否有可能从其中一个副本获取过时数据?例如,客户端获取了 DataNodes 列表并开始从其中一个读取。与此同时,另一个客户端向 NameNode 发送了一个写请求。我们有 dfs.replication == 3 和 dfs.replication.min = 2。NameNode 在 3 个节点中的 2 个刷新到磁盘后认为写入成功,而第一个客户端正在从第 3 个节点读取并且(还)不知道还有另一个写入已提交?
  4. Hadoop 在支持 HBase 时保持相同的读取策略?

谢谢

最佳答案

Who chooses the best replica DataNode to contact? How Client chooses "closest" replica? Does NameNode return list of relative DataNodes in a sorted order ?

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

  1. 文件在同一台机器上。在这种情况下(如果配置正确)它将短路 DataNode 并作为优化直接转到文件。
  2. 文件在同一个机架中(如果配置了机架感知)。
  3. 文件在别处。

What are the scenarios(if any) when Client switches to another DataNode that has requested rows? For example if one of the DataNode becomes overloaded/slow can the client library figure out to contact another DataNode from the list returned by the NameNode?

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

Is there a possibility of getting stale data from one of the replicas? For example client acquired list of DataNodes and starts reading from one of them. In the mean time there is a write request coming from another client to NameNode. We have dfs.replication == 3 and dfs.replication.min = 2. NameNode consider write successful after flushing to disk on 2 out of 3 nodes, while first client is reading from the 3rd node and doesn't know (yet) that there is another write that has been committed ?

陈旧数据是可能的,但不是在您描述的情况下。文件是一次写入且不可变的(除了追加,但如果不需要则不要追加)。在文件完全写入之前,NameNode 不会告诉您文件在那里。在追加的情况下,那你真可耻。从本地文件系统上主动附加到文件中读取的行为也是不可预测的。您应该期望在 HDFS 中也有同样的情况。

可能发生陈旧数据的一种方式是,如果您检索 block 位置列表,并且 NameNode 决定在您访问它之前一次迁移所有三个。我不知道那里会发生什么。在使用 Hadoop 的 5 年里,我从来没有遇到过这个问题。即使在做事情的同时运行平衡器。

Hadoop maintains the same reading policy when supporting HBase?

HBase 没有被 HDFS 特殊对待。有人在谈论你 sing a custom block placement strategy with HBase以获得更好的数据局部性,但这是杂草。

关于hadoop - hadoop上的读操作和一致性级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24931429/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com