Каков порядок загрузки файлов конфигурации в hadoop? - PullRequest
3 голосов
/ 01 ноября 2011

Я использую следующую программу для переименования каталога, но я получил исключение, которое, похоже, предполагает, что я использую локальную файловую систему.На самом деле, в моем core-site.xml я уже установил fs.default.name в hdfs вместо локальной файловой системы.Итак, я хочу знать порядок загрузки файлов конфигурации и почему он думает, что я использую локальную файловую систему.Как это исправить?спасибо

`

<configuration>
<property>
 <name>fs.default.name</name>
 <value>hdfs://xiliu:54310</value>
  <final>true</final>`
</property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>/data1/hadoop/hdfs/tmp</value>
  <final>true</final>
 </property>
</configuration>





public class FSUtil extends Configured
{
  private static Configuration conf;

  static
  {
    conf = new Configuration( );
  }

public static void rename( Path srcPath, Path tgtPath)
    throws IOException
  {
    FileSystem fs = FileSystem.get( conf);
    fs.rename( srcPath, tgtPath);
  }


 public static void main(String[]args){
try {
FSUtil.rename(new Path("hdfs://xiliu:54310/user/warehouse/test"), new Path("hdfs://xiliu:54310/user/warehouse/testtmp"));

} catch (IOException e) {
        e.printStackTrace();
    }
  }
}




Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs://xiliu:54310/user/warehouse/test, expected: file:///
    at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:354)
    at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:54)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:367)
    at org.apache.hadoop.fs.FileSystem.isDirectory(FileSystem.java:702)
    at org.apache.hadoop.fs.ChecksumFileSystem.rename(ChecksumFileSystem.java:402)
    at com.business.cloudbase.hadoop.fs.FSUtil.rename(FSUtil.java:251)
    at com.business.cloudbase.hadoop.fs.FSUtil.main(FSUtil.java:602)

1 Ответ

3 голосов
/ 03 ноября 2011

Похоже, что файлы конфигурации не находятся в пути к классам, а для параметра fs.default.name по умолчанию задано file: ///.

Два варианта

  1. Поместите файлы конфигурации в путь к классу, чтобы код выбрал его.

  2. Используйте Configuration.set () для установки необходимых параметров в коде.

...