Hadoop权威指南说 -
每个Namenode都运行一个轻量级故障转移控制器进程,其工作是监视其Namenode的故障(使用简单的心跳机制),并在namenode失败时触发故障转移.
为什么namenode可以运行某些东西来检测自己的失败?
谁向谁发送心跳?
这个过程在哪里运行?
它如何检测namenode失败?
它向谁通知过渡?
阅读Apache Hadoop文档后,了解辅助节点和检查点节点的职责存在一些小问题
我很清楚Namenode的角色和职责:
- NameNode将对文件系统的修改存储为附加到本机文件系统文件的日志进行编辑.当NameNode启动时,它从图像文件fsimage读取HDFS状态,然后从编辑日志文件中应用编辑.然后它将新的HDFS状态写入fsimage并使用空的编辑文件开始正常操作.由于NameNode仅在启动期间合并fsimage和编辑文件,因此编辑日志文件可能会在繁忙的群集上随着时间的推移而变得非常大.较大的编辑文件的另一个副作用是下次重新启动NameNode需要更长的时间.
但是在理解辅助名称节点和检查点名称节点职责方面我有一点困惑.
Secondary NameNode:
- 辅助NameNode定期合并fsimage和编辑日志文件,并使编辑日志大小保持在限制范围内.它通常在与主NameNode不同的机器上运行,因为它的内存要求与主NameNode的顺序相同.
检查点节点:
- Checkpoint节点定期创建命名空间的检查点.它从活动的NameNode下载fsimage和编辑,在本地合并它们,并将新映像上传回活动的NameNode.Checkpoint节点通常在与NameNode不同的机器上运行,因为它的内存要求与NameNode的顺序相同.Checkpoint节点由配置文件中指定的节点上的bin/hdfs namenode -checkpoint启动.
似乎辅助namenode和Checkpoint节点之间的责任不明确.两者都在进行编辑.那么谁最终会修改?
另外,我在jira中创建了两个错误,以消除理解这些概念的模糊性.
issues.apache.org/jira/browse/HDFS-8913
issues.apache.org/jira/browse/HDFS-8914
Run Code Online (Sandbox Code Playgroud) 我有一个关于文件写入和HDFS读取的基本问题.
例如,如果我使用默认配置编写文件,Hadoop内部必须将每个块写入3个数据节点.我的理解是,对于每个块,首先客户端将块写入管道中的第一个数据节点,然后通知第二个,依此类推.一旦第三个数据节点成功接收到块,它就会向数据节点2提供确认,最后通过数据节点1向客户端提供确认.只有在收到块的确认后,才认为写入成功,客户端继续写入下一个街区.
如果是这种情况,那么编写每个块所花费的时间不会超过传统的文件写入,因为 -
如果我的理解错了,请纠正我.另外,以下问题如下:
我有一个关于hadoop数据写入的小查询
来自Apache文档
对于常见情况,当复制因子为3时,HDFS的放置策略是将一个副本放在本地机架中的一个节点上,另一个放在另一个(远程)机架中的节点上,而最后一个放在同一节点上的另一个节点上远程机架.此策略可以减少机架间写入流量,从而提高写入性能.机架故障的可能性远小于节点故障的可能性;
在下面的图像中,写入确认被视为成功?
1)将数据写入第一个数据节点?
2)将数据写入第一个数据节点+2个其他数据节点?
我问这个问题因为,我在youtube视频中听到了两个相互矛盾的陈述.一个视频引用一旦数据写入一个数据节点就写入成功,而其他视频引用只有在将数据写入所有三个节点后才会发送确认.