在Java util中获取hadoop配置

时间:2015-07-22 15:46:04

标签: hadoop hdfs

我正在编写需要访问DFS的Java实用程序,因此我需要一个Configuration对象。 当我简单地使用

创建一个

Configuration conf = new Configuration()

它似乎找不到DFS,只使用本地文件系统;打印

fs.getHomeDirectory()

给出我的本地主目录。我试过添加 core-site.xml,mapred-site.xml,yarn-site.xml和hdfs-site.xml作为资源配置,但它不会改变任何东西。我需要做些什么来获取HDFS设置?

感谢您阅读

2 个答案:

答案 0 :(得分:17)

它指向您的本地文件系统的原因是core-site.xml并且hdfs-site.xml未正确添加。下面的代码片段可以帮助您。

Configuration conf = new Configuration();
conf.addResource(new Path("file:///etc/hadoop/conf/core-site.xml")); // Replace with actual path
conf.addResource(new Path("file:///etc/hadoop/conf/hdfs-site.xml")); // Replace with actual path

Path pt = new Path("."); // HDFS Path
FileSystem fs = pt.getFileSystem(conf);

System.out.println("Home directory :"+fs.getHomeDirectory());

更新:

上面的选项应该有效,似乎配置文件或路径中存在一些问题。您有另一个选项,而不是使用addResource方法添加配置文件,使用set方法。打开core-site.xml文件,找到fs.defaultFS的值。使用set方法而不是addResource方法。

conf.set("fs.defaultFS","hdfs://<Namenode-Host>:<Port>");  // Refer you core-site.xml file and replace <Namenode-Host> and <Port> with your cluster namenode and Port (default port number should be `8020`). 

答案 1 :(得分:4)

要访问文件系统,您必须使用配置和文件系统,如下所述

  1. 获取配置实例
  2. 获取HDFS实例

    Configuration configuration = new Configuration();
    
    FileSystem hdfs = FileSystem.get(new URI("hdfs://"+HadoopLocation+":8020"), configuration);
    
  3. 在这种情况下,HadoopLocation是您拥有hadoop服务器的位置(可能是Localhost)