【发布时间】:2020-07-26 23:19:03
【问题描述】:
在 HDFS 中,每次读取和写入都必须通过 NameNode 来获取有关数据存储位置的 metaDate。这样的系统如何扩展? NameNode会不会成为整个系统的瓶颈?
【问题讨论】:
标签: hdfs
在 HDFS 中,每次读取和写入都必须通过 NameNode 来获取有关数据存储位置的 metaDate。这样的系统如何扩展? NameNode会不会成为整个系统的瓶颈?
【问题讨论】:
标签: hdfs
Namenode 确实会成为瓶颈,但并不像看起来那么容易。 Namenode持有元数据,一旦客户端说读取从Namenode获取块位置,它不需要去namenode读取,它会直接连接到datanode读取,无需NN干预。 至于写入,客户端确实先去 Namenode 在 Namespace 树中创建一个条目,然后获取数据节点写入数据的位置,一旦它有了数据节点位置,它将只与数据节点对话,它会返回仅当它需要另一个块时才到 Namenode。因此,在大多数情况下,客户端只会使用 datanodes,它会在非常短的时间内转到 Namenode。
Namenode 上的读取调用(比如获取块位置)都是并行处理的,只有写入调用没有并行处理(例如获取要写入的新块)。在正常制作中,读取负载通常在 60:40 左右,因此可以很好地扩展和运行。
在最近添加的Namenode中多了一类叫做Observer Namenode,可以服务所有的Read请求,集群中可以有N个Observer Namenode...
如果你想了解 Observer Namenodes,可以在这里阅读: https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/ObserverNameNode.html
【讨论】: