我在由三个节点组成的集群上使用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
http://nn2/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN
因此,配置具有高可用性的名称服务足以使名称节点失败,并且webhdfs可以正常工作
那么在这里添加httpfs有什么好处 因为不支持具有高可用性的webhdfs,我们必须进行配置 httpfs
答案 0 :(得分:1)
我了解这是对您上一个问题的跟进here。
WebHDFS
和 HttpFs
是两回事。 WebHDFS 是Namenode的一部分,它是处理WebHDFS
API调用的NN,而 HttpF 是独立于Namenodes和{{1}的独立服务服务器处理API调用。
添加httpfs
有什么好处
无论哪个NN处于活动状态,您的REST API调用都将保持不变。知道HA的HttpFs
会将请求定向到当前的活动NN。
我们假设HttpFs
服务器已在HttpFs
启动。
WebHDFS nn1
请求
GET
这是由curl http://nn1:50070/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN
中运行的Namenode守护程序提供的。
场景1: nn1
处于有效状态。该请求将得到有效的回复。
方案2: nn1
处于有效状态。由于nn2
中没有运行Active NN,因此发出相同的请求将失败。
因此,必须修改REST调用以请求nn1
nn2
现在,这将由curl http://nn2:50070/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN
中运行的NN守护程序提供。
HttpFs nn2
请求
GET
此请求由curl http://nn1:14000/webhdfs/v1/hadoophome/myfile/?user.name=root&op=OPEN
中运行的HttpFs
服务提供
场景1: nn1
处于有效状态。 nn1
中运行的HttpFs
服务器会将请求定向到当前的活动名称节点nn1
。
方案2: nn1
处于有效状态。 nn2
中运行的HttpFs
服务器会将请求定向到当前的活动名称节点nn1
。
在这两种情况下,REST调用都是相同的。如果nn2
服务器关闭,请求将失败。
配置具有高可用性的名称服务对于名称来说已足够 节点故障和webhdfs正常工作
HttpFs
是赋予Namenodes对的逻辑名称。此nameservice
不是实际的主机,不能用REST API调用中的Host参数替换。