HDFS Java文件系统API:创建Configuration对象

4

我正在尝试创建一个Java程序来读写HDFS文件。

我看了一些Java API的示例。使用以下代码,我成功地实现了它。

Configuration mConfiguration = new Configuration();
mConfiguration.set(“fs.default.name”, “hdfs://NAME_NODE_IP:9000″);

但是我的设置必须更改为Hadoop HA设置,因此无法使用硬编码的namenode地址。

我看到了一些例子,其中我们提供配置xml文件的路径,如下所示。

mConfiguration.addResource(new Path(“/usr/local/hadoop/etc/hadoop/core-site.xml”));
mConfiguration.addResource(new Path(“/usr/local/hadoop/etc/hadoop/hdfs-site.xml”));

当应用程序在与hadoop相同的系统上运行时,此代码也起作用。

但是,当我的应用程序不在与hadoop相同的机器上运行时,它将无法正常工作。

因此,我应该采取哪种方法,使系统可以工作,但不进行直接的namenode寻址。

任何帮助都会受到赞赏。

1个回答

4

在使用Hadoop高可用性概念时,您需要在配置对象中设置以下属性:

Configuration conf = new Configuration(false);
conf.set("fs.defaultFS", "hdfs://nameservice1");
conf.set("fs.default.name", conf.get("fs.defaultFS"));
conf.set("dfs.nameservices","nameservice1");
conf.set("dfs.ha.namenodes.nameservice1", "namenode1,namenode2");
conf.set("dfs.namenode.rpc-address.nameservice1.namenode1","hadoopnamenode01:8020");
conf.set("dfs.namenode.rpc-address.nameservice1.namenode2", "hadoopnamenode02:8020");
conf.set("dfs.client.failover.proxy.provider.nameservice1","org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");

试试吧!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接