我在由三个节点组成的集群上使用Apache 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
nn1中的2名节点守护进程被杀死,因此根据高可用性,nn1是备用的,nn2是活动的,所以我们现在可以通过将这个web请求发送给nn2来获取它,因为它现在是活动的。
http://nn2/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN
因此,配置高可用性的名称服务就足以解决名称节点故障,并使webhdfs能够很好地工作。
所以在这里添加httpfs有什么好处,因为不支持高可用性的webhdfs,我们必须配置httpfs。
发布于 2017-04-12 09:03:46
据我所知,这是你之前的问题here的后续。
WebHDFS和HttpFs是两种不同的东西。WebHDFS是Namenode的一部分,处理WebHDFS API调用的是NN,而HttpFs是一个独立于Namenodes的独立服务,HttpFs服务器处理WebHDFS调用。
添加httpfs的好处是什么?
无论哪个NN处于活动状态,REST调用都将保持不变。HttpFs注意到HA,将请求定向到当前的活动NN。
假设HttpFs服务器是在nn1中启动的。
WebHDFS GET请求
curl http://nn1:50070/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN这是由在nn1中运行的Namenode守护进程提供的。
场景1: nn1处于活动状态。该请求将得到有效的答复。
场景2: nn2处于活动状态。发出相同的请求将失败,因为在nn1中没有运行活动NN。
因此,必须修改REST调用以请求nn2
curl http://nn2:50070/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN现在,这将由在nn2中运行的NN守护进程提供。
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。
在这两种情况下,其余调用都是相同的。如果HttpFs服务器关机,请求将失败。
配置高可用性的名称服务足以导致名称节点失败,并使webhdfs能够正常工作。
nameservice是给这对Namenodes命名的逻辑名称。此nameservice不是实际的主机,不能在REST调用中用Host参数替换。
https://stackoverflow.com/questions/43363683
复制相似问题