복붙노트

[HADOOP] Hadoop : MapReduce 작업에 입력으로 디렉토리 제공

HADOOP

Hadoop : MapReduce 작업에 입력으로 디렉토리 제공

나는 Cloudera Hadoop을 사용하고 있습니다. MapReduce 프로그램에 입력으로 파일을 제공하는 간단한 mapreduce 프로그램을 실행할 수 있습니다.

이 파일에는 매퍼 함수로 처리 할 다른 모든 파일이 들어 있습니다.

하지만, 나는 한 지점에 머물러있다.

/folder1
  - file1.txt
  - file2.txt
  - file3.txt

MapReduce 프로그램의 입력 경로를 "/ folder1"로 지정하면 해당 디렉토리 내의 각 파일을 처리 할 수 ​​있습니다.

어떤 아이디어?

편집하다 :

1) intiailly, inputfile.txt를 mapreduce 프로그램의 입력으로 제공했습니다. 그것은 완벽하게 작동하고있었습니다.

>inputFile.txt
file1.txt
file2.txt
file3.txt

2)하지만 이제는 입력 파일을주는 대신 명령 줄에서 arg [0]과 같은 입력 디렉토리를 제공하려고합니다.

hadoop jar ABC.jar /folder1 /output

해결법

  1. ==============================

    1.문제는 FileInputFormat이 입력 경로 dir에서 파일을 반복적으로 읽지 않는다는 것입니다.

    문제는 FileInputFormat이 입력 경로 dir에서 파일을 반복적으로 읽지 않는다는 것입니다.

    솔루션 : 다음 코드 사용

    FileInputFormat.setInputDirRecursive (job, true); 지도 줄 아래에있는 코드 줄이기 전에

    FileInputFormat.addInputPath (job, newPath (args [0]));

    여기에서 수정 된 버전을 확인할 수 있습니다.

  2. ==============================

    2.FileSystem.listStatus를 사용하여 지정된 dir에서 파일 목록을 가져올 수 있습니다. 코드는 다음과 같습니다.

    FileSystem.listStatus를 사용하여 지정된 dir에서 파일 목록을 가져올 수 있습니다. 코드는 다음과 같습니다.

    //get the FileSystem, you will need to initialize it properly
    FileSystem fs= FileSystem.get(conf); 
    //get the FileStatus list from given dir
    FileStatus[] status_list = fs.listStatus(new Path(args[0]));
    if(status_list != null){
        for(FileStatus status : status_list){
            //add each file to the list of inputs for the map-reduce job
            FileInputFormat.addInputPath(conf, status.getPath());
        }
    }
    
  3. ==============================

    3.여러 개의 파일을 제공하기 위해 hdfs 와일드 카드를 사용할 수 있습니다.

    여러 개의 파일을 제공하기 위해 hdfs 와일드 카드를 사용할 수 있습니다.

    그래서, 해결책 :

    hadoop jar ABC.jar /folder1/* /output
    

    또는

    hadoop jar ABC.jar /folder1/*.txt /output
    
  4. ==============================

    4.MultipleInputs 클래스를 사용하십시오.

    MultipleInputs 클래스를 사용하십시오.

    MultipleInputs. addInputPath(Job job, Path path, Class<? extends InputFormat> 
    inputFormatClass, Class<? extends Mapper> mapperClass)
    

    작업 코드 살펴보기

  5. from https://stackoverflow.com/questions/20094366/hadoop-provide-directory-as-input-to-mapreduce-job by cc-by-sa and MIT license