복붙노트

[HADOOP] 돼지 : 매퍼의 수를 제어합니다.

HADOOP

돼지 : 매퍼의 수를 제어합니다.

나는 감속기를 초래하는 문장에서 PARALLEL 절을 사용하여 감속기의 수를 제어 할 수 있습니다.

매퍼의 수를 제어하고 싶습니다. 데이터 소스가 이미 생성되어 있으므로 데이터 소스의 부품 수를 줄일 수 없습니다. 돼지 문에 의해 생성 된지도의 수를 제어 할 수 있습니까? 스폰되는지도의 수에 상한선과 상한선을 유지할 수 있습니까? 이것을 제어하는 ​​것이 좋은 생각입니까?

내가 pig.maxCombinedSplitSize, mapred.min.split.size, mapred.tasktracker.map.tasks.maximum 등을 사용하여 시도했지만 도움이되지 않는 것 같습니다.

누군가가지도의 수를 제어하는 ​​방법을 이해하고 실제 사례를 공유 할 수있게 도와 줄 수 있습니까?

해결법

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

    1.매퍼 수에 대한 간단한 경험 법칙이 있습니다. 파일 매김만큼 많은 매퍼가 있습니다. 파일 분할은 HDFS가 파일을 분할하는 블록의 크기 (구성에 따라 64MB, 128MB, 256MB)에 따라 다르지만 FileInput 형식은 고려되지만 자체 동작을 정의 할 수 있습니다.

    매퍼 수에 대한 간단한 경험 법칙이 있습니다. 파일 매김만큼 많은 매퍼가 있습니다. 파일 분할은 HDFS가 파일을 분할하는 블록의 크기 (구성에 따라 64MB, 128MB, 256MB)에 따라 다르지만 FileInput 형식은 고려되지만 자체 동작을 정의 할 수 있습니다.

    분할은 클러스터의 데이터의 실제 위치에 묶여 있기 때문에 중요합니다. Hadoop은 코드에 데이터가 아닌 데이터에 코드를 제공합니다.

    이 문제는 파일 크기가 블록 크기 (64MB, 128MB, 256MB)보다 작 으면 발생합니다. 즉, 입력 파일이있을 때만큼 분할이 이루어지며 효율적이지 않습니다. 일반적으로 각 맵 작업이 시작될 때마다 시각. 이 경우 가장 좋은 방법은 split.maxCombinedSplitSize를 사용하는 것입니다. 분할을 무시하는 방식으로 여러 개의 작은 파일을 하나의 Mapper로 읽으려고 시도하기 때문입니다. 그러나 너무 크게 만들면 코드에 데이터를 가져올 위험이 있으며 네트워크 문제가 발생할 수 있습니다. 데이터가 다른 데이터 노드에서 스트리밍되어야하므로 맵퍼가 너무 적 으면 네트워크 제한이있을 수 있습니다. 숫자를 블록 크기 또는 그 절반에 가깝게 유지하면 좋을 것입니다.

    다른 해결책은 작은 파일을 하나의 큰 분할 가능 파일로 병합하는 것입니다. 그러면 자동으로 효율적인 매퍼 수가 생성됩니다.

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

    2.mapred.map.tasks 속성을 원하는 번호로 변경할 수 있습니다. 이 속성에는 기본지도 작업 / 작업이 포함되어 있습니다. 전역 적으로 설정하는 대신 세션에 대한 속성을 설정하면 작업이 완료되면 기본값이 복원됩니다.

    mapred.map.tasks 속성을 원하는 번호로 변경할 수 있습니다. 이 속성에는 기본지도 작업 / 작업이 포함되어 있습니다. 전역 적으로 설정하는 대신 세션에 대한 속성을 설정하면 작업이 완료되면 기본값이 복원됩니다.

  3. from https://stackoverflow.com/questions/24238341/pig-control-number-of-mappers by cc-by-sa and MIT license