我正在研究hadoop apache 2.7.1,我有一个由3个节点组成的集群
nn1
nn2
dn1
nn1是dfs.default.name,因此它是主名称节点.
我已经安装了httpfs并在重启所有服务后启动了它.当nn1处于活动状态且nn2处于待机状态时,我可以发送此请求
http://nn1:14000/webhdfs/v1/aloosh/oula.txt?op=open&user.name=root
Run Code Online (Sandbox Code Playgroud)
从我的浏览器和打开或保存此文件的对话框出现,但当我杀死在nn1上运行的名称节点并正常启动它然后由于高可用性nn1变为待机状态并且nn2变为活动状态.
所以这里httpfs应该工作,即使nn1变得待命,但现在发送相同的请求
http://nn1:14000/webhdfs/v1/aloosh/oula.txt?op=open&user.name=root
Run Code Online (Sandbox Code Playgroud)
给了我错误
{"RemoteException":{"message":"Operation category READ is not supported in state standby","exception":"RemoteException","javaClassName":"org.apache.hadoop.ipc.RemoteException"}}
Run Code Online (Sandbox Code Playgroud)
httpfs不应该克服nn1待机状态并带上文件吗?是因为配置错误,还是有其他原因?
我的核心网站是
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
Run Code Online (Sandbox Code Playgroud)
它看起来HttpFs
还不是高可用性.这可能是由于客户端与当前活动名称节点连接所需的配置缺失.
确保fs.defaultFS
属性core-site.xml
配置正确nameservice ID
.
如果您有以下内容 hdfs-site.xml
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
Run Code Online (Sandbox Code Playgroud)
那么core-site.xml
,它应该是
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
Run Code Online (Sandbox Code Playgroud)
还要配置Java类的名称,DFS客户端将使用该名称来确定哪个NameNode是当前活动的并且正在为客户端请求提供服务.
将此属性添加到 hdfs-site.xml
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
Run Code Online (Sandbox Code Playgroud)
在所有节点中添加属性后重新启动Namenodes和HttpF.
归档时间: |
|
查看次数: |
16006 次 |
最近记录: |