Hadoop Ha namenode java客户端

d12*_*123 6 hadoop high-availability hdfs

我是hdfs的新手.我正在编写可以连接数据并将数据写入远程hadoop集群的Java客户端.

String hdfsUrl = "hdfs://xxx.xxx.xxx.xxx:8020";
FileSystem fs = FileSystem.get(hdfsUrl , conf);
Run Code Online (Sandbox Code Playgroud)

这很好用.我的问题是如何处理启用HA的hadoop集群.启用HA的hadoop群集将具有两个名称节点 - 一个活动的名称节点和备用名称节点.如何在运行时从客户端代码中识别活动的名称节点.

http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.1/bk_system-admin-guide/content/ch_hadoop-ha-3-1.html有关于可用于联系的java类的以下详细信息活动名称节点dfs.client.failover.proxy.provider.[$ nameservice ID]:

This property specifies the Java class that HDFS clients use to contact the Active NameNode. DFS     Client uses this Java class to determine which NameNode is the current Active and therefore which NameNode is currently serving client requests.

Use the ConfiguredFailoverProxyProvider implementation if you are not using a custom implementation.
Run Code Online (Sandbox Code Playgroud)

例如:

<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)

我如何在我的Java客户端中使用此类,或者是否有任何其他方法来识别活动的名称节点...

dum*_*tru 0

不确定它是否是相同的上下文,但给定一个 hadoop 集群,应该将 core-site.xml(从集群中获取)放入应用程序类路径或 hadoop 配置对象中,(org.apache.hadoop.conf.Configuration)然后使用 URL 访问该文件,"hdfs://mycluster/path/to/file"其中mycluster是该文件的名称hadoop集群。像这样我已经成功地从 Spark 应用程序中的 hadoop 集群读取文件。