복붙노트

[HADOOP] Hadoop 파티션

HADOOP

Hadoop 파티션

Hadoop 파티셔에 대해 물어보고 싶습니다. Mappers 내에서 구현됩니까? 기본 해시 파티셔 사용의 성능을 측정하는 방법 - 데이터 스큐를 줄이는 데 더 나은 파티셔가 있습니까?

감사

해결법

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

    1.파티셔너는 Mapper 내에 없습니다.

    파티셔너는 Mapper 내에 없습니다.

    아래는 각 매퍼에서 발생하는 프로세스입니다.

    아래는 각 감속기에서 발생하는 프로세스입니다.

    아래 코드는 실제 키 분할 프로세스를 보여줍니다. getpartition ()은 특정 키가 해시 코드를 기반으로 보내야하는 파티션 번호 / 감속기를 반환합니다. 해시 코드는 각 키마다 고유해야하며 가로형 해시 코드는 키에 대해 고유하고 동일해야합니다. 이를 위해 hadoop은 java 기본 해시 코드 대신 자체 Hashcode를 구현합니다.

     Partition keys by their hashCode(). 
    
            public class HashPartitioner<K, V> extends Partitioner<K, V> {
            public int getPartition(K key, V value,
                                     int numReduceTasks) {
               return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
           }
    
           }
    
  2. ==============================

    2.파티셔너는 Mappers와 Reducers 사이의 핵심 구성 요소입니다. 그것은 방출 된지도를 Reducers 사이에 분배합니다.

    파티셔너는 Mappers와 Reducers 사이의 핵심 구성 요소입니다. 그것은 방출 된지도를 Reducers 사이에 분배합니다.

    Partitioner는 모든 Map Task JVM (Java 프로세스) 내에서 실행됩니다.

    기본 파티셔닝 HashPartitioner는 해시 함수를 기반으로 작동하며 TotalOrderPartitioner와 같은 다른 파티셔너와 비교할 때 매우 빠릅니다. 모든지도 출력 키에 해시 함수를 실행합니다. 즉 :

    Reduce_Number = (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
    

    해시 파티셔너의 성능을 확인하려면 작업 카운터 줄이기를 사용하고 리 듀서간에 배포가 어떻게 발생했는지 확인하십시오.

    Hash Partitioner는 기본 파티셔이며 높은 왜곡을 가진 데이터를 처리하는 데 적합하지 않습니다.

    데이터 왜곡 문제를 해결하려면 MapReduce API에서 Partitioner.java 클래스를 확장하는 맞춤형 파티션 클래스를 작성해야합니다.

    커스텀 파티셔너의 예제는 RandomPartitioner와 같습니다. 이것은 감속기 사이에 왜곡 된 데이터를 고르게 분배하는 가장 좋은 방법 중 하나입니다.

  3. from https://stackoverflow.com/questions/27595195/hadoop-partitioner by cc-by-sa and MIT license