HttpFs 受益于高可用性和名称服务

HttpFs benefit over high availability and nameservice

我在由三个节点组成的集群上使用 Apache Hadoop-2.7.1

nn1 master name node 
nn2 (second name node)   
dn1 (data node)

我们知道如果我们在这个集群中配置高可用性

我们会有两个主节点,一个主用,一个备用

并且如果我们也将集群配置为由名称服务调用,则以下情况就可以了

场景是:

1- nn1 处于活动状态,nn2 处于备用状态

所以如果我们想从 dn1 获取文件(称为 myfile),我们可以从浏览器(webhdfs 请求)发送这个 url

http://nn1/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN

2- nn1 中的名称节点守护进程被终止,因此根据高可用性,nn1 处于备用状态,而 nn2 处于活动状态 所以我们现在可以通过将此 Web 请求发送到 nn2 来获取 myfile,因为它现在处于活动状态

http://nn2/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN

因此配置具有高可用性的名称服务足以应对名称节点故障和 webhdfs 正常工作

那么这里添加httpfs有什么好处 因为不支持高可用性的webhdfs,我们必须配置 httpfs

我知道这是对你之前的问题 的跟进。

WebHDFSHttpFs 是两个不同的东西。 WebHDFS 是 Namenode 的一部分,它是处理 WebHDFS API 调用的 NN,而 HttpFs 是一个单独的独立于名称节点的服务,HttpFs 服务器处理 API 调用。

what is the benefit of adding httpfs

无论哪个 NN 处于活动状态,您的 REST API 调用都将保持不变。 HttpFs,作为 HA 感知,会将请求定向到当前活动的 NN。

让我们假设 HttpFs 服务器在 nn1 中启动。

WebHDFSGET请求

curl http://nn1:50070/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN

这由 nn1 中的 Namenode 守护进程 运行 提供服务。
场景 1: nn1 处于活动状态。该请求将得到有效响应作为奖励。
场景 2: nn2 处于活动状态。由于 nn1 中没有 Active NN 运行,因此发出相同的请求将失败。

因此,必须修改 REST 调用以请求 nn2

curl http://nn2:50070/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN

现在,这将由 nn2 中的 NN 守护进程 运行 提供服务。

HttpFsGET请求

curl http://nn1:14000/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN

此请求由 nn1 中的 HttpFs 服务 运行 提供服务。
场景 1: nn1 处于活动状态。 HttpFs nn1 中的服务器 运行 会将请求定向到当前的活动名称节点 nn1
场景 2: nn2 处于活动状态。 HttpFs nn1 中的服务器 运行 会将请求定向到当前的活动名称节点 nn2

在这两种情况下,REST 调用是相同的。如果 HttpFs 服务器关闭,请求将失败。

configuring name service with high availability is enough for name node failure and for webhdfs to work fine

nameservice 是给Namenode对的逻辑名称。此 nameservice 不是实际主机,不能用 REST API 调用中的主机参数替换。