httpfs优于高可用性和名称服务

zu0ti5jz  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(540)

我在由三个节点组成的集群上使用apachehadoop-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
nn1中的2-name节点守护进程被终止,因此根据高可用性,nn1处于备用状态,而nn2处于活动状态,因此我们可以通过将此web请求发送到nn2来获取myfile,因为它现在处于活动状态
http://nn2/webhdfs/v1/hadoophome/myfile/?user.name=root&op=open
因此,配置具有高可用性的名称服务就足够让名称节点失败,让webhdfs正常工作
那么在这里添加httpfs有什么好处呢?因为不支持高可用性的webhdfs,我们必须配置httpfs

fiei3ece

fiei3ece1#

我知道这是你之前问题的后续。 WebHDFS 以及 HttpFs 是两件不同的事。webhdfs是namenode的一部分,它是处理 WebHDFS api调用,而httpfs是独立于namenodes和 HttpFs 服务器处理api调用。
添加httpfs有什么好处
不管哪个nn处于活动状态,restapi调用都将保持不变。 HttpFs 具有ha感知,将请求定向到当前活动nn。
让我们假设 HttpFs 服务器在中启动 nn1 .
webhdfs GET 请求

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

这由运行在中的namenode守护程序提供服务 nn1 .
场景1: nn1 已激活。请求将得到有效响应。
场景2: nn2 已激活。发出相同的请求将失败,因为没有正在运行的活动nn nn1 .
因此,必须修改rest调用以请求 nn2 ```
curl http://nn2:50070/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN

现在,这将由运行中的nn守护进程提供服务 `nn2` .
httpfs公司 `GET` 请求

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

此请求由 `HttpFs` 服务试运行 `nn1` .
场景1: `nn1` 已激活。 `HttpFs` 服务器正在运行 `nn1` 将请求定向到当前活动的namenode `nn1` .
场景2: `nn2` 已激活。 `HttpFs` 服务器正在运行 `nn1` 将请求定向到当前活动的namenode `nn2` .
在这两种情况下,rest调用是相同的。如果 `HttpFs` 服务器已关闭。
配置具有高可用性的名称服务就足够让名称节点失败,让webhdfs正常工作 `nameservice` 为namenodes对指定的逻辑名称。这个 `nameservice` 不是实际主机,不能在rest api调用中用主机参数替换。

相关问题