1

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

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

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

我们将有两个主节点,一个是活动的,另一个是备用的

如果我们也将集群配置为由名称服务调用,那么以下场景就可以了

情况是:

1- nn1 处于活动状态,而 nn2 处于待机状态

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

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

2- nn1 中的名称节点守护程序被杀死,因此根据高可用性,nn1 处于待机状态,而 nn2 处于活动状态,因此我们现在可以通过向 nn2 发送此 Web 请求来获取 myfile,因为它现在处于活动状态

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

因此配置具有高可用性的名称服务足以解决名称节点故障并让 webhdfs 正常工作

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

4

1 回答 1

1

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

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

添加httpfs有什么好处

无论哪个 NN 处于活动状态,您的 REST API 调用都将保持不变。HttpFs,在了解 HA 的情况下,会将请求定向到当前的 Active NN。

让我们假设HttpFs服务器在nn1.

WebHDFS GET请求

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

这是由运行在nn1.
场景 1: nn1处于活动状态。该请求将获得有效响应。
场景 2: nn2处于活动状态。发出相同的请求将失败,因为没有 Active NN 在运行nn1

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

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

现在,这将由运行在nn2.

HttpFs GET请求

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

此请求由HttpFs运行在nn1.
场景 1: nn1处于活动状态。HttpFs运行的服务器nn1会将请求定向到当前的 Active Namenode nn1
场景 2: nn2处于活动状态。HttpFs运行的服务器nn1会将请求定向到当前的 Active Namenode nn2

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

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

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

于 2017-04-12T09:03:46.463 回答