2014-09-12 1 views
2

Hadoop 작업이 있고 출력 폴더의 복제 번호를 1로 설정하고 자바 코드 내부에서이 작업을 수행하려고합니다. 서버의 기본값은 3입니다. 다른 가져 오기 기능은 출력이 작성되기 전에 복제 번호를 설정하는 것입니다. 내가 3 개의 복제본으로 전체 출력을 작성한 다음 1로만 줄이고 싶다는 의미입니다. 출력 폴더에 쓰기를 시작하기 전에 복제가 하나만 있도록 설정해야합니다. 그 이유는 출력이 상당히 클 수 있으며 여유 공간을 확보하기 위해서입니다.실행 전에 Java 코드에서 Hadoop 출력 폴더 복제 설정

@Override 
public int run(String[] args) throws Exception { 

    /** Get configuration */ 
    Configuration conf = getConf(); 
    conf.setStrings("args", args); 

    /** Job configuration */ 
    Job job = Job.getInstance(conf, "HadoopSearch"); 
    job.setJarByClass(Search.class); 
    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(NullWritable.class); 

    /** Set Mapper and Reducer, use identity reducer*/ 
    job.setMapperClass(Map.class); 
    job.setReducerClass(Reducer.class); // identity 

    /** Set input and output formats */ 
    job.setInputFormatClass(TextInputFormat.class); 
    job.setOutputFormatClass(TextOutputFormat.class); 

    /** Set input and output path */ 
    FileInputFormat.addInputPath(job, new Path("IN PATH")); 
    FileOutputFormat.setOutputPath(job, new Path("OUT PATH")); 

    job.waitForCompletion(true); 
    return 0; 
} 

은 내가 파일 당이 사용 FileSystem.setReplication(Path p, short s) 그러나 이것은 단지 작품을 설정할 수 있다는 사실을 알고 난이 전체 폴더를 설정합니다. 폴더 안의 파일을 반복 할 수는 있지만 더 중요한 것은 작업이 완료되고 파일이 이미 exsists 된 후에 만 ​​작동하는 것 같습니다. 내가 가정했듯이 복제 프로세스가 이미 실행 중이므로 피해야하는 디스크 공간의 문제를 해결할 수 있습니다.

답변

1

Mapreduce에서는 설정된 작업 구성을 사용하여 dfs.replication 속성을 설정하여 해당 작업 내에서 생성 된 파일에 지정된 복제 계수가 적용되도록 할 수 있습니다. 희망이 도움이 될 것입니다.

Configuration conf = new Configuration(); 
    conf.set("dfs.replication", "1"); 
    Job job = new Job(conf);