4

我需要阅读 hdfs 中可用的 .properties 文件。我正在使用下面的代码,但它会引发运行时错误。

FileSystem fs = FileSystem.get(config);

    Properties conf = wc.createConfiguration();
    Properties prop = new Properties();
    String appPath = "hdfs://clusterdb05.com:8020/user/cmahajan/" + version + "/apps/apps/";
    conf.setProperty(OozieClient.APP_PATH,appPath);
    FileInputStream f = new FileInputStream("hdfs://clusterdb05.com:8020/user/cmahajan/app.properties");
    ObjectInputStream f = new ObjectInputStream(fs.open(new Path("/user/cmahajan/app.properties")));

运行时错误是:

LaunchJob.java:28: cannot find symbol

symbol  : class ObjectInputStream
location: class LaunchJob
    ObjectInputStream f = new ObjectInputStream(fs.open(new Path("/user/cmahajan/app.properties")));
    ^
LaunchJob.java:28: cannot find symbol
symbol  : class ObjectInputStream
location: class LaunchJob
    ObjectInputStream f = new ObjectInputStream(fs.open(new Path("/user/cmahajan/app.properties")));
4

2 回答 2

2

从 hdfs 加载属性文件:

  1. 确保你的 core-site.xmlhdfs-site xml文件路径
  2. hdfs 端口号(它将在core-site.xml中可用)
  3. 替换getProperty中的键。

           String CURRENCIES_DIM1 = null;
           String DATES_DIM2 = null; 
           Configuration conf = new Configuration();
            conf.addResource(new Path("/usr/local/hadoop/etc/hadoop/core-site.xml"));
            conf.addResource(new Path("/usr/local/hadoop/etc/hadoop/hdfs-site.xml"));
            String filePath = "hdfs://localhost:54310/user/CurrencyCache.properties";
            Path path = new Path(filePath);
            FileSystem fs = path.getFileSystem(conf);
            try (FSDataInputStream currencyInputStream = fs.open(path)) {
                Properties currencyProp = new Properties();
                currencyProp.load(currencyInputStream);
                CURRENCIES_DIM1= currencyProp.getProperty("key");//getting the 'CURRENCIES_DIM' file path from properties file
                DATES_DIM2= currencyProp.getProperty("key");            //getting the 'DATES_DIM' file path from properties file
    
            } catch (IOException e) {
    
                e.printStackTrace();
            }
            fs.close();
    
于 2015-05-27T12:08:47.073 回答
0

使用类的完全限定名称:

java.io.ObjectInputStream 

或者

使用以下行导入类:

import java.io.ObjectInputStream;
于 2012-10-17T11:26:34.353 回答