10

我正在研究 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

从我的浏览器中,会出现一个打开或保存此文件的对话框,但是当我终止在 nn1 上运行的名称节点并正常重新启动它时,由于高可用性,nn1 变为待机状态,而 nn2 变为活动状态。

所以这里 httpfs 应该可以工作,即使 nn1 成为待机,但现在发送相同的请求

http://nn1:14000/webhdfs/v1/aloosh/oula.txt?op=open&user.name=root

给我错误

{"RemoteException":{"message":"Operation category READ is not supported in state standby","exception":"RemoteException","javaClassName":"org.apache.hadoop.ipc.RemoteException"}}

httpfs不应该克服nn1待机状态并带文件吗?是因为配置错误,还是有其他原因?

core-site.xml的是

<property>
       <name>hadoop.proxyuser.root.hosts</name>
                <value>*</value>
       </property>

        <property>
                <name>hadoop.proxyuser.root.groups</name>
                <value>*</value>
        </property>
4

1 回答 1

10

看起来HttpFs还没有高可用性意识。这可能是由于缺少客户端连接当前活动 Namenode 所需的配置。

确保fs.defaultFS属性 incore-site.xml配置了正确的nameservice ID.

如果您有以下内容hdfs-site.xml

<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>

那么在 中core-site.xml,应该是

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>

还要配置 DFS 客户端将使用的 Java 类的名称,以确定哪个 NameNode 当前是活动的并且正在服务客户端请求。

将此属性添加到hdfs-site.xml

<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>            
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

在所有节点中添加属性后,重新启动 Namenodes 和 HttpFs。

于 2017-04-11T18:51:29.337 回答