我试图创建一个java程序来从HDFS写入/读取文件。
我看到了一些Java API的例子。有了这个,下面的代码对我有用。
Configuration mConfiguration = new Configuration();
mConfiguration.set(“fs.default.name”, “hdfs://NAME_NODE_IP:9000″);
但我的设置必须针对Hadoop HA设置进行更改,因此无法进行硬编码的namenode寻址。
我看到了一些例子,其中我们提供了如下配置xmls的路径。
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相同的m / c运行时,它就无法工作。
那么,我应该采取什么方法来使系统正常工作,但是没有直接进行名称节点寻址。
任何帮助都将不胜感激。
答案 0 :(得分:3)
在使用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");
尝试一下!