복붙노트

[HADOOP] 하둡 매퍼에서 총 입력 경로 개수를 가져옵니다

HADOOP

하둡 매퍼에서 총 입력 경로 개수를 가져옵니다

우리는 우리의 맵리 듀스 프로그램은 우리의 매퍼에 통해 반복되어 입력 경로의 총 수를 잡기 위해 노력하고 있습니다. 우리는 지수에 따라 우리의 가치를 포맷 카운터와 함께이를 사용하는 것입니다. 매퍼에서 총 입력 경로 개수를 당길 수있는 쉬운 방법이 있나요? 미리 감사드립니다.

해결법

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

    1.당신은 FileInputFormat.getSplits ()에 대한 소스를 통해 볼 수 있었다 -이 mapred.input.dir에 대한 구성 등록 정보를 다시 끌어 다음 경로의 배열이 CSV를 해결합니다.

    당신은 FileInputFormat.getSplits ()에 대한 소스를 통해 볼 수 있었다 -이 mapred.input.dir에 대한 구성 등록 정보를 다시 끌어 다음 경로의 배열이 CSV를 해결합니다.

    이러한 경로는 여전히 다음 일이 getSplits 그래서 폴더와 정규식의 ()를 보호하는 방법 org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus (JobContext)에 배열을 전달하는 것입니다 않습니다 나타낼 수 있습니다. 이것은 실제로 DIRS / 정규식의 나열 나열하는 디렉토리 / 정규식 일치하는 파일을 통해 이동 (구성된 경우도 PathFilter를 호출).

    이 방법은 보호와 함께이 인수, 그리고 차례로 FileInputFormat.listStatus 메소드의 호출을 래핑 그래서, 당신은 Mapper.Context을 수용하는 listStatus 방법이있다 FileInputFormat의 간단한 '더미'확장자를 만들 수 있습니다 :

    public class DummyFileInputFormat extends FileInputFormat {
        public List<FileStatus> listStatus(Context mapContext) throws IOException {
            return super.listStatus(mapContext);
        }
    
        @Override
        public RecordReader createRecordReader(InputSplit split,
                TaskAttemptContext context) throws IOException,
                InterruptedException {
            // dummy input format, so this will never be called
            return null;
        }
    }
    

    편집 : 그것은 FileInputFormat처럼 보이는 사실은 이미 getSplits의 끝 () (아마도 0.20.203에 도입 적어도 1.0.2에서) 방법에서 작업 속성 mapreduce.input.num.files를 구성, 당신을 위해이 작업을 수행

    다음은 JIRA 티켓입니다

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

    2.당신은 설정 입력 경로의 수와 작업에 구성 할 수 있습니다. 처럼

    당신은 설정 입력 경로의 수와 작업에 구성 할 수 있습니다. 처럼

    jobConf.setInt("numberOfPaths",paths.length);
    

    당신이 당신의 작업을 구성하는 장소에 코드를 삽입. 그 후 문맥을 받고하여 Mapper.setup (Mapper.Context 컨텍스트)의 구성에서 그것을 읽었다.

  3. from https://stackoverflow.com/questions/10585560/get-total-input-path-count-in-hadoop-mapper by cc-by-sa and MIT license