복붙노트

[HADOOP] MapReduce는 여러 입력 파일을 어떻게 읽습니까?

HADOOP

MapReduce는 여러 입력 파일을 어떻게 읽습니까?

mapreduce를 사용하여 데이터를 읽고 HDFS에 코드를 작성하는 코드를 개발 중입니다. 그러나 여러 파일이있을 때 어떻게 처리되는지 이해할 수 없습니다. mapper에 대한 입력 경로는 다음과 같은 출처에서 볼 수있는 디렉토리 이름입니다.

String filename = conf1.get("map.input.file");

그러면 디렉토리의 파일을 어떻게 처리합니까?

해결법

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

    1.입력 파일 경로를 얻으려면 다음과 같이 컨텍스트 개체를 사용할 수 있습니다.

    입력 파일 경로를 얻으려면 다음과 같이 컨텍스트 개체를 사용할 수 있습니다.

    FileSplit fileSplit = (FileSplit) context.getInputSplit();
    String inputFilePath = fileSplit.getPath().toString();
    

    여러 파일을 처리하는 방법은 다음과 같습니다.

    mapper 함수의 여러 인스턴스가 클러스터의 다른 시스템에 작성됩니다. 각 인스턴스는 다른 입력 파일을 수신합니다. 파일이 기본 dfs 블록 크기 (128MB)보다 크면 파일을 더 작은 부분으로 더 분할 한 다음 매퍼에 배포합니다.

    따라서 다음 두 가지 방법으로 각 매퍼가받는 입력 크기를 구성 할 수 있습니다.

    노트 : 이 매개 변수는 입력 형식이 입력 파일 분리를 지원하는 경우에만 유효합니다. 일반적인 압축 코덱 (예 : gzip)은 파일 분할을 지원하지 않으므로 무시됩니다.

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

    2.@Amar의 답변을 계속하면서 필자는 사용자 정의 된 inoput 형식이 입력 파일을 분할하지 않기 때문에 다음 코드에서 FileStatus 객체를 사용했습니다.

    @Amar의 답변을 계속하면서 필자는 사용자 정의 된 inoput 형식이 입력 파일을 분할하지 않기 때문에 다음 코드에서 FileStatus 객체를 사용했습니다.

    FileSystem fs = file.getFileSystem(conf);
                    FileStatus status= fs.getFileStatus(file);
                    String fileName=status.getPath().toString();
    
  3. from https://stackoverflow.com/questions/14067129/how-does-mapreduce-read-from-multiple-input-files by cc-by-sa and MIT license